Có vấn đề nào trong đó phân chia và chinh phục / đệ quy là vô dụng?


8

Khi chúng tôi cố gắng xây dựng một thuật toán cho một vấn đề mới, phân chia và chinh phục (sử dụng đệ quy) là một trong những cách tiếp cận đầu tiên mà chúng tôi thử. Nhưng trong một số trường hợp, cách tiếp cận này dường như không có kết quả khi vấn đề trở nên phức tạp hơn nhiều khi đầu vào của nó phát triển.

Câu hỏi của tôi là: có vấn đề nào mà chúng ta có thể chứng minh rằng phương pháp phân chia và chinh phục không thể giúp giải quyết? Trong các dòng sau tôi cố gắng làm cho điều này trang trọng hơn.

Đặt là một vấn đề nhất định có đầu vào có kích thước (ví dụ: một vấn đề chấp nhận đầu vào là một mảng gồm số). Giả sử chúng ta có một thuật toán đệ quy để giải . Thời gian chạy đệ quy của thuật toán đó được tính toán giả sử một nhà tiên tri có thể giải cho mọi trong thời gian không đổi. Ví dụ:n n P ( n )P(n)nnP(n)k < nP(k)k<n

  • Thời gian chạy đệ quy của tìm kiếm nhị phân là , vì nó chỉ sử dụng so sánh và hai cuộc gọi đệ quy.Ôi(1)
  • Phần tử tối đa trong một mảng có thể được tìm thấy trong thời gian đệ quy .Ôi(1)
  • Thời gian chạy đệ quy của sắp xếp hợp nhất là , vì bước hợp nhất.Ôi(n)

Thời gian đệ quy thường nhỏ hơn thời gian chạy thực tế, điều này phản ánh thực tế rằng thuật toán đệ quy đơn giản hơn một giải pháp không đệ quy đơn giản cho cùng một vấn đề.

Bây giờ câu hỏi của tôi là:

Có một vấn đề có thể được giải quyết trong thời gian f(n) , nhưng có thể chứng minh không có thuật toán đệ quy với thời gian chạy đệ quy không có triệu chứng nhỏ hơn f(n) ?

Một số biến thể cụ thể của câu hỏi này là:

  • Có vấn đề nào trong P không có thuật toán với thời gian chạy đệ quy Ôi(1) không? (Có thể sắp xếp?)
  • Có một vấn đề với một thuật toán hàm mũ không có thuật toán với thời gian chạy đệ quy đa thức?

EDIT: trái với dự đoán của tôi, sắp xếp có một thuật toán với thời gian chạy đệ quy Ôi(1) . Vì vậy, nó vẫn mở, cho dù có một vấn đề trong không có thuật toán với thời gian chạy đệ quy O ( 1 ) .PÔi(1)


Có lẽ việc chứng minh một hạt nhân bị ràng buộc thấp hơn sẽ thực hiện thủ thuật en.wikipedia.org/wiki/Kernelization
Tyson Williams

Kích thước đầu ra là một giới hạn thấp hơn về thời gian chạy. Do đó, bất kỳ vấn đề nào với kích thước đầu ra phù hợp với độ phức tạp của nó đều có thuộc tính này.
Chao Xu

@Chao Xu: Tại sao đối số của bạn không áp dụng cho kích thước đầu vào? Tôi nghĩ rằng đối số phụ thuộc vào mô hình chi phí (và mô hình tính toán) mà chúng tôi xem xét.
Tsuyoshi Ito

2
Điều này trái ngược với những gì bạn đang tìm kiếm, nhưng với những nhà tiên tri đó, mô hình của bạn có thể giải quyết tổng tập hợp con - một vấn đề NP-Complete đã biết - trong thời gian tuyến tính, do đó, giả sử P! = NP mạnh hơn nhiều so với các hàm lặp trong trường hợp này . Hàm chỉ đơn giản kiểm tra xem tập hợp hiện tại có thêm 0 hay không, nếu không, nó tự gọi nó trên tập con n có kích thước n-1. Thời gian chạy chính là n! tuy nhiên, điều này còn tệ hơn cả sức mạnh vũ phu, vì vậy tôi không thực sự chắc chắn mô hình này mang lại giá trị bao nhiêu, nhưng đây vẫn là một câu hỏi thú vị.
Phylliida

2
Chỉnh sửa gần đây của bạn ("đệ quy" -> "phân chia và chinh phục") là một thay đổi khá lớn cho câu hỏi. Tôi sẽ chỉ đăng một câu hỏi riêng thay thế. Có lẽ chúng ta có thể nói những điều về phân chia và chinh phục bằng cách tìm kiếm ví dụ ở độ sâu của các mạch.
usul

Câu trả lời:


8

Có một vấn đề với một thuật toán hàm mũ không có thuật toán với thời gian chạy đệ quy đa thức?

Đúng. Lưu ý rằng nếu một ngôn ngữ kiểm đếm có thuật toán đệ quy của Hồi giáo với thời gian chạy đệ quy đa thức, thì đó là ngôn ngữ P. Có một ngôn ngữ kiểm đếm trong E ∖ P bởi một đối số đường chéo chuẩn.

Có một vấn đề có thể được giải quyết trong thời gian , nhưng có thể không có thuật toán đệ quy với thời gian chạy đệ quy o ( f ( n ) ) ?f(n)o(f(n))

