Thay vì đánh số đơn giản, bạn có thể trải đều các số trên một phạm vi lớn (kích thước không đổi), chẳng hạn như tối thiểu số nguyên và tối đa của một số nguyên CPU. Sau đó, bạn có thể tiếp tục đặt các số "ở giữa" bằng cách lấy trung bình hai số xung quanh. Nếu các số trở nên quá đông (ví dụ: bạn kết thúc với hai số nguyên liền kề và không có số nào ở giữa), bạn có thể thực hiện đánh số lại một lần cho toàn bộ đơn hàng, phân phối lại các số theo phạm vi.
Tất nhiên, bạn có thể chạy vào giới hạn rằng tất cả các số trong phạm vi của hằng số lớn được sử dụng. Thứ nhất, đây thường không phải là vấn đề, vì kích thước số nguyên trên máy đủ lớn để nếu bạn có nhiều yếu tố hơn thì có thể nó sẽ không phù hợp với bộ nhớ. Nhưng nếu đó là một vấn đề, bạn chỉ cần đánh số lại chúng với phạm vi số nguyên lớn hơn.
Nếu thứ tự đầu vào không phải là bệnh lý, phương pháp này có thể khấu hao số lần gia hạn.
Trả lời câu hỏi
Một so sánh số nguyên đơn giản có thể trả lời truy vấn .( X<?Y)
Ô ( 1 )O ( nhật ký| intege r | )
Chèn
Ô ( 1 )
Ô ( 1 )Ô ( n )
Tránh đánh số lại
Bạn có thể sử dụng số float thay cho số nguyên, vì vậy khi bạn nhận được hai số nguyên "liền kề", chúng có thể được tính trung bình. Do đó, bạn có thể tránh đánh số lại khi phải đối mặt với hai số nguyên: chỉ cần chia chúng làm đôi. Tuy nhiên, cuối cùng loại dấu phẩy động sẽ hết độ chính xác và hai phao "liền kề" sẽ không thể tính trung bình (trung bình của các số xung quanh có thể sẽ bằng một trong các số xung quanh).
Bạn có thể sử dụng tương tự số nguyên "vị trí thập phân", trong đó bạn duy trì hai số nguyên cho một phần tử; một cho số và một cho số thập phân. Bằng cách này, bạn có thể tránh đánh số lại. Tuy nhiên, số nguyên thập phân cuối cùng sẽ tràn.
Sử dụng danh sách các số nguyên hoặc bit cho mỗi nhãn hoàn toàn có thể tránh việc đánh số lại; điều này về cơ bản tương đương với việc sử dụng các số thập phân với độ dài không giới hạn. So sánh sẽ được thực hiện theo từ vựng và thời gian so sánh sẽ tăng theo chiều dài của danh sách liên quan. Tuy nhiên, điều này có thể làm mất cân bằng việc ghi nhãn; một số nhãn có thể chỉ yêu cầu một số nguyên (không có số thập phân), một số nhãn khác có thể có một danh sách dài (số thập phân dài). Đây là một vấn đề và việc đánh số lại cũng có thể giúp ích ở đây, bằng cách phân phối lại cách đánh số (ở đây liệt kê các số) trên một phạm vi đã chọn (phạm vi ở đây có thể có nghĩa là độ dài của danh sách) để sau khi đánh số lại, các danh sách đều có cùng độ dài .
Phương pháp này thực sự được sử dụng trong thuật toán này ( triển khai , cấu trúc dữ liệu có liên quan ); trong quá trình thuật toán, một thứ tự tùy ý phải được giữ và tác giả sử dụng số nguyên và đánh số lại để thực hiện điều này.
Cố gắng bám vào các con số làm cho không gian chính của bạn bị hạn chế phần nào. Thay vào đó, người ta có thể sử dụng các chuỗi có độ dài thay đổi, sử dụng logic so sánh "a" <"ab" <"b". Vẫn còn hai vấn đề cần giải quyết A. Các khóa có thể trở nên dài tùy ý B. So sánh các khóa dài có thể trở nên tốn kém