Chu kỳ trọng lượng âm so với chu kỳ trọng lượng tối đa


8

Tôi gặp khó khăn trong việc hiểu tại sao dễ dàng phát hiện chu kỳ trọng lượng âm (Bellman Ford) nhưng khó tìm thấy chu kỳ trọng lượng tối đa trong một biểu đồ không xác định.

Nếu chúng ta phủ định trọng lượng của mỗi cạnh, chúng ta có thể dễ dàng tìm thấy nếu có bất kỳ chu kỳ nào có tổng trọng lượng> 0. Tuy nhiên, không dễ tìm nếu có bất kỳ chu kỳ nào có trọng lượng> 1 hoặc nếu không chúng ta có thể lặp lại với 2, 3 , 4 vv cho đến khi câu trả lời là không.

Điều này có đúng không? Tại sao khó phát hiện hơn nếu tồn tại một chu kỳ có trọng lượng> 1 sau đó để tìm xem có chu kỳ nào có trọng lượng> 0 không?

Câu trả lời:


2

Tôi không nghĩ rằng thật đáng ngạc nhiên khi tìm thấy một chu kỳ trọng lượng âm duy nhất dễ hơn tìm chu kỳ trọng lượng cao nhất. Nếu bạn yêu cầu tôi tìm chu kỳ trọng lượng âm, tôi có thể tìm thấy bất kỳ chu kỳ nào và, nếu tôi đưa cho bạn câu mà tôi cho là câu trả lời, bạn sẽ rất dễ dàng kiểm tra chuỗi các đỉnh và thấy rằng trọng lượng thực sự là âm. Nhưng chu kỳ trọng lượng tối đa cảm thấy như một đối tượng rất đặc biệt. Ngay cả khi tôi tuyên bố đã tìm thấy nó, làm thế nào tôi có thể thuyết phục bạn rằng không có chu kỳ nào khác với trọng lượng thậm chí cao hơn?

Mặt khác, có lẽ trực giác này không hữu ích, vì nó cũng tầm thường để kiểm tra xem một chu kỳ nhất định có trọng lượng ít nhất 1 hoặc 2 hoặc 17 ...


1

Đây là một câu hỏi tuyệt vời. Tôi không có một lời giải thích hoàn toàn thỏa đáng, nhưng hãy để tôi cho bạn một khởi đầu về nó.

Trước hết, điều quan trọng là phải hiểu rằng chúng ta không thể giải quyết vấn đề này bằng cách liệt kê tất cả các chu kỳ và kiểm tra trọng lượng của từng chu kỳ. Tại sao không? Bởi vì có thể có (và thường là) theo nhiều cấp số nhân. Do đó, chỉ đơn thuần là liệt kê chúng sẽ nhất thiết phải mất thời gian theo cấp số nhân - quá lâu để có thể khả thi.

Vậy Bellman-Ford hoạt động như thế nào? Nó hoạt động bằng một số mẹo thông minh để tránh sự cần thiết phải kiểm tra từng chu kỳ một. Thay vào đó, nó xây dựng một bản tóm tắt tóm tắt một cái gì đó về ảnh hưởng của tất cả các đường dẫn và chu kỳ có độ dài lên đến . Thực tế, với mỗi đỉnh v , nó tóm tắt tất cả các đường dẫn bắt đầu tại v , kết thúc tại v và thực hiện tối đa n bước. Vì mỗi chu kỳ phải chứa một đường dẫn của mẫu này, tóm tắt bằng cách nào đó gói gọn ảnh hưởng của tất cả các chu kỳ có thể.nvvvn

Tại sao chúng ta không thể sử dụng để phát hiện (chẳng hạn) liệu có tồn tại một chu kỳ trọng lượng ? Đó là vì tóm tắt của Bellman-Ford bao gồm các con đường đi vòng quanh chu kỳ nhiều lần. Nếu chu trình có độ dài k , thì nó sẽ bao gồm các đường dẫn có độ dài n , nghĩa là các đường đi quanh chu kỳ khoảng n / k lần. Chẳng hạn, nếu bạn có chu kỳ dài n / 3 , thì tóm tắt bao gồm một đường dẫn đi vòng quanh chu kỳ ba lần.1knn/kn/3

Hiệu quả của việc đi bộ xung quanh một chu kỳ nhiều lần? Nếu bạn muốn phân biệt chu kỳ cân nặng dương với các chu kỳ có trọng lượng không dương, đi bộ quanh một chu kỳ nhiều lần không có hại. Nếu chu kỳ có trọng lượng dương, thì bạn có thể đi bộ xung quanh nó một vài lần và tổng trọng lượng vẫn sẽ dương. Nếu trọng lượng của chu kỳ không tích cực, thì bạn có thể đi bộ xung quanh nó một vài lần và tổng trọng lượng vẫn sẽ không tích cực. Vì vậy, nếu tất cả những gì chúng ta quan tâm là sự khác biệt giữa trọng lượng dương và không dương, thì việc đi bộ xung quanh chu kỳ nhiều lần không có hại.

