Cập nhật MST khi trọng lượng của cạnh không trong giảm


8

Với một vô hướng, kết nối, đồ thị có trọng số nơi là hàm trọng lượng và kéo dài tối thiểu cây (MST) của . Bây giờ chúng ta giảm trọng lượng bằng của một cạnh mà không thuộc về . G=(V,E,w)ww:ERTG
keT

Cách cập nhật hiệu quả để biến nó thành MST (ký hiệu là ) của , trong đó giống với ngoại trừ ?TTG=(V,E,w)www(e)=w(e)k

Các thuật toán để cập nhật để là dễ dàng: Thêm để tạo ra một chu trình trong . Hãy để được một lợi thế cạnh tối đa-trọng trong chu trình . Nếu , thì là MST như mong muốn. Nếu không, .TTeTCTeCw(e)>w(e)T=T{e}{e}T=T

Tôi gặp khó khăn trong việc chứng minh tính đúng đắn của nó bằng mâu thuẫn. Giả sử là một cây bao trùm của G 'w' (T '') <w '(T') .TGw(T)<w(T)

  • eT : chúng ta có w(T)=w(T)<w(T)w(T) . Mâu thuẫn với thực tế là T là một MST của G .
  • eT : Tôi bị kẹt ở đây.

Hai lưu ý:

  • Các câu trả lời được chấp nhận ở đây để cùng một câu hỏi quá chung chung cho tôi để làm theo.

  • Tôi thích các bằng chứng không dựa trên bất kỳ thuật toán MST cụ thể nào, chẳng hạn như thuật toán của Kruskal và Prim. Tuy nhiên, bạn không cần phải chứng minh điều đó bằng mâu thuẫn hoặc tách riêng hai trường hợp và như tôi đã làm.eTeT


Nếu các trọng số là không thể thiếu, bạn cũng có thể tính toán lại MST. Bạn đang tìm kiếm một thuật toán hoặc một kết quả cấu trúc?
Pål GD

@ PålGD Tính toán lại MST chi phí "quá nhiều" cho vấn đề này. Các thuật toán được mô tả trong bài là tuyến tính. Trên thực tế tôi đang tìm kiếm một bằng chứng chính xác , nghiêm ngặt cho nó.
hengxin

Gợi ý: Làm thế nào để tìm cây bao trùm tối thiểu không / không chứa cạnh cụ thể?
ablmf

@ablmf Cảm ơn. Bạn có nghĩa là một thuật toán? Tuy nhiên, tôi đang tìm kiếm một bằng chứng. Bạn có phiền đăng một câu trả lời nếu bạn có?
hengxin

@hengxin Thuật toán tìm cây tối thiểu chứa cạnh rất đơn giản. Tìm một MST . Thêm vào nó tạo ra một chu kỳ. Sau đó loại bỏ các cạnh nặng nhất khác với trong chu kỳ này. Nếu bạn có thể chứng minh đây là thuật toán đúng thì bạn đã hoàn thành. eTee
ablmf

Câu trả lời:


2

Hãy để là một cây bao trùm nhỏ nhất của . Đặt là cạnh mà chúng ta sửa đổi để lấy và để là cây được tính theo thuật toán. Chúng ta biết rằng trọng lượng của là nhỏ hơn hoặc bằng với trọng lượng của .TGeGTTT

Thứ nhất, là một cái cây - chúng ta tạo chính xác một chu kỳ trong thuật toán và phá vỡ nó, vì vậy chúng ta không có chu kỳ nào trong .TT

Thứ hai là một cây bao trùm của . Đặt là cạnh bị loại bỏ và là cạnh được thêm vào trong thuật toán (chúng ta có hoặc ). Để trở thành một cây bao trùm, chúng ta phải có một đường dẫn giữa mỗi cặp đỉnh , chỉ sử dụng các cạnh của . Giả sử trong (chắc chắn là một cây bao trùm), đường dẫn từ đến không liên quan đến , thì cùng một đường dẫn tồn tại trong . Ngoài ra, giả sử rằng nó đã sử dụngTGeee=ee=euvTTuveTe, sau đó có một đường dẫn (không mất tính tổng quát) từ đến một điểm cuối của và từ điểm cuối khác của đến . Ngoài ra còn có một đường dẫn từ một điểm cuối của đến điểm cuối khác thông qua (xung quanh chu kỳ), tất cả nằm trong . Sau đó, chúng ta có thể xây dựng một đường dẫn từ đến thông qua trong bằng cách hợp nhất ba đường dẫn này và loại bỏ sự chồng chéo (mặc dù một bước đi là đủ để kết nối).ueeveeTuveT

Bây giờ, phần quan trọng, chúng tôi muốn chứng minh rằng là cây bao trùm tối thiểu cho .TG

