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 + 1t hTôit hO(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 và 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