Có bất kỳ vấn đề nào mà thuật toán được biết đến nhiều nhất có thời gian chạy


18

Tôi chưa bao giờ thấy một thuật toán có nhật ký trong mẫu số trước đây và tôi tự hỏi liệu có bất kỳ thuật toán thực sự hữu ích nào với hình thức này không?

Tôi hiểu rất nhiều điều có thể khiến một yếu tố log được nhân lên trong thời gian chạy, ví dụ như thuật toán sắp xếp hoặc dựa trên cây, nhưng điều gì có thể khiến bạn chia cho một yếu tố log?


24
Sáp nhập, với . f(n)=nlog2n
Jeffε

12
@ Jɛ ff E Mcsnarkster lén lút
Suresh Venkat

5
Radix sort - nó thực sự là . Điều gì đang xảy ra là vì truy cập ngẫu nhiên, bạn có thể lưu một yếu tố nhật ký ....O(nlogn/logn)
Sariel Har-Peled

Tôi tự hỏi nếu định lý phân cấp DTIME, có thể được sử dụng làm đối số cho sự tồn tại của các thuật toán như vậy, với điều kiện là người ta có thể thực hiện một số mẹo tiết kiệm chi phí không gian tương tự trong mô hình RAM.
chazisop

Câu trả lời:


41

Câu trả lời thông thường cho "điều gì có thể khiến bạn chia cho một bản ghi?" là sự kết hợp của hai điều:

  1. một mô hình tính toán trong đó các phép toán số học thời gian không đổi trên các số nguyên có kích thước từ được cho phép, nhưng trong đó bạn muốn bảo thủ về độ dài của các từ, vì vậy bạn giả sử các bit trên mỗi từ (vì ít hơn số đó và bạn thậm chí không thể giải quyết tất cả bộ nhớ và cũng vì các thuật toán sử dụng tra cứu bảng sẽ mất quá nhiều thời gian để thiết lập các bảng nếu các từ dài hơn) vàO(logn)
  2. một thuật toán nén dữ liệu bằng cách đóng gói các bit thành các từ và sau đó hoạt động trên các từ.

Tôi nghĩ có rất nhiều ví dụ, nhưng ví dụ kinh điển là Thuật toán Bốn người Nga cho các chuỗi chung dài nhất v.v ... Nó thực sự kết thúc là , vì nó sử dụng ý tưởng đóng gói bit nhưng sau đó tiết kiệm được một giây hệ số log bằng cách sử dụng một ý tưởng khác: thay thế các khối hoạt động bit O ( log 2 n ) bằng một tra cứu bảng duy nhất.O(n2/log2n)O(log2n)


35

Rubik's Cube là một ví dụ rất tự nhiên (và đối với tôi, không ngờ tới). Một khối n×n×n yêu cầu các bước Θ(n2/logn) để giải. (Lưu ý rằng đây là ký hiệu theta, vì vậy đó là giới hạn trên và dưới chặt chẽ).

Điều này được thể hiện trong bài báo này [1].

Điều đáng nói là sự phức tạp của việc giải quyết các trường hợp cụ thể của khối Rubik là mở, nhưng được phỏng đoán là NP-hard ( ví dụ như thảo luận ở đây ) NP hard [2]. Thuật toán Θ(n2/logn) đảm bảo một giải pháp và nó đảm bảo rằng tất cả các giải pháp đều tối ưu không có triệu chứng, nhưng nó có thể không giải quyết tối ưu các trường hợp cụ thể. Định nghĩa hữu ích của bạn có thể hoặc không thể áp dụng ở đây, vì các khối của Rubik thường không được giải quyết bằng thuật toán này ( thuật toán của Kociemba thường được sử dụng cho các khối nhỏ vì nó đưa ra các giải pháp tối ưu, nhanh chóng trong thực tế).

[1] Erik D. Demaine, Martin L. Demaine, Sarah Eisenstat, Anna Lubiw và Andrew Winslow. Các thuật toán để giải khối Rubik. Kỷ yếu của Hội nghị chuyên đề châu Âu thường niên lần thứ 19 về thuật toán (ESA 2011), ngày 5 tháng 9 năm9 tháng 9 năm 2011, trang 689

[2] Erik D. Demaine, Sarah Eisenstat và Mikhail Rudoy. Giải quyết khối Rubik một cách tối ưu là hoàn thành NP. Kỷ yếu Hội thảo quốc tế lần thứ 35 về các khía cạnh lý thuyết của khoa học máy tính (STACS 2018), ngày 28 tháng 2, ngày 3 tháng 3 năm 2018, trang 24: 1-24: 13.


16

Một ví dụ về hiển thị trong mẫu số không có thủ thuật đóng gói bit là một bài báo gần đây của Agarwal, Ben Avraham, Kaplan và Sharir về tính toán khoảng cách Fréchet rời rạc giữa hai chuỗi đa giác trong thời gian O ( n 2 log log n / log n ) . Mặc dù tôi không quen thuộc với các chi tiết của thuật toán, một mẹo chung là phân vùng đầu vào thành các phần tương đối nhỏ và sau đó kết hợp các câu trả lời một cách khéo léo (tất nhiên điều này nghe có vẻ như chia và chinh phục, nhưng bạn không nhận được log n trong mẫu số với một số thủ thuật thông minh)lognO(n2loglogn/logn)


5
Đây là một ví dụ phức tạp hơn của kỹ thuật "Bốn người Nga" được mô tả trong câu trả lời của David.
Jeffε

13

Không chính xác những gì bạn yêu cầu, nhưng một tình huống "trong tự nhiên" trong đó một yếu tố nhật ký xuất hiện trong mẫu số là bài báo " Các chương trình phân nhánh và đánh giá cây " của Stephen Cook, Pierre McKenzie, Dustin Wehr, Mark Braverman, và La Mã Santhanam.