Nó có thể phụ thuộc vào mô hình tính toán, nhưng tôi nghi ngờ điều này đã được biết, vì định lý phân cấp thời gian cho máy Turing hai băng không đủ mạnh để phân biệt, nói, thời gian O ( n 2 ) và thời gian o ( n 2 ) mà không cung cấp cho người truy cập thời gian liên tục vào các câu trả lời trong các trường hợp nhỏ hơn.


Nhận xét ngẫu nhiên về câu hỏi của bạn trong bài viết này:

  • Tôi không nghĩ rằng những câu hỏi này có liên quan đến tính hữu ích của các chương trình đệ quy, mặc dù tiêu đề của bài đăng và sự lựa chọn thuật ngữ của bạn gợi ý gì. Như BVMR đã viết trong một câu trả lời, các lần thu hồi và lặp lại là tương đương theo một nghĩa nào đó. Thay vào đó, tôi nghĩ rằng các câu hỏi có mối liên hệ với tính hữu ích của phương pháp phân chia và chinh phục.
  • Trong lý thuyết phức tạp, một khái niệm liên quan đến khái niệm thuật toán đệ quy của bạn, với thời gian chạy đệ quy của họ, được gọi là thời gian tự giảm giảm độ nhạy với độ phức tạp thời gian của họ.
  • Một số câu hỏi của bạn (chắc chắn là phần đề cập đến thuật toán thời gian tuyến tính) phụ thuộc vào sự lựa chọn mô hình tính toán.

Về câu trả lời đầu tiên của bạn: hãy để tôi thử mở rộng nó để xem tôi có hiểu đúng không. Giả sử rằng một ngôn ngữ kiểm đếm nhất định có thuật toán với "thời gian chạy đệ quy" đa thức. Một thuật toán đa thức cho ngôn ngữ này có thể được xây dựng bằng lập trình động. Câu trả lời cho có thể được tìm thấy trong thời gian đa thức vì không có cuộc gọi đệ quy nào được yêu cầu. Câu trả lời cho n = 1 sau đó có thể được tìm thấy trong thời gian đa thức bằng cách sử dụng câu trả lời cho n = 0 . Sau đó, câu trả lời cho n = 2 có thể được tìm thấy trong thời gian đa thức bằng cách sử dụng các câu trả lời cho n = 1n = 0n= =0n= =1n= =0n= =2n= =1n= =0, v.v ... Điều này có đúng không?
Erel Segal-Halevi

Có, mặc dù tốt hơn là tránh các khái niệm tiệm cận như thời gian đa thức của Hồi khi bạn nói về một giá trị cụ thể của n; chẳng hạn, không có nghĩa gì khi nói rằng thuật toán chạy trong thời gian đa thức khi n = 0. Nếu một ngôn ngữ kiểm đếm có thuật toán đệ quy của Hồi giáo thời gian , đó là đa thức trong n. Ôi(ΣTôi= =0np(Tôi))
Tsuyoshi Ito

Cảm ơn. Tôi đồng ý với nhận xét của bạn về chia và chinh phục và tôi đã chỉnh sửa câu hỏi cho phù hợp.
Erel Segal-Halevi

0

Bất kỳ câu hỏi nào có câu trả lời đệ quy đều có câu trả lời lặp lại và ngược lại.

Bất kỳ thuật toán đệ quy có thể được viết lại theo cách lặp và ngược lại.

Do đó, câu hỏi của bạn không tốt.


4
Độ phức tạp của một thuật toán, như tôi đã định nghĩa nó trong câu hỏi, nói chung không giữ nguyên khi nó được chuyển đổi từ lặp sang đệ quy. Ví dụ, có thể tìm thấy tối đa n phần tử bằng thuật toán lặp với các phép toán O (n), nhưng nó cũng có thể được tìm thấy bằng thuật toán đệ quy với các phép toán O (1) (một trong số đó là lệnh gọi đệ quy). Mặc dù cuối cùng thời gian chạy của cả hai thuật toán là như nhau, thuật toán đệ quy đơn giản hơn để lập trình vì nó có ít thao tác hơn.
Erel Segal-Halevi

-2

Tôi không chắc chắn nếu tôi hiểu chính xác khái niệm của bạn về "độ phức tạp đệ quy".

f

f(0,x)= =c(x)f(n+1,x)= =g(f(n,x),n,x)

cgÔi(1)Ôi(1)

Nếu tất cả các giả định của tôi được đáp ứng, thì ví dụ bạn đang tìm kiếm không thể là đệ quy nguyên thủy.


vui lòng giải thích về các downvote
DFF

P(k)k<ng(f(n,x),n,x)f(n,x)có thời gian chạy liên tục. Tôi đã không đánh giá thấp bạn, nhưng đây là một câu hỏi đã được trả lời một năm và bạn cũng hiểu sai một định nghĩa nhất định.
chazisop

gÔi(1)f(n,x)O(11)=O(1)

gÔi(1)

ahh, ok ... bây giờ mọi thứ đều có ý nghĩa ... cảm ơn vì đã làm rõ ... tôi có lẽ đã bối rối bởi thực tế là sự phức tạp đệ quy không được gọi đệ quy ^^ (mà không phải là celar từ định nghĩa imo)
DFF
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.