Các lớp phức tạp liên quan đến việc liệt kê tất cả các giải pháp?


15

Tôi đã đọc một câu hỏi tại Stack Overflow hỏi liệu NP -hard có liệt kê tất cả các chu kỳ đơn giản trong biểu đồ có chứa một nút cụ thể không và tôi nhận ra rằng tôi không thể nghĩ ra bất kỳ lớp phức tạp nào phù hợp với nói về các vấn đề của mẫu "liệt kê tất cả các giải pháp cho vấn đề này." Theo nghĩa nào đó, lớp NP bao gồm các vấn đề hỏi liệu có ít nhất một giải pháp tồn tại hay không, lớp FNP yêu cầu tạo ra một giải pháp duy nhất và lớp #P yêu cầu đếm xem có bao nhiêu giải pháp, nhưng không có giải pháp nào trong số này giải quyết sự phức tạp liệt kê triệt để tất cả các giải pháp có thể.

Có một lớp phức tạp để mô tả các vấn đề có dạng "được đưa ra một biến vị ngữ tính toán thời gian đa thức và một chuỗi , liệt kê tất cả mà là chủ đề thực sự của [chèn một số hạn chế phức tạp thích hợp]? " Tôi hiểu rằng có thể rất khó để xác định các hạn chế do số lượng giải pháp có thể lớn hơn theo cấp số nhân so với kích thước của đầu vào , mặc dù điều đó dường như không thể vượt qua.x y P ( x , y ) xP(x,y)xyP(x,y)x


Hấp dẫn. Có thể trong thực tế quá nhiều trường hợp của các vấn đề có liên quan thường có số lượng giải pháp theo cấp số nhân, nếu có. Các trường hợp cho SAT và CLIITE, nói chung, có một không gian giải pháp lớn.
chi

3
Đây là một ansatz khác để chính thức hóa điều này. Một vấn đề là trong X E (đối với X-đếm được) nếu có một X-thuật toán A với để Một ( x , i ) trả về i thứ dung dịch (tức là tôi thứ y với P ( x , y ) ) wrt một số thứ tự. Lưu ý cách này tương tự như cách người ta đôi khi định nghĩa RE. Điều này cắt ngang kích thước của không gian giải pháp và tập trung vào việc tìm kiếm giải pháp tiếp theo khó đến mức nào. Tổng chi phí có sẵn bằng tổng, tất nhiên. PXEMộtMột(x,Tôi)TôiTôiyP(x,y)
Raphael

3
(Tôi chưa bao giờ nhìn thấy nó được định nghĩa như một lớp , nhưng bạn có biết về các khái niệm về liệt kê với sự chậm trễ đa thức ?)

@Raphael Đây có thể không phải là những gì chúng ta đang tìm kiếm. Ví dụ, nếu các thuật toán tốt nhất cho phải lặp qua tất cả các giải pháp cho đến khi nó đã tìm thấy tôi trong số họ và chạy trong thời gian Θ ( f ( | x | ) ) , sau đó mức độ phức tạp, chúng tôi đang tìm kiếm là Θ ( f ( | x | ) ) , nhưng tổng kết sẽ đề nghị phức tạp Θ ( f ( | x | ) 2 ) . A(x,i)iΘ(f(|x|))Θ(f(|x|))Θ(f(|x|)2)
Liêuwe Vinkhuijzen

@RickyDemer Đó là những gì tôi đã rũ bỏ được từ những thứ nhếch nhác của mình, phải không? Thật tốt khi biết rằng đã có một chính thức thành lập.
Raphael

Câu trả lời:


10

Khái niệm bạn đang tìm kiếm được gọi là độ phức tạp liệt kê , đó là nghiên cứu về độ phức tạp tính toán của việc liệt kê (liệt kê) tất cả các giải pháp cho một vấn đề (hoặc các thành viên của ngôn ngữ / bộ). Các thuật toán liệt kê có thể được mô hình hóa như một quá trình gồm hai bước: bước tiền mã hóa và giai đoạn liệt kê có độ trễ . Cả hai bước này đều có sự phức tạp về thời gian và không gian riêng (có lẽ cũng là entropy). Trong tinh thần chung của sự phức tạp, thường có sự đánh đổi giữa những điều này để xem xét.

Bước tiền mã hóa thực hiện một số công việc cần thiết trước khi liệt kê giải pháp đầu tiên. Điều này có thể liên quan đến việc tự tìm giải pháp hoặc khởi tạo một số cấu trúc dữ liệu lớn sẽ làm giảm độ trễ chung giữa mỗi giải pháp.

Sự chậm trễ là chi phí tài nguyên liên quan đến tính toán cần thiết ở giữa các giải pháp liệt kê tùy ý. Nói cách khác, độ trễ là thước đo không gian và thời gian cần thiết để tạo ra giải pháp sau i t h one. Các vấn đề mà các giải pháp mất thời gian O ( 1 ) cho mỗi phép liệt kê được cho là có độ trễ liên tục. Một yêu cầu về thời gian O ( p o l y ( n ) ) được cho là có độ trễ đa thức.Tôi+1thTôithO(1)O(poly(n))

