Là không được phép như trọng lượng của một cạnh, trong một biểu đồ có trọng số?


60

Tôi đang cố gắng viết một tập lệnh tạo các biểu đồ ngẫu nhiên và tôi cần biết liệu một cạnh trong biểu đồ có trọng số có thể có giá trị 0 hay không.

thực sự có ý nghĩa rằng 0 có thể được sử dụng như trọng số của một cạnh, nhưng tôi đã làm việc với các biểu đồ trong vài ngày qua và tôi chưa bao giờ thấy một ví dụ nào về nó.

nhập mô tả hình ảnh ở đây


28
Nếu các giá trị âm được "cho phép", thì tại sao không phải là số 0? :)
Derek 朕 會

5
Cũng như một ví dụ nhanh, nếu các trọng số dương biểu thị mức tiêu thụ nhiên liệu ròng khi đi từ nút này sang nút khác, thì các trọng số âm có thể đại diện cho việc tiếp nhiên liệu ròng. Cạnh có trọng số bằng không là nơi mà nhiên liệu tiêu hao được bù chính xác bằng cách tiếp nhiên liệu.
JW

1
@DavidR Richby Tôi tin rằng câu hỏi thực sự ở đây là ví dụ: "thuật toán X có đúng với sự có trọng số không cạnh". Nếu không, bối cảnh là gì? Câu trả lời có thể là có hoặc không, tùy thuộc vào chi tiết. Một câu hỏi như "một mảng có thể chứa số không" có ý nghĩa như vậy không.
Juho

1
@Juho: Ồ, rõ rồi. Nó giống như hỏi nếu một số có thể là số âm. Đối với bạn có vẻ rõ ràng là nó phụ thuộc vào bối cảnh, nhưng nó chắc chắn không rõ ràng với mọi người cho đến khi số âm xuất hiện. Ngay cả số không là không rõ ràng.
Mehrdad

1
Tùy thuộc vào những gì bạn muốn làm, trọng lượng của bạn thậm chí có thể không phải là số thực. Ví dụ: nếu biểu đồ của bạn đại diện cho mạch điện xoay chiều, các trọng số của bạn có thể là các pha và đó là các số phức.
dùng2357112

Câu trả lời:


165

Được ai cho phép ? Không có Quản trị đồ thị trung tâm quyết định những gì bạn có thể và không thể làm. Bạn có thể định nghĩa các đối tượng theo bất kỳ cách nào thuận tiện cho bạn, miễn là bạn hiểu rõ về định nghĩa là gì. Nếu các cạnh không trọng số có ích với bạn, thì hãy sử dụng chúng; chỉ cần chắc chắn rằng độc giả của bạn biết đó là những gì bạn đang làm.

Lý do bạn thường không thấy các cạnh có trọng số bằng không là vì, trong hầu hết các bối cảnh, một cạnh có trọng số bằng 0 chính xác tương đương với việc không có cạnh. Ví dụ: nếu biểu đồ của bạn đại diện cho các quốc gia và số lượng giao dịch được thực hiện giữa chúng, thì cạnh không trọng số có nghĩa là không có giao dịch, tương tự như không có cạnh nào cả. Nếu biểu đồ của bạn biểu thị khoảng cách, cạnh có trọng số bằng 0 sẽ tương ứng với hai vị trí ở khoảng cách 0 so với nhau, điều đó có nghĩa là chúng thực sự là cùng một vị trí, do đó cả hai nên được biểu thị bằng cùng một đỉnh. Tuy nhiên, trong các bối cảnh khác, các cạnh không trọng lượng có thể có ý nghĩa. Ví dụ: nếu biểu đồ của bạn đại diện cho mạng lưới đường và trọng lượng cạnh thể hiện lượng giao thông, thì có một sự khác biệt lớn giữa đường không ai sử dụng (cạnh không trọng lượng) và không có đường nào (không có cạnh).


1
Điều đáng chú ý là nhiều thuật toán biểu đồ chỉ định rõ ràng nếu chúng hoạt động trên các biểu đồ có trọng số âm hay không. Tôi nghĩ rằng điều này làm rõ rằng thậm chí trọng lượng tiêu cực được cho phép, tùy thuộc vào bối cảnh.
Vịt mướp

