pi หมายความว่าอย่างไรใน pseudocode อัลกอริทึม BFS นี้


9

ฉันมีรหัสเทียมต่อไปนี้สำหรับอัลกอริทึมการค้นหาแบบกว้าง

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

ภาพต้นฉบับ

ฉันไม่เข้าใจสิ่งที่ตัวอักษรπระบุในบริบทนี้ ฉันไม่คุ้นเคยกับอัลกอริทึมนี้และเป็นการยากที่จะคาดเดา

ฉันคิดว่าdบ่งบอกระยะทางcolorเป็นสีแน่นอน แต่π... มันดูเหมือนจะเป็นตัวแปรของการเรียงลำดับบางอย่าง แต่ฉันไม่เข้าใจฟังก์ชั่นของมันในรหัสเทียมนี้


2
@Snowman ฉันจะไปกับสไตล์ที่ใช้ในวิทยาการคอมพิวเตอร์และสิ่งพิมพ์ทางวิชาการมากกว่าคณิตศาสตร์โดยเฉพาะ แต่ฉันเห็นด้วยกับความคิดทั่วไป คำถามนี้ถามเกี่ยวกับการใช้งานนี้อาจได้รับคำตอบจากการอ่านหน้าวิกิพีเดียและπไม่ใช่สิ่งที่ใช้กันทั่วไป แต่ค่อนข้างเฉพาะกับวิธีที่ผู้เขียนเขียนอัลกอริธึม ฉันกังวลว่ามีการเลียนแบบ pseudocode มากเกินไปและถามว่าอักขระแต่ละตัวในแต่ละสไตล์นั้นมีประโยชน์อย่างไร

1
มักใช้ตัวอักษร in ใน pseudocode หรือไม่ บางครั้ง แต่ความหมายจะแตกต่างกันไปขึ้นอยู่กับบริบท
Rufflewind

1
@Snowman: πนี่ไม่ใช่ฟังก์ชั่น มันเป็นอาร์เรย์ของจุดยอดที่ไม่แน่นอนที่จัดทำดัชนีโดยจุดยอด
Rufflewind

1
ในบริบทนี้πเป็นเพียงสัญลักษณ์ที่ใช้ในอัลกอริทึมคล้ายกับ d และสี บางครั้งผู้เขียนอัลกอริทึมต้องการใช้สัญลักษณ์ตัวอักษรเดียวแทนที่จะเป็นชื่อที่น่ารักเช่น "parentVertices" หรือสิ่งที่อาจมีแนวโน้มที่จะใช้ในภาษาการเขียนโปรแกรม
Brandin

@Snowman คุณพูดเล่นหรือเปล่า มันไม่ใช่คำถามทางคณิตศาสตร์ มันเกี่ยวกับการแปลรหัสเทียมเพื่อเขียนโปรแกรมทำไมสิ่งนี้ไม่ควรเกี่ยวกับการพัฒนาซอฟต์แวร์ฉันไม่เข้าใจจริงๆ
nbro

คำตอบ:


17

ฉันเชื่อว่าการใช้πนี่คือ "ผู้ปกครองของ" ที่แท้จริง ดังนั้นในกรณีนี้ว่า“ผู้ปกครอง” ของโวลต์   เป็นUเพราะเรากำลังมองหาที่โหนดทั้งหมดที่อยู่ติดกับยู


0

เวกเตอร์πจะเก็บโหนด u ที่คุณเข้ามาในโหนด v ซึ่งจะช่วยเมื่อคุณต้องสร้างแผนภูมิ BFS ของกราฟ แม้ว่าจะไม่จำเป็น แต่เทคนิคนี้จะช่วยลดความซับซ้อนได้มากเมื่อคุณต้องใช้เวลามากขึ้นในการ BFS (เช่นอัลกอริทึม Edmonds – Karpสำหรับการคำนวณการไหลสูงสุดระหว่างสองโหนดในกราฟ) ในกรณีนี้คุณไม่จำเป็นต้องเรียกใช้ BFS อีกต่อไปเนื่องจากคุณได้สร้างแผนผัง BFS ขึ้นแล้วสำรวจจากใบไม้ไปยังรูท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.