Đối với bài toán liệt kê mà bạn đã đề cập cụ thể trong câu hỏi của mình, bạn nên xem xét lớp và các anh chị em có liên quan của nó trong phần 2.1 của "Bảng liệt kê: Thuật toán và độ phức tạp" của tác giả Julian Schmidt (Được liên kết ở phía dưới).ENUMNP


Tại sao chúng ta quan tâm đến thời gian tiền mã hóa và sự chậm trễ?

Độ trễ là rất quan trọng để hiểu được sự phức tạp thực sự của các vấn đề liệt kê. Liệt kê các yếu tố của (lên đến kích thước n ) và { x : φ ( x ) } nơi φ ( x ) là một công thức Boolean (tức là SAT) đều mất thời gian mũ. Tuy nhiên, liệt kê thông qua Σ Σn{x:ϕ(x)}ϕ(x)Σchỉ yêu cầu độ trễ liên tục vì bạn chỉ có thể đi qua các yếu tố theo một số thứ tự. Đối với tất cả những gì chúng ta biết, sự chậm trễ trong việc liệt kê các giải pháp cho một thể hiện 3SAT có thể là theo cấp số nhân. Công việc của chúng tôi là các nhà lý thuyết phức tạp là nắm bắt lý do tại sao vấn đề thứ hai về cơ bản khó hơn (phức tạp hơn) so với vấn đề trước. Trì hoãn làm một công việc khá tốt trong việc thể hiện sự khác biệt này.

Tương tự như vậy, chúng ta cũng cần biết bao nhiêu tiền mã hóa được thực hiện. Chúng ta có thể giảm độ trễ cho bất kỳ vấn đề liệt kê nào về thời gian và không gian cố định bằng cách tính toán trước tất cả các giải pháp và lưu trữ chúng trong một danh sách sẽ được liệt kê sau. Thách thức là tìm ra sự cân bằng tốt nhất giữa hai nguồn lực.

Thứ tự mà bạn liệt kê các yếu tố cũng có thể ảnh hưởng đến sự phức tạp. Yêu cầu kết quả được trả về theo thứ tự được sắp xếp cụ thể có thể yêu cầu chúng tôi thực hiện tính toán bổ sung trong cả hai bước. Mặc dù các tình huống mà bất kỳ thứ tự nào cũng đủ (miễn là mỗi phần tử liệt kê là duy nhất) chắc chắn cũng được nghiên cứu.

Theo tôi biết, các lớp này thường không có nhãn ngắn gọn (gần giống với N P ). Chúng tôi không thể mong đợi một cách khả thi để có thể làm điều này vì các lớp phức tạp liệt kê đang tung hứng khoảng 3 tài nguyên trở lên (tiền mã hóa / tổng thời gian, không gian, độ trễ và entropy). Đơn giản là có quá nhiều kết hợp giới hạn tài nguyên để đưa ra các tên đặc biệt. Điều này không làm cho các lớp này trở nên ít thú vị hơn và cũng không ngăn cản các nhà nghiên cứu thử mọi cách.PNP


Tài nguyên

Khảo sát này (thực sự là một nỗ lực chính thức hóa) sẽ giúp bạn bắt đầu. Nó cũng chứng minh một số định lý phân cấp cơ bản.

Bảng liệt kê: Thuật toán và độ phức tạp (Johannes Schmidt, 2009)

https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf

Để biết bảng liệt kê các kết quả về độ phức tạp của bảng liệt kê, hãy xem phần tổng hợp này được quản lý bởi Kunihiro Wasa. Vì nó được phân loại theo loại vấn đề, bạn có thể dễ dàng tìm thấy một số bài viết dành riêng cho việc liệt kê các chu kỳ đồ thị. Sẽ rất đơn giản để sửa đổi các thuật toán liên quan để chỉ xem xét các chu kỳ với một nút nhất định.

http://www-ikn.ist.hokudai.ac.jp/~wasa/enumutions_complexity.html


Σ*nÔi(1)Ôi(1)

1
@j_random_hacker Tôi không nghĩ rằng suy nghĩ của bạn là sai, mặc dù câu trả lời thực sự cho câu hỏi của bạn là "nó phụ thuộc". Các tác giả của những bài báo này thường chỉ ra mô hình tính toán nào (băng thông thường TM so với RAM so với RAM Word) mà họ đang sử dụng. Lựa chọn này sẽ thay đổi những gì có thể được coi là hoạt động theo thời gian không đổi và những gì không thể (chẳng hạn như tăng số hoặc tạo đầu ra). Sự khác biệt này được cho là sẽ biến mất ngay khi sự chậm trễ của bạn trở thành đa thức do luận án Church Turing mở rộng.
mdxn
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.