6
@MooingDuck Tôi nghĩ rằng vấn đề của câu hỏi là, trong khi các thuật toán thực sự thường nói liệu chúng có hoạt động cho các trọng số âm hay không, các trọng số 0 hiếm khi được đề cập. Trọng lượng âm ít hơn nhiều so với số không, vì vậy, trong bối cảnh cụ thể này, tôi không chắc chúng cần được đề cập.
David Richerby

13

Nó phụ thuộc vào ngữ cảnh. Nói chung có, các cạnh bằng 0 và thậm chí trọng lượng âm có thể được cho phép. Trong một số trường hợp cụ thể, các trọng số cạnh có thể được yêu cầu là không âm hoặc hoàn toàn dương (ví dụ: thuật toán của Dijkstra yêu cầu các trọng số không âm).


Có một loại đồ thị cụ thể nào cấm không? và cho phép giá trị âm hay dương?
Taxellool

9
"Đồ thị có trọng số cạnh không bằng 0".
Tom van der Zanden

10
@Taxellool Các đối tượng toán học không được đặt trong đá. Không có danh sách cố định các đối tượng toán học có tên cố định là tên duy nhất bạn được phép sử dụng.
David Richerby

Phụ thuộc vào thuật toán bạn sử dụng. Bellman-Ford chấp nhận số không, trong khi ở Dijkstra, họ bị phản đối
Manuel Azar

5

Như các câu trả lời khác lưu ý, bạn hoàn toàn tự do xem xét (hoặc loại trừ khỏi việc xem xét) các biểu đồ có trọng số với các cạnh có trọng số bằng không.

Điều đó nói rằng, trong kinh nghiệm của tôi, thông thường ước trong hầu hết các ứng dụng của đồ thị có trọng là làm cho không có sự phân biệt giữa một lợi thế cạnh zero-trọng lượng và sự vắng mặt của một cạnh. Một lý do cho điều này là, thông thường, đồ thị có trọng số hiển thị như khái quát của multigraphs , mà lần lượt là khái quát của đồ thị đơn giản.

Cụ thể, đa hình là một biểu đồ (không giống như biểu đồ đơn giản ) cho phép nhiều cạnh giữa cùng một cặp nút. Trong khi đó, trong một biểu đồ đơn giản, bất kỳ cặp nút nào luôn được kết nối bằng 0 hoặc 1 cạnh, một cặp nút trong nhiều hình có thể được kết nối bằng 0, 1, 2, 3 trở lên (nhưng luôn luôn là số nguyên không âm ) các cạnh.

Tổng quát hóa một đa lớp để cho phép một số cạnh nhỏ giữa một cặp nút sau đó tự nhiên dẫn người ta xem xét các đồ thị có trọng số, và nhiều thuật toán hoạt động trên các đa đồ tùy ý cũng có thể được thực hiện để làm việc trên các đồ thị có trọng số như vậy. Nhưng đối với các thuật toán như vậy, "trọng số" của một cạnh thực sự biểu thị tính đa bội của nó . Do đó, theo cách giải thích này, không thể có sự phân biệt có ý nghĩa giữa "không có cạnh" và "0 cạnh" giữa một cặp nút: cả hai đều có nghĩa chính xác là cùng một thứ.

Tất nhiên, theo định nghĩa, "đồ thị có trọng số" thực sự chỉ là một đồ thị có số liên kết với mỗi cạnh và hoàn toàn có thể hiểu trọng số là một thứ khác với bội số, trong trường hợp đó là sự phân biệt giữa không có cạnh và không có trọng số cạnh thực sự có thể có ý nghĩa. Nhưng cố gắng áp dụng các thuật toán đa chữ tiêu chuẩn cho các "đồ thị có trọng số kỳ lạ" như vậy không có khả năng tạo ra kết quả có ý nghĩa về mặt giải thích thay thế (không đa bội) về trọng số cạnh.


6
Làm thế nào các biểu đồ có trọng số hiển thị "thông thường" rất nhiều phụ thuộc vào lĩnh vực của bạn. Khi tôi mô hình mạng lưới đường dưới dạng biểu đồ để tìm các đường đi ngắn nhất, các trọng số biểu thị khoảng cách, tôi không bắt đầu với nhiều đường giữa các giao lộ và sau đó giới thiệu các đường phân đoạn.
adrianN

