ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมเกี่ยวกับกราฟ/เฉลยข้อ 2"
ไปยังการนำทาง
ไปยังการค้นหา
Aoy (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย '== อ.วัฒนา ==') |
Aoy (คุย | มีส่วนร่วม) |
||
| (ไม่แสดง 2 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
| แถว 1: | แถว 1: | ||
| − | == | + | แนวคิด เราจะทำการพิจารณา node ทีละ node สมมติให้กำลังพิจารณาที่ node a แล้วดูว่า node a นั้นมี node อะไรอยู่ใน list ของมันบ้าง ถ้ามี เช่นมี node b อยู่ให้ทำการ เพิ่ม node a ใน list ของ node b แทน และทำการบวกจำนวน node ใน list ของ node b ขึ้นอีกหนึ่ง เมื่อทำแบบนี้จนครบทุก node จะได้ว่าเวลาการทำงานจะเป็น <math>O(|V|)</math> และสำหรับแต่ละ node จะทำการไล่ไปตาม list ของมัน ซึ่งจำนวนของ list ทั้งหมดใน directed graph จะมีเท่ากับจำนวน edge ในกราฟพอดี ดังนั้นเวลาการทำงานทั้งหมดจึงเป็น <math>O(|V|+|E|)</math> |
| + | |||
| + | จากแนวคิดข้างต้น เขียนเป็น pseudocode ได้ดังนี้ | ||
| + | |||
| + | <geshi lang="c"> | ||
| + | DFS(u) | ||
| + | Initialize d[u] = 0 for all node u in V | ||
| + | for each node u in V | ||
| + | { | ||
| + | for i = 1 to d[u] do | ||
| + | { | ||
| + | v= a[u][i] | ||
| + | d[v] = d[v] + 1 | ||
| + | a[v][d[v]]= u // add u in list of v | ||
| + | } | ||
| + | } | ||
| + | </geshi> | ||
รุ่นแก้ไขปัจจุบันเมื่อ 03:55, 16 กันยายน 2552
แนวคิด เราจะทำการพิจารณา node ทีละ node สมมติให้กำลังพิจารณาที่ node a แล้วดูว่า node a นั้นมี node อะไรอยู่ใน list ของมันบ้าง ถ้ามี เช่นมี node b อยู่ให้ทำการ เพิ่ม node a ใน list ของ node b แทน และทำการบวกจำนวน node ใน list ของ node b ขึ้นอีกหนึ่ง เมื่อทำแบบนี้จนครบทุก node จะได้ว่าเวลาการทำงานจะเป็น และสำหรับแต่ละ node จะทำการไล่ไปตาม list ของมัน ซึ่งจำนวนของ list ทั้งหมดใน directed graph จะมีเท่ากับจำนวน edge ในกราฟพอดี ดังนั้นเวลาการทำงานทั้งหมดจึงเป็น
จากแนวคิดข้างต้น เขียนเป็น pseudocode ได้ดังนี้
<geshi lang="c"> DFS(u)
Initialize d[u] = 0 for all node u in V
for each node u in V
{
for i = 1 to d[u] do
{
v= a[u][i]
d[v] = d[v] + 1
a[v][d[v]]= u // add u in list of v
}
}
</geshi>