Các ví dụ đáng chú ý của ý tưởng căn bậc hai trong phân tích phức tạp


15

Có một số thuật toán và cấu trúc dữ liệu khai thác ý tưởng rằng có giá trị tối thiểu tại k = \ sqrt n . Ví dụ phổ biến bao gồm k = max{k,n/k}k=n

  • Thuật toán bước khổng lồ cho bước để tính toán logarit rời rạc trong O(n) ,
  • phạm vi trực giao 2D tĩnh tính theo thời gian O(n) và bộ nhớ O(n) ,
  • hàng đợi ưu tiên với EXTRACT-MIN trong O(nk) và DECREASE-KEY trong O(1) ,
  • tô màu một đồ thị 3 màu với các màu O(n) trong thời gian đa thức,

chỉ để một vài cái tên

Mặc dù các thuật toán như vậy thường không tối ưu, chúng rất dễ hiểu đối với học sinh và tốt để nhanh chóng cho thấy giới hạn ngây thơ không tối ưu. Ngoài ra, cấu trúc dữ liệu ý tưởng căn bậc hai đôi khi thực tế hơn so với các đối tác dựa trên cây nhị phân của chúng vì tính thân thiện với bộ đệm (không xem xét các kỹ thuật lãng quên bộ nhớ cache). Đó là lý do tại sao tôi dành một chút chú ý cho chủ đề này trong khi giảng dạy.

Tôi quan tâm đến các ví dụ đặc biệt hơn của loại này. Vì vậy, tôi đang tìm kiếm bất kỳ thuật toán (tốt nhất là thanh lịch), cấu trúc dữ liệu, giao thức truyền thông, vv phân tích dựa trên ý tưởng căn bậc hai. Tiệm cận của họ không cần phải là tối ưu.


Tôi xin lỗi nếu câu hỏi hơi mơ hồ; cảm thấy tự do để cải thiện.
Dmytro Korduban

Đây có nên là CW?
Suresh Venkat

2
@Suresh: Nếu danh sách lớn của quy tắc ”Quy tắc CW vẫn còn hiệu lực, thì có, nó phải là CW.
Tsuyoshi Ito


đó là một mẹo cơ bản trên tất cả các thuật toán gần đây cho các mô hình thu nhỏ bản đồ
Sasho Nikolov

Câu trả lời:


10

Chazelle, Liu, và Magen của giấy Sublinear Geometric Algorithms (STOC 2003, SICOMP 2006) có nhiều ứng dụng thông minh của lừa lấy mẫu ngẫu nhiên tiếp theo. Biến thể của cùng một mánh khóe đã được Gärtner và Welzl [ DCG 2001 ] sử dụng trước đây , người đã trích dẫn phiên bản đầu tiên của CLR (1990).

Giả sử chúng ta được cung cấp một danh sách các số được liên kết vòng tròn được sắp xếp, được lưu trữ trong một khối bộ nhớ liền kề. Đó là, chúng ta có hai mảng và , trong đóN e x t [ 1 .. n ]Key[1..n]Next[1..n]

  • nKey[1..n] lưu trữ một tập hợp số theo thứ tự tùy ý ;n
  • Nếu là số lớn nhất trong tập hợp thì là số nhỏ nhất trong tập hợp; mặt khác, là số nhỏ nhất trong tập lớn hơn .K e y [ N e x t [ i ] ] K e y [ N e x t [ i ] ] K e y [ i ]Key[i]Key[Next[i]]Key[Next[i]]Key[i]

Sau đó, chúng ta có thể tìm thấy sự kế thừa của một số đã cho trong thời gian dự kiến ​​như sau:O ( xO(n)

  • Chọn một mẫu ngẫu nhiên gồm các phần tử của mảng . Đặt là mẫu lớn nhất nhỏ hơn (hoặc mẫu lớn nhất, nếu tất cả các mẫu đều lớn hơn ). KeyKey[j]xxnKeyKey[j]xx

  • Theo dõi các con trỏ từ cho đến khi chúng ta thấy một số lớn hơn hoặc bằng (sau khi bọc xung quanh nếu tất cả các mẫu đều lớn hơn ).K e y [ j ] x xNextKey[j]xx

Một ứng dụng tương đối đơn giản của bổ đề Yao ngụ ý rằng giới hạn thời gian dự kiến là tối ưu. Bất kỳ thuật toán xác định nào cho vấn đề này đều yêu cầu thời gian trong trường hợp xấu nhất.Ω(n)O(n)Ω(n)


10

Có các tam giác trong bất kỳ đồ thị -edge nào và chúng có thể được tìm thấy trong thời gian . Có nhiều cách để làm điều này nhưng tôi nghĩ một trong những cách sớm nhất là Itai và Rodeh (STOC 1977) , người cung cấp một thuật toán đi qua một chuỗi các lần lặp tuyến tính, mỗi lần loại bỏ một khu rừng kéo dài khỏi biểu đồ. Trong các lần lặp đầu tiên khi rừng còn lại có ít nhất thành phần, thuật toán sẽ loại bỏ ít nhất cạnh trên mỗi bước và trong các lần lặp lại muộn nhất khi nó có nhiều nhất các thành phần , mức độ tối đa là và co lại ít nhất một trong mỗi bươc. Vì vậy, tổng số lần lặp là nhiều nhấtm O ( m 3 / 2 ) n - k k n - k k m / k + k O ( O(m3/2)mO(m3/2)nkknkkm/k+k và chọn sự đánh đổi phù hợp sẽ đưa ra giới hạn tổng thể của trên các lần lặp và đúng hạn.O(m 3 / 2 )O(m)O(m3/2)

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.