Chúng ta hãy xem xét các phiên bản đơn giản hơn của những vấn đề này trong đó các cạnh không có trọng số.
Cho đồ thị , kiểm tra xem G có chu kỳ không.GG
Cho đồ thị và số k , kiểm tra xem G có chu kỳ dài ít nhất k không .GkGk
Điều đầu tiên là dễ dàng và có thể được giải quyết bằng DFS. Cái thứ hai là NP-hard.
Hãy xem xét một vấn đề thậm chí đơn giản hơn:
Cho một đồ thị và hai đỉnh s và t , kiểm tra xem có một con đường đơn giản từ s đến t trong G .GststG
Cho đồ thị và hai đỉnh s và t và một số k , kiểm tra xem có một đường dẫn đơn giản từ s đến t trong G có độ dài ít nhất k .GstkstGk
Tất cả những vấn đề này là của cùng một hương vị. Cái trên dễ dàng trong khi cái dưới cùng là NP-hard. Tôi sẽ giải thích sự khác biệt cho cái cuối cùng vì nó đơn giản hơn nhưng cách giải thích tương tự áp dụng cho các cặp khác.
Lý do mà những cái trên cùng dễ dàng trong khi những cái dưới cùng thì không phải là kết quả của cấu trúc câu trả lời cho những vấn đề này.
Trước tiên chúng ta hãy xem xét vấn đề tìm một con đường đơn giản và cố gắng giải quyết nó một cách đệ quy. Nếu chúng ta chỉ cố gắng giải quyết vấn đề này một cách trực tiếp, chúng ta sẽ cần theo dõi các đỉnh mà chúng ta đã sử dụng cho đến nay:
có một con đường từ s đến t trong G . SimplePath(s,t,G):=stG
khi và chỉ khi s = t hoặc đối với một số u ∈ G S i m p l e P một t h ( s , u , G - t ) và u t ∈ G .SimplePath(s,t,G)
s=tu∈G SimplePath(s,u,G−t)ut∈G
Nếu chúng ta cố gắng giải quyết vấn đề với thuật toán đệ quy ngây thơ này, sẽ mất thời gian theo cấp số nhân:
có nhiều khả năng cho tập hợp các đỉnh không sử dụng!
Chúng ta phải thông minh hơn.
Tại sao chúng ta có được nhiều khả năng theo cấp số nhân? Bởi vì chúng tôi đã cố gắng tìm một con đường đơn giản và để thực thi điều kiện này, chúng tôi cần theo dõi các đỉnh không được sử dụng.
OK, vậy chúng ta hãy bỏ điều kiện đó và xem nơi chúng ta có thể nhận được:
Xem xét vấn đề tìm đường dẫn (không cần thiết đơn giản) từ đến t . Vì đường dẫn không cần đơn giản, chúng tôi không cần theo dõi các đỉnh không được sử dụng. Nói cách khác, biểu đồ không thay đổi theo thời gian.st
có một đường dẫn từ s đến t .PathG(s,t):=st
khi và chỉ khi s = t hoặc
đối với một số u ∈ G P một t h G ( s , t ) và u t ∈ G .PathG(s,t)
s=t
u∈G PathG(s,t)ut∈G
Nhưng chúng tôi chưa làm xong. Vấn đề là chúng ta không biết nếu
là một vấn đề nhỏ hơn P a t h G ( s , t ) . Vì vậy, giải pháp đệ quy này có thể kết thúc trong một vòng lặp và không bao giờ chấm dứt.PathG(s,u)PathG(s,t)
Để tránh điều này, chúng ta có thể thêm một tham số bổ sung để đảm bảo vấn đề trở nên nhỏ hơn: số cạnh trong đường dẫn.
có một đường dẫn từ s đến t với tối đa k cạnh.PathG(s,t,k):=stk
khi và chỉ khi k = 0 và s = t hay k > 0 và đối với một số u ∈ G P một t h G ( s , u , k - 1 ) và u t ∈ G .PathG(s,t,k)
k=0s=t
k>0u∈G PathG(s,u,k−1)ut∈G
Bây giờ lưu ý rằng có một đường dẫn đơn giản từ đến t iff có một đường dẫn từ s đến t với tối đa n cạnh. Nói cách khác:ststn
iff P a t h G ( s , t , n ) .SimplePath(s,t,G)PathG(s,t,n)
Những điểm cốt yếu ở đây là:
Mỗi đường dẫn đơn giản (không cần thiết) từ đến t
bao gồm một đường dẫn đơn giản từ s đến một số đỉnh u và một cạnh u t .stsuut
Chúng ta có thể giả sử rằng không xuất hiện trong đường dẫn đơn giản từ s đến u .tsu
Chúng ta không cần phải giữ rõ ràng danh sách các đỉnh không được sử dụng.
Các tính chất này cho phép chúng ta có một đệ quy thông minh
cho sự tồn tại của một vấn đề đường dẫn đơn giản.
Bây giờ những điều này không áp dụng cho vấn đề tìm đường dẫn có độ dài ít nhất là . Chúng tôi không biết làm thế nào để giảm vấn đề tìm một đường dẫn đơn giản có độ dài ít nhất là k
đến một bài toán con nhỏ hơn mà không giữ danh sách các đỉnh không sử dụng. Những tính chất đó cho phép chúng ta giải quyết sự tồn tại của vấn đề đường dẫn một cách hiệu quả.kk
Khi một đồ thị không có chu kỳ âm, chúng cho phép chúng ta giải quyết sự tồn tại của một đường dẫn có độ dài tối đa là vấn đề và các vấn đề đường dẫn đơn giản ngắn nhất một cách hiệu quả.k
Tuy nhiên, họ không giữ sự tồn tại của một con đường dài ít nhất là . Xét một đồ thị có 3 đỉnh s , u , t .
w ( s u ) = 1000 , w ( s t ) = 1000 , w ( u t ) = 10 , w ( t u ) = 10 . Đường dẫn có độ dài ít nhất 1001 từ s đến t chứa uk3s,u,tw(su)=1000,w(st)=1000,w(ut)=10,w(tu)=101001stuvà đường dẫn có độ dài ít nhất từ s đến u chứa t . Vì vậy, chúng ta không thể giảm một thể hiện của vấn đề thành một thể hiện nhỏ hơn của vấn đề mà không đưa ra danh sách các đỉnh không sử dụng.1001sut
Nói cách khác, chúng ta không biết một đệ quy thông minh cho sự tồn tại của một đường dẫn đơn giản có độ dài ít nhất là vấn đề trong khi chúng ta biết một đệ quy thông minh cho sự tồn tại của một đường dẫn đơn giản.k
Quay trở lại phần cuối của câu hỏi của bạn, có vấn đề với lập luận của bạn.
>k kkkO(nk)
kk