3
@adrianN Mặc dù trong một biểu đồ như thế, sự vắng mặt của cạnh tương ứng với một giá trị liên quan vô hạn và không bằng không.
CodeInChaos

0

Hãy nghĩ về một biểu đồ của hệ thống đường bộ ở Cambridge UK, các ghi chú được chia sẻ giữa người đi xe đạp và người lái xe hơi, vì vậy hầu hết các cạnh. Làm như vậy sẽ giảm đáng kể chi phí duy trì dữ liệu.

Bây giờ nếu chúng ta xác định trọng lượng cạnh là thời gian di chuyển tính bằng giây, thì mỗi cạnh sẽ có hai trọng lượng, một trọng lượng cho ô tô bao phấn cho xe đạp. Một số trọng lượng sẽ là vô hạn vì xe hơi không được phép trên các chu kỳ.

Bây giờ hãy xem xét hai nút giao thông đường bộ rất gần nhau, chúng chỉ được răng cưa bởi một vài bài viết dừng xe. (Ví dụ: đường ngang, nơi lái xe ô tô chỉ có thể rẽ trái, nhưng người đi xe đạp có thể đi theo bất kỳ hướng nào.) Sau đó, chúng tôi nhận được một số cạnh với trọng lượng vô hạn từ người lái xe và 0 trọng lượng cho người đi xe đạp.

(Rõ ràng biểu đồ sau đó có thể được xử lý trước để tạo một biểu đồ đơn giản hơn cho việc định tuyến của người đi xe đạp, trước khi thực hiện các bước tốt nhất.)


Tôi không thấy làm thế nào điều này giải quyết câu hỏi. Câu hỏi hỏi về các cạnh có trọng lượng bằng không. Trong ví dụ của bạn (nhân tiện, có thể không có ý nghĩa gì đối với những người không quen thuộc với Cambridge), mỗi cạnh đã có hai trọng số. Bây giờ, trong chừng mực mà bạn có thể xác định biểu đồ có trọng số theo cách bạn muốn, điều đó tốt, nhưng dường như không giải quyết được câu hỏi được hỏi. Ngoài ra, các cạnh mà bạn mô tả tất cả dường như có trọng lượng rất nhỏ đối với người đi xe đạp: ngay cả việc di chuyển một quãng đường ngắn cũng cần một lượng thời gian khác nhau.
David Richerby

@DavidR Richby, chỉ cần giả sử rằng thời gian ít hơn 1 giây không được ghi lại.
Ian Ringrose

0

Có vẻ như bạn đang sử dụng trọng số để thử và thể hiện hai khía cạnh khác nhau rõ ràng của biểu đồ. Đầu tiên là liệu đồ thị có thực sự có cạnh (được vẽ) hay không và thứ hai là trọng lượng thực tế.

Như bạn đã nhận thấy, bạn rơi vào một tình huống khó hiểu nếu bạn đã sử dụng "khác không" như một chỉ báo cho thấy một cạnh (và sẽ cần phải được vẽ, hoặc liệt kê), trong khi đó đồng thời đã tìm thấy một tình huống trong đó trọng lượng bằng không được phân loại là hợp lệ.

Về cơ bản, bạn sẽ cần một cách khác để thể hiện sự hiện diện của cạnh (giả sử bạn thực sự cần điều đó, và không thể đơn giản tạo ra một mảng trọng lượng N ^ 2, nhưng sau đó bạn rơi vào cái bẫy cần phải quyết định làm gì về vòng lặp các cạnh sau ...)


Tôi không chắc điều này thực sự trả lời câu hỏi. Câu hỏi là về việc liệu đồ thị có thể có các cạnh có trọng số không; câu trả lời của bạn chủ yếu là về cách người ta có thể thực hiện cấu trúc dữ liệu cho các biểu đồ với các cạnh có trọng số bằng không.
David Richerby

@DavidR Richby, Đóng; Nó (câu trả lời của tôi) là về lý do tại sao và làm thế nào câu hỏi xuất hiện (hoặc có thể đã xuất hiện) - Một vấn đề XYProplem. Thường thì việc có thể hợp lý hóa lý do tại sao nó là một vấn đề ngay từ đầu có thể giúp ích rất nhiều trong việc xem giải pháp đó là câu trả lời đúng và không chỉ là một số 'sai lầm'
Philip Oakley
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.