Cây Spanning tối thiểu với thông số trọng lượng gấp đôi


12

Xét một đồ thị G(V,E) . Mỗi cạnh e có hai trọng số AeBe . Tìm một cây bao trùm là giảm thiểu các sản phẩm (eTAe)(eTBe) . Thuật toán sẽ chạy trong thời gian đa thức đối với |V|,|E|.

Tôi thấy khó khăn để thích nghi với bất kỳ thuật toán truyền thống nào trên các cây bao trùm (Kruskal, Prim, Edge-Deletion). Làm thế nào để giải quyết nó? Có gợi ý nào không?


Có thể thử xây dựng một biểu đồ mới, trong đó trọng số của cạnh emax(Ae,Be) .
utdiscant

3
Đây có phải là một vấn đề bài tập / bài tập về nhà? Nếu vậy, nó là từ một cuốn sách giáo khoa? Lý do tôi hỏi là bối cảnh có thể giúp "kỹ sư đảo ngược" vấn đề. Không rõ ràng ngay lập tức rằng một thuật toán tham lam thích hợp ở đây, nhưng nếu nó xuất phát từ chương về các thuật toán tham lam ...
Joe

1
@utdiscant, điều đó sẽ không làm việc. Các cạnh tiêu cực có thể hữu ích.
Nicholas Mancuso

ngay cả đối với các cạnh tích cực là không hữu ích, ví dụ như cặp (10,10) không tốt hơn cặp (11,1) trong hầu hết các trường hợp.

Câu trả lời:


1

Tôi sẽ giả định rằng bạn không được cho các cạnh có trọng số âm, bởi vì điều này có thể không hoạt động nếu có trọng số âm.

Thuật toán

Đối với mỗi cạnh của bạn, hãy gắn nhãn đến n1n

Đặt trọng số A của số cạnh iaii

Đặt trọng số B của số cạnh ibii

Vẽ lên bảng này

   |a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
 . |.........................
 . |.........................
b_n|...................a_n * b_n

Với mỗi thành phần bảng là sản phẩm của hàng và cột.

Đối với mỗi cạnh, tính tổng hàng và cột của bảng có liên quan (và nhớ xóa phần tử trong giao điểm vì nó đã được tính tổng hai lần).

Tìm cạnh có tổng lớn nhất, xóa cạnh này nếu nó không ngắt kết nối đồ thị. Đánh dấu các cạnh là thiết yếu khác. Nếu một cạnh đã bị xóa, hãy điền vào các hàng và cột của nó bằng 0.

Đúng

Kết quả rõ ràng là một cái cây.

Kết quả rõ ràng là kéo dài vì không có đỉnh nào bị ngắt kết nối.

Kết quả là tối thiểu? Nếu có một cạnh khác mà việc xóa sẽ tạo ra một cây bao trùm nhỏ hơn ở cuối thuật toán, thì cạnh đó sẽ bị xóa và bị hủy trước. (nếu ai đó có thể giúp tôi thực hiện điều này một chút nghiêm ngặt hơn / và / hoặc ví dụ phản biện thì điều đó sẽ rất tuyệt)

Thời gian chạy

Rõ ràng là đa thức trong .|V|

biên tập

khôngmột ví dụ quầy.(2,11),(11,2),(4,6)

a1=2,a2=11,a3=4

b1=11,b2=2,b3=6

Sau đó

   | 2     11     4
---+--------------------
11 | 22    121    44
 2 | 4     22     8
 6 | 12    66     24

(4,6)=44+8+24+66+12=154(2,11)=22+4+12+121+44=203(11,2)=121+22+66+4+8=221

bị xóa.(11,2)

Kết thúc với (2,11),(4,6)=617=102

Cây bao trùm khác là

(11,2),(4,6)=1512=180

(2,11),(11,2)=1313=169


1
Dường như với tôi, đây là một aproach khá tham lam. Tôi không bị thuyết phục bởi "bằng chứng" của chủ nghĩa tối giản.
Nejc

1
@SaeedAmiri Đó là một ví dụ phản tác dụng như thế nào? Tôi đã đăng công việc trong phần chỉnh sửa, thuật toán cho kết quả chính xác.
Herp Derpington

1
Những gì bạn đã làm là tìm kiếm bao nhiêu mỗi góp phần trong Σ e E một i . Σ e E b i , và bạn chọn những cái đó có ảnh hưởng nhất. Điều đó là tốt, nhưng nó không phải là những gì được yêu cầu. Đó là một câu hỏi khó. Nếu bạn muốn cải thiện câu trả lời của mình, bạn cần phải đi kèm với một bằng chứng. Nếu không, không có sử dụng. (ai,bi)eEai.eEbi
AJed

Mặc dù vậy, thật không công bằng khi bỏ phiếu cho nỗ lực của bạn.
AJed

@AJed Bằng chứng giống như trong xóa / kush / đảo ngược. Tất cả chúng ta phải chứng minh bây giờ là tài sản bị cắt vẫn giữ.
Herp Derpington

1

Đây là giải pháp từ http://www.cnbloss.com/autsky-jadek/p/3959446.html .

Chúng ta có thể xem tất cả các cây bao trùm như một điểm trong máy bay, nơi x là tổng trọng lượng Σ e T Một e , y là tổng trọng lượng Σ e T B e . Mục tiêu là để giảm thiểu x y .xyxeTAeeTBexy

  1. Tìm tối thiểu spanning tree theo trọng lượng và trọng lượng B . Vì vậy, chúng ta có hai điểm trong mặt phẳng xy Một , B . Trong tất cả các điểm cây bao trùm trong mặt phẳng, Ax tối thiểu ,ABA,BAx y tối thiểu.By

  2. Bây giờ chúng tôi nhắm đến việc tìm một điểm trong tam giác O A B có khoảng cách tối đa đến đường thẳng A B , để chúng tôi có thể giảm giá trị x y cho C cho tất cả các điểm trong tam giácCOABABxyC .ABC

2SABC=|AB×AC|=(BxAx,ByAy)×(CxAx,CyAy)=(BxAx)Cy+(AyBy)CxAy(BxAx)+Ax(ByAy)

  1. Ay(BxAx)+Ax(ByAy(BxAx)Cy+(AyBy)CxG=(V,E), while the weight w(e)=Be(BxAx)+Cx(AyBy). Now we run a maximum spanning tree on G to get point C.

  2. Run the above algorithm on OBC,OAC recursively, until there is no more spanning trees between BC,AC and O.

  3. Now we get a set of possible spanning trees. Calculate xy value for each tree to get the minimum tree.

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.