Chúng tôi có một số mặt hàng mà người dùng cuối sẽ có thể sắp xếp theo thứ tự mong muốn. Tập hợp các mục không được sắp xếp, nhưng mỗi mục chứa một khóa sắp xếp có thể được sửa đổi.
Chúng tôi đang tìm kiếm một thuật toán cho phép tạo khóa sắp xếp mới cho một mục được thêm hoặc di chuyển thành mục đầu tiên, mục cuối hoặc giữa hai mục bất kỳ. Chúng tôi hy vọng chỉ phải sửa đổi khóa sắp xếp của mục được di chuyển.
Một thuật toán ví dụ sẽ có mỗi khóa sắp xếp là một số dấu phẩy động và khi đặt một mục giữa hai mục, đặt khóa sắp xếp thành trung bình của chúng. Đặt một mục đầu tiên hoặc cuối cùng sẽ có giá trị ngoài cùng + - 1.
Vấn đề ở đây là độ chính xác của dấu phẩy động có thể khiến việc sắp xếp thất bại. Sử dụng hai số nguyên để biểu diễn một số phân số có thể khiến các số trở nên lớn đến mức chúng không thể được biểu diễn chính xác theo các loại số thông thường (ví dụ: khi chuyển dưới dạng JSON). Chúng tôi sẽ không muốn sử dụng BigInts.
Có một thuật toán phù hợp cho việc này sẽ hoạt động, ví dụ, sử dụng các chuỗi, sẽ không bị ảnh hưởng bởi những thiếu sót này?
Chúng tôi không tìm cách hỗ trợ số lượng lớn các bước di chuyển, nhưng thuật toán được mô tả ở trên có thể thất bại với số điểm nổi chính xác kép sau khoảng 50 lần di chuyển.
A, B, C
- A, AA, B, C
- A, AA, AB, B, C
- A, AA, AAA, AAB, AAC, AB, AC, B, C
. Tất nhiên, có lẽ bạn sẽ muốn sắp xếp các chữ cái của mình nhiều hơn để các chuỗi không phát triển quá nhanh, nhưng nó có thể được thực hiện.