Trường hợp 1 : Thuật toán không thêm vào cây. Trong trường hợp này . Giả sử rằng có một cây bao trùm tối thiểu cho khác với . Nếu có cùng trọng lượng với , chúng ta đã hoàn thành. Bây giờ giả sử mâu thuẫn rằng trọng lượng của nhỏ hơn trọng lượng của . Phải có một số cạnh có trọng lượng thấp nhất ở nhưng không phải ở (phải có một số cạnh tốt hơn, nếu không sẽ không có trọng lượng thấp hơneT=THGTHTHTeHTGT, hơn nữa, chúng ta có thể giả sử rằng cạnh tốt hơn là cạnh có trọng số thấp nhất không nằm trong - chúng ta có thể lấy bất kỳ nào là cây có trọng lượng thấp hơn và nhìn vào ứng cử viên cho , nếu không nhỏ hơn bất kỳ cạnh nào trong chu kỳ của nó, sau đó không phải là MST hoặc chúng ta có thể tạo trong đó chúng ta trao đổi cho một số cạnh của , quá trình này phải chấm dứt với cạnh có cạnh tài sản mà nó là cạnh làm tốt hơn).THTeHHeTe

  1. Nếu , thì hãy xem xét cây thu được bằng cách thêm vào (lưu ý, không phải ) và loại bỏ cạnh trọng lượng cao nhất trên chu kỳ được hình thành. Cây mới này có trọng lượng nhỏ hơn và là cây bao trùm cho , mâu thuẫn với thực tế rằng là MST cho - vì vậy chúng tôi biết điều này không thể xảy ra.eeeTTTGTG
  2. Nếu , hãy xem xét chu kỳ được hình thành bằng cách thêm vào (tức là thuật toán được xem xét). Tất cả các cạnh khác trong chu trình có trọng số thấp hơn (nếu không, thuật toán sẽ bao gồm là một cạnh) và do đó phải nằm trong (vì là cạnh trọng lượng thấp nhất chưa có trong ), nhưng sau đó phải chứa một chu kỳ, vì vậy không phải là một cái cây và chúng ta có một mâu thuẫn.e=ee=eTeeHeTH

Trường hợp 2 : Thuật toán thêm vào . Đặt là cạnh trong được thuật toán loại bỏ (và do đó không nằm trong ) Một lần nữa giả sử chúng ta có MST như trước. Nếu trọng lượng là như nhau, chúng tôi hạnh phúc. Vì vậy, giả sử mâu thuẫn rằng có trọng lượng thấp hơn và như trước là cạnh trọng lượng thấp nhất trong không thuộc . Chúng ta có thể đưa ra các đối số tương tự như trước đây với .eTxTTHHeHTx

  1. Nếu , (cũng lưu ý rằng ), thì chúng ta có thể cải thiện như trước đây, nhưng chúng ta biết rằng là MST và nhớ lại tài sản mà chúng ta có thể giả sử là có trọng số thấp hơn tại ít nhất một cạnh trong chu kỳ mà phép cộng của nó tạo ra, điều này tạo ra mâu thuẫn và không thể tồn tại.exeeTTeH
  2. Nếu , thì một lần nữa phải có trọng số cao hơn tất cả các cạnh khác trong chu trình, do đó phải chứa tất cả các cạnh này và không phải là cây và chúng ta rút ra được mâu thuẫn.e=xeHH

Vì vậy, trong mọi trường hợp, chúng tôi rút ra một mâu thuẫn, do đó không thể có cây bao trùm có trọng lượng thấp hơn , do đó là cây bao trùm tối thiểu cho .TTG


Cảm ơn những nỗ lực của bạn. Một số nhầm lẫn về tuyên bố "Nếu (cũng lưu ý rằng ), thì chúng ta có thể ..." trong trường hợp 2.1: (1) tại sao ? Bạn có cho rằng không? (2) Để cải thiện bằng cách thêm vào nó và xóa cạnh khác, giả sử , chúng ta phải chỉ ra rằng và . Làm thế nào để bạn đảm bảo những điều này? exeeeeeHTeeeTw(e)>w(e)
hengxin

@hengxin bởi vì trong 2.1 là không trong , nhưng là, vì vậy họ không thể giống nhau. eTe
Luke Mathieson

OK, tôi hiểu rồi. Vậy còn câu hỏi thứ hai của tôi thì sao? Tôi nghĩ rằng tôi đã chứng minh rằng , vì vậy chúng tôi có thể thêm vào để tạo chu kỳ. Tuy nhiên, làm thế nào để bạn đảm bảo rằng có một cạnh, giả sử , trong chu kỳ có trọng lượng lớn hơn để chúng ta có thể cải thiện bằng cách loại bỏ ? eTeTew(e)Te
hengxin

@hengxin, xin lỗi đã bỏ lỡ (2) trong đó và và là hoán đổi duy nhất từ sang , vì vậy phải là một cạnh thứ ba khác nhau trong nether và và các thuộc tính chúng ta có trước đây là đúng một lần nữa, nếu là MST tốt hơn, thì phải có trọng lượng nhỏ hơn một số cạnh trong , đặc biệt, nó phải nặng hơn một số cạnh trong chu kỳ mà nó tạo ra (nếu không thì tất cả đều là các cạnh cũng phải nằm trong và không phải là một cái cây). exexeTTeTTHeTHH
Luke Mathieson