Vấn đề đánh giá cây (TEP) là: cho một cây -ary chú thích với các giá trị trong { 1 , ... , k } trên lá và chức năng { 1 , ... , k } d{ 1 , ... , k }d{1,,k}{1,,k}d{1,,k} trên các nút nội bộ , đánh giá cây. Ở đây, mỗi nút nội bộ nhận giá trị của hàm chú thích của nó trên các giá trị của các phần tử con của nó. Đây là một vấn đề dễ dàng và vấn đề là chỉ ra rằng nó không thể được giải quyết trong không gian logarit (khi chiều cao của cây là một phần của đầu vào). Để đạt được hiệu quả đó, chúng tôi quan tâm đến quy mô của các chương trình phân nhánh giải quyết TEP.

Trong Phần 5, các giới hạn chặt chẽ được trình bày cho các cây có chiều cao 3, cho cả TEP và cho vấn đề BEP liên quan, trong đó đầu ra được thu gọn thành theo một cách tùy ý. Đối với TEP, giới hạn là Θ ( k 2 d - 1 ) , trong khi đối với BEP, giới hạn là Θ ( k 2 d - 1 / log k ) , tức là bạn có được một bản ghi k .{0,1}Θ(k2d1)Θ(k2d1/logk)logk


12

Mặc dù nó không phải về thời gian chạy, tôi nghĩ rằng nó đáng nói là kết quả cổ điển của Hopcroft, Paul, và Valiant: [1], vì nó vẫn còn trong tinh thần của "những gì có thể khiến bạn tiết kiệmTIME[t]SPACE[t/logt] một yếu tố đăng nhập."

Điều đó đưa ra rất nhiều ví dụ về các vấn đề mà giới hạn trên được biết đến nhiều nhất về độ phức tạp không gian có một bản ghi trong mẫu số. (Tùy thuộc vào quan điểm của bạn, tôi sẽ nghĩ rằng một trong những ví dụ này rất thú vị - thật là một định lý tuyệt vời! - hoặc rất không thú vị - có lẽ nó không "thực sự hữu ích".)

[1] Hopcroft, Paul và Valiant. Về thời gian so với không gian . J. ACM 24 (2): 332-337, 1977.



8

nO((n/logn)2)

William J. Masek, Mike Paterson: Một thuật toán tính toán chuỗi nhanh hơn khoảng cách. J. Tính toán. Hệ thống. Khoa học. 20 (1): 18-31 (1980).


4
Một lần nữa, đây là một biến thể của thuật toán Bốn người Nga, tôi nghĩ vậy.
David Eppstein

7

Θ(n/logn) xuất hiện như là đúng ràng buộc đối với một vấn đề được coi là bởi Greg và Paul Valiant (không có kết nối đến thủ đoạn bit):

Gregory Valiant và Paul Valiant, Sức mạnh của các công cụ ước tính tuyến tính, năm 2011. Trong Hội nghị chuyên đề hàng năm lần thứ 52 về nền tảng của khoa học máy tính, FOCS 2011.


7

Đây là một ví dụ khác về một ràng buộc chặt chẽ có một yếu tố đăng nhập. (Đây là Định lý 6.17 từ Độ phức tạp của chức năng Boolean: Những tiến bộ và biên giới của Stasys Jukna.)

Kích thước công thức (trên cơ sở nhị phân đầy đủ hoặc cơ sở De Morgan) của vấn đề phân biệt thành phần là Θ(n2/đăng nhậpn), Ở đâu n là số bit trong đầu vào.

Lý do yếu tố log xuất hiện trong mẫu số là đại diện m số nguyên từ 1 đến đa(m) requires n:=O(mlogm) bits in total, since each integer requires O(logm) bits. So an upper bound that looks natural in terms of m, like Θ(m2logm), becomes Θ(n2/logn) when expressed in terms of n, where n is the number of bits in the input.


2

Finding the prime factors of n by trial division when the list of primes is already given. There are θ(nlog(n)) primes less than n so if these primes are given to you, then trial division of n by each of them takes θ(nlog(n)) time (assuming division is a constant-time operation)


3
In fact, it's enough to look at the roughly 2n/logn primes below n. But there are far better algorithms out there.
Yuval Filmus

-2

somewhat similar to JG's answer & "thinking outside the box", this seems like a related/relevant/apropos/fundamental negative result. based on diagonalization with a universal TM, there exists a O(f(n)) DTIME language that cannot run in O(f(n)logf(n)) DTIME, due to the time hierarchy theorem. so this applies to a linear DTIME algorithm that exists, f(n)=n, that runs impossibly in O(nlogn) DTIME.


2
on a TM, DTIME(n/logn) is trivial as it doesn't allow the machine to read the whole input. also, the DTIME notation makes the big-oh notation unnecessary.
Sasho Nikolov

?? there is still theory for sublinear time algorithms...
vzn

3
sublinear algorithms make sense in oracle & random access models. DTIME is standardly defined w.r.t. multitape TM, and that's the definition used in the hierarchy theorem for DTIME.
Sasho Nikolov

1
No, @SashoNikolov, DTIME(n/logn) is not trivial. Compare "Are the first n/lgn bits of the input all zeros?" with "Do the first n/lgn bits of the input encode a satisfiable boolean formula?"
Jeffε

5
@JɛffE: You cannot test “Are the first n/lgn bits of the input all zeros?” in O(n/logn) time on a TM, since you do not know what n is without first reading the whole input, which takes time n. It is a standard fact that if f(n)<n, then DTIME(f(n)) contains only languages the membership in which can be determined from the first k bits of input for a constant k (and therefore are computable in constant time).
Emil Jeřábek supports Monica
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.