Thời gian


38

Có ai quen thuộc với Yijie Han , không gian tuyến tính, thuật toán sắp xếp số nguyên không? Kết quả này xuất hiện trong một bài báo khá ngắn ( Sắp xếp xác định theo thời gian O ( n log log n ) và không gian tuyến tính . J. Alg. 50: 96 cạn105, 2004) về cơ bản sẽ kết hợp rất nhiều kết quả trước đó, với các điều chỉnh phù hợp. Vấn đề của tôi là nó được viết theo cách khá vẫy tay mà không đi sâu vào bất kỳ chi tiết cụ thể nào. Nó phụ thuộc rất nhiều vào các bài báo trước, nổi bật trong số đó là một bài báo khác của Han ( Cải thiện sắp xếp số nguyên nhanh trong không gian tuyến tínhO(nloglogn)O(nloglogn). Thông tin và tính toán 170 (1): 81 nên94) được viết theo nhiều kiểu giống nhau. Tôi đang gặp khó khăn đáng kể trong việc hiểu hai bài báo này, đặc biệt là cách họ thích nghi và sử dụng các kết quả trước đó. Tôi sẽ đánh giá cao sự giúp đỡ nào.

Điều này tất nhiên là quá rộng và mơ hồ để được coi là một câu hỏi thích hợp, nhưng tôi hy vọng sẽ phát triển một cuộc thảo luận qua một số câu hỏi và câu trả lời được xác định rõ.

Để dẫn ra, đây là câu hỏi cụ thể đầu tiên của tôi. Trong Bổ đề 2 của Thông tin. Comp. giấy có một thuật toán thời gian đệ quy để tìm số nguyên nhỏ nhất thứ m trong một tập hợp n số nguyên nhỏ được đóng gói k mỗi từ vào các từ RAM. Mô tả của thuật toán không đề cập đến cách xử lý trường hợp cơ sở k = O ( n ) . Trong trường hợp này, cần phải thực hiện lựa chọn trong thời gian O ( log k ) . Điều này có thể giải quyết như thế nào?O(n/klogk)nkk=O(n)O(logk)


13
Nó sẽ là hoàn toàn thích hợp để viết cho anh ấy: hanyij@umkc.edu.
Joseph O'Rourke

Vâng. Chúng tôi đã thảo luận về vấn đề chung này trước đây và cách đúng đắn để giải quyết vấn đề này là gửi email cho tác giả.
Suresh Venkat

17
Điều này bao gồm một câu hỏi cụ thể về một bài báo 7 năm tuổi và đã trải qua quá trình đánh giá ngang hàng. Trong khi Ari có thể gửi email cho tác giả, đây có vẻ là một câu hỏi lý tưởng cho trang web này. Tôi không hiểu độ lệch.
Huck Bennett

18
Tất nhiên việc đầu tiên tôi làm là viết Han. Không có câu trả lời. Sau đó, tôi đã liên hệ với một người khác đã thực hiện nghiên cứu sắp xếp số nguyên, và anh ta nói rằng khi nhìn thấy anh ta thấy các giấy tờ quá lộn xộn để xứng đáng đầu tư thêm thời gian của mình. Đó là khi tôi đến đây. Nếu có ai đó biết Han và có thể thay mặt tôi chú ý, điều đó cũng thật tuyệt.
Ari

4
Ω(nlogn)

Câu trả lời:


18

Tôi cũng đang tự hỏi điều tương tự.

May mắn thay, tôi đã có thể tìm thấy một bài báo được xuất bản vào năm 2011 giải thích chính điều này; hơn thế nữa, bạn không cần đăng ký để xem nó: Phân tích hiệu suất và triển khai của phân loại cây theo cấp số nhân

O(nloglogn)

Yijie Han đã đưa ra một ý tưởng làm giảm độ phức tạp theo thời gian dự kiến ​​trong không gian tuyến tính. [6] Kỹ thuật mà anh ta sử dụng được phối hợp truyền lại các số nguyên trên cây tìm kiếm theo cấp số nhân của Andersson [8] và phân chia thời gian tuyến tính của các bit của số nguyên. Thay vì chèn số nguyên một lần vào cây tìm kiếm theo cấp số nhân, anh ta truyền lại tất cả các số nguyên một cấp của cây tìm kiếm theo cấp số nhân tại một thời điểm. Phối hợp như vậy đi xuống cung cấp cơ hội thực hiện đa phân chia trong thời gian tuyến tính và do đó tăng tốc thuật toán. Ý tưởng này có thể cung cấp tốc độ, nhưng trong thực tế thực tế, rất khó để xử lý các số nguyên theo lô.

[6] Y. Han, Sắp xếp xác định theo thời gian O (n log log n) và không gian tuyến tính, STOC thứ 34, 2002.

[8] A. Andersson, Sắp xếp và tìm kiếm xác định nhanh trong không gian tuyến tính, Hội thảo chuyên đề về nền tảng của khoa học máy tính, 1996.


Tại sao các downvote?
Suresh Venkat

1
Tôi vừa thêm liên kết bài báo này vào trang wikipedia cây Exponential . FYI: Bài viết này có thể được xuất bản sau khi câu hỏi được hỏi.
TẠI

@AT, bạn có thể vui lòng mở rộng câu trả lời của mình một chút và giải thích cách nó trả lời câu hỏi không. Ngay bây giờ điều duy nhất nó đưa ra là một liên kết đến một bài báo trong một số tạp chí.
Kaveh