1
Vẫn bối rối. Tôi gần như lạc vào "rừng" cây. Tôi biết nặng ít hơn một số cạnh trong : tại sao nó cũng nặng hơn một số cạnh trong ? Giả sử nó như vậy, tại sao nó lại nặng hơn một số cạnh trong chu kỳ (tôi không hiểu "mặt khác")? Các cạnh khác có thể có trọng số bằng nhau với không? Bạn có thời gian để trò chuyện không? eTTw(e)
hengxin

2

Hãy là một cây bao trùm của một đồ thị edge-weighted . Chúng tôi gọi một địa phương tối thiểu spanning tree của nếu vì bất kỳ cạnh không , là một lợi thế cạnh nặng nhất trong chu trình tạo ra khi chúng ta thêm để .SGSGeSeeS

Hãy để tôi giới thiệu một định lý về cây bao trùm tối thiểu (MST).

Cây bao trùm là MST khi và chỉ khi nó là cây bao trùm tối thiểu cục bộ.

Một bằng chứng về định lý trên của chính OP / anh ta không dựa vào bất kỳ thuật toán MST cụ thể nào.

Trong một bằng chứng khác về định lý trên nhưng được nêu khác nhau , bạn cũng có thể đọc lý do tại sao một cây bao trùm như vậy được gọi là "tối thiểu cục bộ".

Định lý trên cho phép chúng ta xác minh cạnh MST theo cạnh mặc dù MST được xác định đối với tất cả các cạnh với nhau.


Một khi chúng ta được trang bị định lý trên, việc chứng minh tính đúng đắn của thuật toán trong câu hỏi trở nên dễ dàng. Trên thực tế, việc tự mình xây dựng một bằng chứng dễ dàng hơn là đọc các bằng chứng nghiêm ngặt dưới đây.

Một bằng chứng đơn giản về thuật toán trong câu hỏi

Chúng ta hãy sử dụng lại tất cả các ký hiệu trong định nghĩa thuật toán của OP.

Lưu ý rằng là một cây spanning địa phương tối thiểu là . Để chứng minh là MST của , chúng tôi sẽ chỉ ra là cây bao trùm tối thiểu cục bộ của . Có hai trường hợp.TGTGTG

  • khi và . w(e)w(e)T=T

    Vì sự khác biệt duy nhất giữa trong và trong là trọng số của cạnh , nên chúng tôi chỉ cần kiểm tra . Vì là cạnh nặng nhất trong với , nên điều kiện có nghĩa là là cạnh nặng nhất trong với . Chúng tôi được thực hiện trong trường hợp này.TGTGeeeCww(e)w(e)eCw

  • khi và .w(e)>w(e)T=T{e}{e}

    1. Hãy để chúng tôi xem xét . Chu kỳ tạo ra khi chúng ta thêm để cũng là . Vì là cạnh nặng nhất trong với , trọng số mới của , có nghĩa là vẫn là cạnh nặng nhất trong với .eeTCeCwew(e)<w(e)eCw
    2. Bây giờ hãy để là một cạnh không trong . Hãy là chu kỳ tạo ra khi chúng ta thêm để . Vì là MST của , là cạnh nặng nhất trong với . feTDfTTGfDw
      • Nếu , cũng là chu trình được tạo khi chúng ta thêm vào . Vì và giống nhau trên , vẫn là cạnh nặng nhất trong với .eDDfTwwDfDw
      • Bây giờ giả sử . Nếu chúng ta thay thế bằng tất cả các cạnh trong khác với , chúng ta sẽ nhận được từ một chu kỳ mới , đó là chu trình được tạo khi chúng ta thêm vào . Vì là cạnh nặng nhất trong với , vẫn là cạnh nặng nhất trong với . Vì sự khác biệt duy nhất giữa và là giá trị của chúng trên , mà chúng ta có , chúng ta thấy rằngeDeCeDDfTeCwfDwwwew(e)<w(e)w(f)=w(f)fvẫn là một cạnh nặng nhất trong với .Dw
    3. Kết hợp bước 1 và 2, chúng ta đã hoàn thành trong trường hợp này.

Lưu ý rằng cả thuật toán và bằng chứng ở trên đều hoạt động tốt cho dù trọng lượng của giảm, nguyên vẹn hay tăng.e

Trên các trọng số bằng nhau của các cạnh

Đó là một thực tế phổ biến để giả định trọng lượng riêng biệt của tất cả các cạnh vì mục đích giải thích rõ ràng hơn. Tuy nhiên, bài này hoạt động tốt với trọng lượng cạnh có thể bằng nhau. Cụ thể, chúng tôi đã đề cập đến "một cạnh nặng nhất" nhưng không bao giờ là "cạnh nặng nhất".


Một bằng chứng đơn giản hơn là áp dụng thuật toán xóa cạnh nặng
John L.
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.