2010-03-08 4 views
11

Tôi có một nắm bắt tốt về các vấn đề NP Complete; đó không phải là vấn đề. Những gì tôi không có là một ý thức tốt về nơi họ bật lên trong lập trình "thực sự". Một số (như knapsack và nhân viên bán hàng đi du lịch) là hiển nhiên, nhưng những người khác dường như không được kết nối rõ ràng với các vấn đề "thực".Liên quan đến các vấn đề NP-Complete đối với các vấn đề trong thế giới thực

Tôi đã có kinh nghiệm nhiều lần đấu tranh với một vấn đề khó khăn chỉ để nhận ra nó là một vấn đề NP hoàn chỉnh nổi tiếng đã được nghiên cứu rộng rãi. Nếu tôi đã nhận ra kết nối nhanh hơn, tôi có thể đã tiết kiệm được khá nhiều thời gian nghiên cứu các giải pháp hiện có cho vấn đề cụ thể của mình.

Có tài nguyên nào (trực tuyến hoặc in) kết nối riêng NP hoàn chỉnh với các phiên bản thực tế không?

Chỉnh sửa: Ví dụ, tôi đã làm việc trên một chương trình cố gắng phân chia học sinh thành các nhóm dựa trên độ tuổi, cấp lớp và trường gốc, về cơ bản là vấn đề phân vùng đồ thị. Tôi mất một lúc để nhận ra mối liên hệ.

+2

http://en.wikipedia.org/wiki/List_of_np_complete_problems – kennytm

+0

Lần cuối cùng tôi xem, wikipedia là một nguồn kém cho các ứng dụng thực tế. Nó dường như đã được cải thiện một chút. Cảm ơn đã chỉ ra điều đó. – terru

+0

Tôi đồng ý rằng thấy một số trường hợp thực tế của các vấn đề NP-complete/hard và thấy kết nối với phiên bản trừu tượng, sẽ tăng thời gian trực giác của bạn để tạo kết nối. –

Trả lời

4

Tôi đã tìm thấy rằng Computers and Intractability là tham chiếu chính xác về chủ đề này.

+0

Bất kỳ nhận xét nào về mức độ mà họ thảo luận về các kết nối với các vấn đề trong thế giới thực? Dường như tập trung rất nhiều vào lý thuyết (điều đó là tốt, nhưng không tập trung vào những gì tôi đang tìm kiếm ngay bây giờ). – terru

+1

Họ không thảo luận nhiều vấn đề trong thế giới thực, nhưng họ có một loạt các vấn đề NP-complete rất ấn tượng và một số thảo luận về cách chứng minh vấn đề NP-complete. Một khi bạn nghĩ rằng bạn có thể đối phó với một vấn đề NP-đầy đủ hoặc NP-cứng, đó là một cuốn sách tốt để xem xét và xem nếu bất cứ điều gì có vẻ quen thuộc. –

+0

Nó tập trung vào lý thuyết. Tuy nhiên, nó khá ngắn và nếu bạn đọc nó, nó sẽ giúp bạn phát triển trực giác cho những gì có lẽ NP-hoàn thành. –

1

Thông thường các kết nối bạn đang nói về phải được chiết xuất với một cái gọi là giảm, ví dụ bạn giảm 3-SAT cho vấn đề bạn đang làm việc với và sau đó bạn có thể kết luận rằng vấn đề của bạn có cùng sự phức tạp của nó.

Đoạn này là không nhỏ, vì bạn phải chứng minh rằng bạn có thể biến mọi trường hợp vấn đề l của một tiếng NP-Hard vấn đề L vào một thể hiện c của vấn đề của bạn C sử dụng một thuật toán polinomyal xác định.

Vì vậy, ngoại trừ từ học tương quan basical của các vấn đề NP-Hard chung sử dụng bộ nhớ của bạn, không có cách nào để chắc chắn nếu một vấn đề tương tự như một NP-Hard mà không cố gắng đoán và sau đó chứng minh nó , bạn phải thông minh.

+0

Mọi thứ bạn nói đều đúng, nhưng đó không thực sự là những gì tôi đang nói đến. Ví dụ, tôi đã làm việc trên một chương trình đã cố gắng chia học sinh thành các nhóm dựa trên tuổi tác, cấp lớp và trường gốc, mà về cơ bản là một vấn đề phân vùng đồ thị. Phải mất một thời gian tôi mới nhận ra điều đó. – terru

1

đây là một liên kết wiki: http://wapedia.mobi/en/List_of_NP-complete_problems Thông báo nó nói

Danh sách này là không có cách nào toàn diện (có hơn 3000 các vấn đề được biết đến NP-đầy đủ)

lẽ nó sẽ là một nhiệm vụ tuyệt vời nếu bất cứ ai có thể biên dịch danh sách đó.

Một nhà lý thuyết nên cố gắng hiểu/chứng minh vấn đề NP-Complete/Hard. Nhưng, một lập trình viên không có thời gian đó. Anh ta cần một danh sách.

Tôi có đúng không?

Tôi nghĩ bạn nên google nó. Và, đọc qua tất cả các liên kết. Thêm mọi sự cố mới được tìm thấy trong liên kết vào danh sách của bạn.

Hy vọng nó giúp

PS: Đừng quên gửi danh sách khi bạn đã hoàn tất: P

0

Đối với phát triển trực giác tốt hơn cuốn sách "Các Thuật toán thiết kế bằng tay, Second Edition" bởi Skiena (trích đoạn trên các cuốn sách của Google) đơn giản là tuyệt vời.

  1. Danh sách ở phía sau với những vấn đề (bao gồm cả các vấn đề khó khăn), mà bao gồm một minh hoạ và một thảo luận (thường) với một thế giới thực dụ.
  2. Bao gồm cả lý thuyết và mặt thực tế của sự vật, thường là nói về mã thực tế.

đọc excepts trực tuyến tại đây (xem một số ví dụ trong các chương 14): http://books.google.dk/books?id=7XUSn0IKQEgC&printsec=frontcover#v=onepage&q&f=false

Chương 16 (không trực tuyến) thảo luận về một số vấn đề khó khăn, trong đó có phân vùng đồ thị.

+0

Ngoài ra, đối với các vấn đề khó, nó đưa ra các đề xuất về cách bạn thực sự giải quyết chúng bằng cách sử dụng ví dụ: một thuật toán xấp xỉ. –

+0

Hướng dẫn thiết kế thuật toán cũng đề cập đến một cuốn sách của Garey và Johnson, trong đó có một danh sách 400 vấn đề NP-hoàn chỉnh với ý kiến. Các ý kiến ​​là phần tốt tôi nghĩ. Tôi không có cuốn sách này, nhưng tôi đang nghĩ về việc mua nó. Giống như bạn, tôi muốn có được trực giác tốt hơn để nhận ra các vấn đề khó khăn trong thế giới thực :) Ông ấy nói: Duyệt qua danh mục ngay sau khi bạn đặt câu hỏi về sự tồn tại của thuật toán hiệu quả cho vấn đề của bạn. Thật vậy, đây là cuốn sách duy nhất trong thư viện của tôi mà tôi thường gặp nhất. –