Gần đây, khi nói chuyện với một nhà vật lý, tôi đã tuyên bố rằng theo kinh nghiệm của tôi, khi một vấn đề có vẻ ngây thơ cần phải có thời gian theo cấp số nhân hóa ra là không cần thiết trong P hoặc BPP, một "lý do bao trùm" tại sao việc giảm xảy ra thường có thể được xác định --- và hầu như luôn luôn, lý do đó thuộc về một danh sách hàng tá "nghi phạm thông thường" hoặc ít hơn (ví dụ: lập trình động, đại số tuyến tính ...). Tuy nhiên, điều đó sau đó khiến tôi suy nghĩ: chúng ta thực sự có thể viết ra một danh sách hợp lý những lý do như vậy không? Đây là một nỗ lực đầu tiên, không đầy đủ tại một:
(0) Đặc tính toán học. Vấn đề có một đặc tính "toán học thuần túy" không rõ ràng, mà một khi đã biết, làm cho ngay lập tức rằng bạn có thể thực hiện tìm kiếm toàn diện trên một danh sách các khả năng poly (n). Ví dụ: độ phẳng đồ thị, theo đó thuật toán O (n 6 ) tuân theo định lý của Kuratowski.
(Như "mặt phẳng" chỉ ra bên dưới, đây là một ví dụ tồi: ngay cả khi bạn biết một đặc tính tổ hợp của mặt phẳng, đưa ra thuật toán đa thức thời gian cho nó vẫn còn khá không cần thiết. Vì vậy, hãy để tôi thay thế một ví dụ tốt hơn ở đây: làm thế nào về , giả sử, "đưa ra một đầu vào n được viết bằng nhị phân, tính toán có bao nhiêu màu cần thiết để tô màu một bản đồ tùy ý được nhúng trên một bề mặt có n lỗ." Không rõ ràng là có thể tính toán được điều này (hoặc thậm chí là hữu hạn!). Nhưng có một công thức đã biết đưa ra câu trả lời, và một khi bạn biết công thức đó, thì việc tính toán trong thời gian đa thức là không quan trọng. Trong khi đó, "giảm bớt cho trẻ vị thành niên / lý thuyết Robertson-Seymour" có lẽ nên được thêm vào như một lý do bao quát riêng biệt ở P.)
Dù sao, đây đặc biệt không phải là loại tình huống khiến tôi quan tâm nhất.
(1) Lập trình động. Vấn đề có thể được chia nhỏ theo cách cho phép giải pháp đệ quy mà không bị thổi theo cấp số nhân - thường là do các ràng buộc phải thỏa mãn được sắp xếp theo thứ tự tuyến tính hoặc đơn giản khác. "Hoàn toàn kết hợp"; không cần cấu trúc đại số. Có thể cho rằng, khả năng tiếp cận đồ thị (và do đó 2SAT) là những trường hợp đặc biệt.
(2) Matroids. Vấn đề có cấu trúc matroid, cho phép một thuật toán tham lam hoạt động. Ví dụ: khớp, cây bao trùm tối thiểu.
(3) Đại số tuyến tính. Vấn đề có thể được giảm xuống để giải quyết một hệ thống tuyến tính, tính toán một giá trị xác định, tính toán giá trị bản địa, v.v.
(4) Lồi lõm. Vấn đề có thể được thể hiện như một số loại tối ưu hóa lồi. Lập trình semidefinite, lập trình tuyến tính và các trò chơi tổng bằng không là những trường hợp đặc biệt (ngày càng).
(5) Kiểm tra nhận dạng đa thức. Vấn đề có thể được giảm xuống để kiểm tra một danh tính đa thức, do đó Định lý cơ bản của Đại số dẫn đến một thuật toán ngẫu nhiên hiệu quả - và trong một số trường hợp, như nguyên thủy, thậm chí là một thuật toán có thể xác định rõ ràng.
(6) Chuỗi Markov Monte Carlo. Vấn đề có thể được giảm xuống để lấy mẫu từ kết quả của một bước đi trộn nhanh. (Ví dụ: tính xấp xỉ các kết hợp hoàn hảo.)
(7) Thuật toán Euclide. GCD, phân số tiếp tục ...
Khác biệt / Không rõ ràng chính xác cách phân loại: Hôn nhân ổn định, bao thanh toán đa thức, vấn đề thành viên cho các nhóm hoán vị, các vấn đề khác trong lý thuyết số và lý thuyết nhóm, vấn đề mạng chiều thấp ...
Câu hỏi của tôi là: những điều quan trọng nhất tôi đã bỏ qua là gì?
Làm rõ:
Tôi nhận ra rằng không có danh sách nào có thể hoàn thành: bất kỳ lý do hữu hạn nào bạn đưa ra, ai đó sẽ có thể tìm thấy một vấn đề kỳ lạ xảy ra ở P nhưng không phải vì bất kỳ lý do nào. Một phần vì lý do đó, tôi quan tâm nhiều hơn đến các ý tưởng đặt ra nhiều vấn đề khác nhau, dường như không liên quan đến P hoặc BPP, hơn là các ý tưởng chỉ hoạt động cho một vấn đề.
Tôi cũng nhận ra rằng chủ quan làm thế nào để phân chia mọi thứ. Ví dụ, matroids chỉ nên là một trường hợp đặc biệt của lập trình động? Khả năng giải quyết bằng cách tìm kiếm theo chiều sâu đủ quan trọng để trở thành lý do riêng của nó, tách biệt với lập trình động? Ngoài ra, thường thì cùng một vấn đề có thể xảy ra ở P vì nhiều lý do, tùy thuộc vào cách bạn nhìn vào nó: ví dụ: việc tìm một giá trị riêng chính nằm trong P vì đại số tuyến tính, nhưng cũng vì đó là vấn đề tối ưu hóa lồi.
Nói tóm lại, tôi không hy vọng vào một "định lý phân loại" - chỉ cho một danh sách phản ánh hữu ích những gì chúng ta hiện biết về các thuật toán hiệu quả. Và đó là lý do tại sao điều tôi quan tâm nhất là các kỹ thuật để đưa mọi thứ vào P hoặc BPP có khả năng áp dụng rộng rãi nhưng không phù hợp với danh sách trên - hoặc các ý tưởng khác để cải thiện nỗ lực đầu tiên của tôi để làm tốt việc khoe khoang của tôi nhà vật lý.