Nhưng bây giờ hãy xem xét mọi thứ thay đổi như thế nào nếu điều chúng ta quan tâm là sự khác biệt giữa "cân nặng " so với "cân nặng < 1 ". Nếu chúng ta có một chu kỳ có trọng lượng < 1 và chúng ta đi bộ xung quanh chu kỳ đó nhiều lần, tổng trọng lượng có thể trở thành 1 . Ví dụ, nếu trọng lượng của chu kỳ là 1 / 2 và chúng tôi đi bộ xung quanh chu kỳ ba lần, sau đó tổng trọng lượng của con đường đó là 1.5 , đó là 1 : chúng ta bắt đầu với một chu kỳ trọng lượng < 1 và kết thúc với đường đi của trọng lượng 1,51<1<111/21.51<11.5. Thực tế này hoàn toàn làm hỏng Bellman-Ford và khiến nó trở nên vô dụng khi kiểm tra xem có tồn tại chu kỳ trọng lượng . (Bạn có thấy sự khác biệt?)1

Tôi nhận ra đây không phải là một câu trả lời thỏa đáng 100%. Nó cho bạn biết lý do Bellman-Ford sẽ không làm việc để giải quyết vấn đề của bạn. Tuy nhiên, nó không cung cấp cho bạn bất kỳ trực giác nào để giải thích tại sao điều này nói chung khó khăn (ví dụ, tại sao khó tìm một số thuật toán khác để giải quyết nó). Tôi không có trực giác thực sự tốt cho điều đó - có thể người khác sẽ có lời giải thích tốt hơn cho bạn. Trong khi đó, có lẽ điều này giúp bạn bắt đầu hiểu được tại sao vấn đề này khó khăn.


0

Quyết định vẫn dễ dàng cho bất kỳ trọng số cạnh c và số nguyên. Tôi có thể kiểm tra tất cả các chu kỳ có độ dài c trong O ( n c ) (giả sử trọng số đơn vị). Nhưng nếu c không phải là hằng số, ví dụ c = n / 2 thì sao? Nó sẽ không còn là đa thức nữa.weightcccO(nc)cc=n/2

Mặt khác với bài toán quyết định chung (nghĩa là khi không đổi) chúng ta có thể quyết định bài toán chu trình Hamilton là NP-Complete.c


Có, nhưng điều này không đưa ra bất kỳ trực giác nào tại sao khó quyết định vấn đề quyết định chung. Vâng, rõ ràng là có sự giảm bớt chu kỳ Hamilton, nhưng điều đó không cho bất kỳ trực giác nào tại sao. Nếu bạn đọc câu hỏi, rõ ràng tác giả đang hỏi về trực giác tại sao điều này lại khó khi tìm chu kỳ cân nặng dương không khó.
DW

Vâng tôi biết điều đó. Người hỏi dường như bối rối về sự khác biệt giữa quyết định số và quyết định bất kỳ độ dài nào. Xin hãy xem câu hỏi ở đoạn cuối. Tôi đang cố gắng sửa anh ta về phần đó. Trở nên khó hơn hoặc dễ dàng hơn về khả năng dễ điều khiển phụ thuộc vào sự khác biệt này.
Parham

Kiểm tra tất cả các chu kỳ của chiều dài cũng không hoạt động nếu các cạnh được phép có trọng số bằng không. OK, trọng số 0 thường được xác định là không có cạnh nhưng thật dễ dàng để tưởng tượng các ứng dụng trong đó cạnh có trọng số bằng 0 không giống như không có cạnh: ví dụ: các cạnh là các đoạn đường và trọng số là phí phải trả cho phân khúc đó. c
David Richerby

0

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ố.

  1. Cho đồ thị , kiểm tra xem G có chu kỳ không.GG

  2. 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:

  1. Cho một đồ thị và hai đỉnh st , kiểm tra xem có một con đường đơn giản từ s đến t trong G .GststG

  2. Cho đồ thị và hai đỉnh st 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 ) u t G .SimplePath(s,t,G)
s=tuG SimplePath(s,u,Gt)utG

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 ) u t G .PathG(s,t)
s=t
uG PathG(s,t)utG

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 s = t hay k > 0 và đối với một số u G P một t h G ( s , u , k - 1 ) u t G .PathG(s,t,k)
k=0s=t
k>0uG PathG(s,u,k1)utG

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à:

  1. 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

  2. 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

  3. 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

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.