Pi có nghĩa gì trong mã giả thuật toán BFS này?


9

Tôi có mã giả sau đây cho thuật toán tìm kiếm đầu tiên

BFS(G,s)
 1 for each vertex uV(G) \ {s}
 2     color[u] = white
 3     d[u] = ∞
 4     π[u] = nil
 5 color[s] = gray
 6 d[s] = 0
 7 π[s] = nil
 8 Q = ∅
 9 Enqueue(Q,s)
10 while q ≠ ∅
11     u = Dequeue(Q)
12     for each vAdj[u]
13         if color[v] == white
14             color[v] = gray
15             d[v] = d[u] + 1
16             π[v] = u
17             Enqueue(Q,v)
18     color[u] = black

Ảnh gốc

Tôi không hiểu chữ cái nào biểu thị trong ngữ cảnh này. Tôi không quen thuộc với thuật toán này và nó rất khó đoán.

Tôi nghĩ dchỉ ra khoảng cách, colortất nhiên là màu sắc, nhưng π... nó dường như là một biến số nào đó nhưng tôi không hiểu chức năng của nó trong mã giả này.


2
@Snowman Tôi sẽ đi theo phong cách được sử dụng trong khoa học máy tính và các ấn phẩm học thuật hơn là toán học cụ thể, nhưng tôi đồng ý với ý tưởng chung. Câu hỏi này đang hỏi về cách sử dụng này có thể đã được trả lời bằng cách đọc trang wikipedia và π không phải là thứ được sử dụng phổ biến mà là cụ thể về cách tác giả viết thuật toán. Tôi lo lắng rằng có quá nhiều biến thể trên mã giả và hỏi về việc mỗi nhân vật trong mỗi phong cách có thể thoát khỏi tầm tay.

1
Có phải chữ thường được sử dụng trong mã giả? Đôi khi, nhưng ý nghĩa sẽ thay đổi tùy thuộc vào bối cảnh.
Rufflewind

1
@Snowman: π ở đây không phải là một chức năng. Nó là một mảng có thể thay đổi của các đỉnh được lập chỉ mục bởi các đỉnh.
Rufflewind

1
Trong bối cảnh này, π chỉ là một biểu tượng được sử dụng trong thuật toán, tương tự như d và màu sắc. Đôi khi các nhà văn thuật toán thích sử dụng các ký hiệu chữ cái đơn hơn là các tên dễ thương như "ParentVertices" hoặc một cái gì đó có thể có xu hướng được sử dụng trong ngôn ngữ lập trình.
Brandin

@Snowman Bạn đang đùa à? Nó không phải là một câu hỏi toán học. Đó là về việc diễn giải mã giả để viết chương trình, tại sao điều này không phải là về phát triển phần mềm, tôi thực sự không thể hiểu được.
nbro

Câu trả lời:


17

Tôi tin rằng việc sử dụng π ở đây là cha mẹ thực tế của người Viking. Vì vậy, trong trường hợp này, mẹ cha mẹ của v   là u vì chúng tôi đang xem xét tất cả các nút liền kề với u .


0

Vectơ π chắc chắn giữ nút u mà bạn đã đến trong nút v. Điều này giúp ích khi bạn phải xây dựng cây BFS của biểu đồ. Mặc dù không cần thiết, nhưng kỹ thuật này làm giảm rất nhiều sự phức tạp khi bạn phải thực hiện nhiều thời gian hơn BFS (ví dụ thuật toán Edmonds tựa Karp để tính toán lưu lượng tối đa giữa hai nút trong biểu đồ). Trong trường hợp này, bạn không phải chạy BFS nhiều lần nữa vì bạn đã xây dựng cây BFS và di chuyển nó từ lá đến gốc.

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.