1
Chà, tôi đã từ bỏ bài báo của Han, vì vậy tôi rất vui vì bạn đã có thể cung cấp trợ giúp này. Tôi đã không thực sự mong đợi để nhìn thấy bất cứ điều gì khi tôi trở lại đây ngày hôm nay. Cảm ơn! Tôi sẽ đọc bài báo mới này và xem liệu nó có giúp tôi tiến bộ trên bài báo của Han không.
Ari

2
(loglogn)h(h+1)!2(h+1)!h+22(h+2)!2(h+2)!=nh=Ω(logn/loglogn)(loglogn)

1

Tôi không chắc chắn về câu trả lời (chưa đi qua giấy) nhưng tôi nghĩ rằng điều này sẽ giúp. Các số được đóng gói thành một từ duy nhất, vì vậy các thao tác trên một từ sẽ mất thời gian O (1). Nếu có, giả sử, k số bit h mỗi thì kích thước từ phụ thuộc vào k, h lần lượt cũng phụ thuộc vào phạm vi số. Vì vậy, chúng tôi sử dụng các kỹ thuật giảm phạm vi có thể giảm phạm vi số để nhiều số có thể vừa trong một từ. Sau đó, tạo mặt nạ bit thích hợp, chúng ta có thể tìm thấy các số nguyên lớn hơn từ các số nguyên ngắn hơn khi xem xét hai từ cùng một lúc. Điều này có thể được thực hiện trong thời gian O (1). (Bản năng: đối với điều này, mỗi số được lưu trữ trong từ có một bit cờ được liên kết với nó và sau đó chúng tôi trừ hai từ ... nếu bit cờ đi thì số đó nhỏ hơn một số).

Tương tự như trên, chúng ta cũng có thể sắp xếp bất kỳ từ nào chứa k số trong thời gian O (log k) (sắp xếp bitonic).

Chỉnh sửa: Thuật toán sắp xếp các số 2k trong phạm vi 0 đến m-1 được đóng gói trong một từ trong đó mỗi số có kích thước L là = log (m + k) +2.

K1

K2

Lặp lại cho t = log k đến 0.

Phần 1 - tách từ gốc Z thành hai từ A và B.

  1. K2K1

  2. 2tL

  3. B = Z- (Z & M).

Phần 2

  1. K1K1

  2. M = M- (M dịch chuyển sang trái L-1 vị trí).

  3. MIN = (B & M) HOẶC (A- (A & M))

  4. MAX = (A & M) HOẶC (B- (B & M))

  5. 2tL

  6. Cuối cùng, ORing MAX và MIN một cách thích hợp, chúng tôi lấy lại Z.

Tôi đã đưa ra bản phác thảo, hy vọng bạn có thể điền vào các chi tiết cần thiết.


Tôi không rõ những gì bạn đang đề xuất. Giả định là các số nguyên đã nhỏ và k trong số chúng đã được đóng gói thành một từ duy nhất. Bạn đang đề xuất để giảm thêm kích thước của họ? Nếu vậy, bạn sẽ làm gì sau đó? Ngoài ra, tôi biết cách sắp xếp chuỗi bitonic được đóng gói thành một từ duy nhất trong thời gian O (log k) hoặc sắp xếp chuỗi chung (không bitonic) theo thời gian O (log ^ 2 k). Nếu bạn biết một thuật toán sắp xếp một chuỗi chung trong thời gian O (log k), bạn có thể mô tả chi tiết hơn không? (Một thuật toán như vậy tất nhiên sẽ giải quyết được vấn đề lựa chọn.)
Ari

Tôi không tiếp tục giảm kích thước, tôi đã gợi ý cách giảm kích thước không cần thiết trong câu trả lời của bạn. Xin lỗi vì sự nhầm lẫn.
singhsumit

Trừ khi tôi hiểu nhầm về nó, đây giống như thuật toán sắp xếp các chuỗi bitonic. Nó không sắp xếp các trình tự chung. Ví dụ: nó có sắp xếp chuỗi 3.0,2,0, trong đó 3 nằm trong trường ngoài cùng (quan trọng nhất) không?
Ari

3 0 2 0 được tách n chúng ta nhận được A = 3 2 và B = 0 0 thì MAX trở thành 3 2 và MIN là 0 0. Sau đó, chúng ta có Z mới là 3 2 0 0. Bất kỳ chuỗi chung nào cũng có chuỗi bitonic có kích thước 2. với mỗi lần lặp, các kích thước này sẽ tăng gấp đôi và cuối cùng trong thời gian đăng nhập k chúng ta có câu trả lời.
singhsumit

Không. Các số không được nén, chỉ được chuyển xuống. Trong lần lặp đầu tiên, chúng tôi chia các cặp số khác nhau ở bit cao của vị trí của chúng để chúng tôi nhận được A = 0 3 0 2 và B = 0 0 0 0, vì vậy MIN = 0 0 0 0, MAX = 0 3 0 2 và Z = 3 0 2 0. Trong lần lặp thứ hai, chúng tôi chia các cặp khác nhau ở bit thấp của vị trí của chúng, vì vậy một lần nữa chúng tôi nhận được A = 0 3 0 2, B = 0 0 0 0 và một lần nữa Z không thay đổi.
Ari
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.