Những gì được biết về cấu trúc dữ liệu có thể duy trì một chuỗi các mục theo hai hoạt động sau đây?
- Đẩy (x): thêm x vào cuối chuỗi và trả về mã định danh cho vị trí của nó trong chuỗi
- Trích xuất (S): được cung cấp một bộ định danh không có thứ tự, xóa các mục trong các vị trí đó khỏi chuỗi và trả về danh sách các mục đã xóa theo thứ tự
Nếu bạn thích, bạn có thể coi đây là một ngăn xếp hoặc một hàng đợi với thao tác phân tách tách nó thành hai ngăn xếp: thao tác trích xuất có thể được sử dụng để thực hiện thao tác pop hoặc dequeue, và cũng có thể đặt chuỗi trích xuất của các mục trở lại vào một ngăn xếp hoặc hàng đợi khác nhau.
Những gì tôi đã biết: người ta có thể duy trì chuỗi dưới dạng danh sách liên kết đôi, trong đó mỗi mã định danh chỉ là một con trỏ tới nút danh sách được liên kết và mỗi nút cũng lưu trữ một số vị trí cho phép so sánh nhanh giữa vị trí của hai yếu tố không liên quan theo trình tự. Không khó để cập nhật số vị trí khi cấu trúc dữ liệu tiến triển sao cho tất cả chúng đều là số nguyên dương có giá trị tối đa , trong đó là số mục hiện tại trong danh sách. Với cấu trúc dữ liệu này, phần khó khăn duy nhất của thao tác trích xuất là sắp xếp các mục được trích xuất theo số vị trí của chúng. Việc trích xuất các mục mấtn k O ( k √ Chẳng hạn thời gian ngẫu nhiên dự kiến sử dụng thuật toán sắp xếp số nguyên của Han và Thorup từ FOCS 2002, và một hoạt động đẩy cần thời gian không đổi.
Những gì tôi không biết: có thể xử lý trích xuất trong thời gian và đẩy trong thời gian không đổi? Có tài liệu về vấn đề này? Có khó như phân loại số nguyên không?
Động lực: đây là bước cơ bản cần thiết để đặt hàng các mục trong thuật toán lập lịch Coffman-Graham, cũng có các ứng dụng trong vẽ biểu đồ. Phần khó của Coffman-Graham là một trật tự tôpô từ vựng. Điều này có thể được thực hiện bằng cách duy trì, đối với mỗi đại diện khác nhau, một chuỗi các đỉnh với độ phân giải đó trong biểu đồ con được tạo bởi các đỉnh còn lại. Sau đó, liên tục loại bỏ đỉnh đầu tiên khỏi chuỗi các đỉnh zero-indegree và thêm nó vào thứ tự tôpô; trích xuất các hàng xóm của từ các độ mà trước đây chúng thuộc về và đẩy chúng lên chuỗi cho mức độ nhỏ hơn tiếp theo. Vậy mộtv O ( k ) thời gian cho các hoạt động trích xuất trong cấu trúc dữ liệu này sẽ dẫn đến việc triển khai thời gian tuyến tính của thuật toán Coffman-Graham.
Vì ban đầu hỏi điều này, tôi đã tìm thấy một bài báo của Sethi từ năm 1976 cho phép thuật toán CoffmanTHER Graham được thực hiện theo thời gian tuyến tính, và đưa nó vào bài viết Wikipedia của tôi về thuật toán Coffman xông Graham , vì vậy động lực ban đầu ít có ý nghĩa. Tôi vẫn tò mò câu trả lời là gì.