สวัสดีครับๆ อันนี้ก็เป็น blog post อันแรกใน ThailandOI ของผม ถ้าอ่านแล้วมีข้อติชมตรงไหนก็โพสต์บอกใน comment ด้วยละกันนะครับ
SCC เป็นอีก algorithm นึงที่มีประโยชน์ในการจัดการกับกราฟ แม้จะพบไม่บ่อยในข้อสอบ แต่ก็ควรจะรู้จักและใช้ให้เป็น ในบทความนี้จะแนะนำ SCC และมี psuedocode ให้ พร้อมทั้งตัวอย่างการเอาไปใช้แก้ปัญหา
SCC (Strongly Connected Component) ตามนิยามก็คือกลุ่มของ node ใน directed graph โดยที่ทุก node i,j ใดๆ ในนั้น สามารถไปหากันได้
สามารถอ่านเพิ่มเติมได้จาก บทความ Strongly Connected Component ในวิกิพีเดีย
เพราะเมื่อเราทำ SCC กับ directed graph (คือการจัดกลุ่ม node เป็น กลุ่มๆ โดยที่แต่ละกลุ่มเป็น SCC ที่มีขนาดใหญ่ที่สุด) และแปลงแต่ละกลุ่มนั้นให้เป็น node เราจะได้ directed acyclic graph (DAG = กราฟมีทิศทางที่ไม่มี cycle) ซึ่งสามารถแก้ปัญหาได้ง่ายกว่า directed graph ธรรมดาที่มี cycle มาก กระบวนการแปลง directed graph ให้กลายเป็น dag เรียกว่า condensation
(ภาพจากวิกิพีเดีย)
จากภาพ มีกราฟอยู่ ในส่วนที่อยู่ในสีเทาเดียวกัน คืออยู่ใน SCC เดียวกัน ซึ่งเมื่อเรา condense กราฟนี้แล้ว จะเหลือแค่ 3 node
คือ
,
และ
และมี edge จาก
->
และ
-> 
โหลดได้ที่นี่
สำหรับโจทย์ข้อนี้ มี directed graph ที่แต่ละ node มีเงินอยู่ กำหนดจุดเริ่มต้น และ จุดจบที่เป็นไปได้ (มีหลายจุด) จะเดินอย่างไรให้เริ่มจากจุดเริ่มต้นนั้น และจบในจุดจบใดๆ ที่มีให้ แล้วเก็บเงินบน node มากที่สุด (เดิน node ซ้ำไม่ได้เงินเพิ่ม)
จากข้อนี้ หลายคนตอนเห็นโจทย์ ถ้าไม่รู้จัก SCC มาก่อนอาจจะเริ่มรู้สึกแบบ WTF? เพราะกราฟมีทั้ง cycle มีทั้งจบได้หลายที่ อ๊ากกกกกก
แต่ว่า ถ้าเกิดกราฟนี้เป็น DAG (พูดง่ายๆคือ เอา cycle ออกไป) ล่ะ? ง่ายขึ้นละเปล่า ถ้าทำได้ BFS รอบเดียวก็จบ หรือ DFS แบบ Dynamic รอบเดียวก็จบ ใครที่ไม่รู้ว่า dynamic ยังไง ลองอ่านที่ Dynamic Programming 2
ถ้าเกิดการทำให้กราฟนี้เป็น DAG แล้วแก้ง่ายขึ้น ก็ลองคิดว่า ทำ SCC ได้ละเปล่า (การรวม node จะทำให้แก้โจทย์ไม่ได้หรือไม่?)
ในข้อนี้ การรวม node ที่สามารถไปหากันได้ทุก node ในนั้น ให้กลายเป็น node เดียว (condensation) ก็ไม่ทำให้โจทย์เปลี่ยนแปลง เพราะค่าของเงินใน ATM ไม่มีติดลบ แปลว่า ถ้าต้องการเดินเก็บให้ได้มากที่สุด ก็ต้องเดินให้หมดในทุก node SCC ที่มี node ที่เราจะไปอยู่แน่นอน (เพราะอย่างไรก็ตาม ใน SCC สามารถไปหากันได้ทุก node จึงสามารถเดินเก็บเงินทั้งหมดได้)
ถึงตรงนี้ใครไม่เข้าใจ งงอะไร โพสต์ถามใน comment ได้เลยนะครับ
มีหลักๆอยู่ 3 algorithms แต่จริงๆไม่ต้องรู้หมด เอาให้เขียนได้ก็พอ algo ที่นิยมกันคือ Kosaraju’s Algorithm และ Tarjan’s SCC Algorithm ในที่นี้จะขอพูดถึง Kosaraju เพราะผมก็ยังไม่เคยใช้ Tarjan’s เลย
รัน DFS ใน graph แล้วจำ finish time ของแต่ละ node ไว้ (finish time คือเวลาที่ออกจากฟังชั่น DFS ของ node นั้นๆ เพื่อไม่ให้งง จะยกตัวอย่าง code ที่ใช้ DFS node และ หาค่า finish time ของแต่ละ node เพื่อให้เป็น idea
int time = 0, top=0; << ตัวแปร global int finishtime[n], visited[n], stack[n]; DFS(node V) { visited[V] = 1; for all node I adjacent node to V if( visited[I] != 1) DFS(I); finishtime[V] = time++; stack[top++] = V; } for all node I ( if (visited[I] != 1) DFS(I);
ทำการ transpose graph คือกลับทิศทาง edge ให้หมด ซึ่งสามารถทำได้ตั้งแต่การรับข้อมูลกราฟ โดยสร้างกราฟไว้อีกอันที่มีทิศทาง edge สลับกับกราฟจริง
ทำ DFS อีกครั้งบน transposed graph แต่ ลำดับ node ที่จะเข้าไปทำ DFS นั้น ให้เริ่มทำตาม finish time จากมากไปน้อย หรือก็คือ ค่อยๆ pop stack ออกมานั่นเอง (เพราะตัวที่เข้าไปท้ายสุดจะมี finish time มากสุด) สมมติให้การ DFS บน transposed graph ใช้ฟังชั่น DFSt
สมมติให้ node ที่ pop ออกมาคือ I, ถ้าเกิด I ยังไม่เคยถูกไปมาก่อน ก็ให้ DFSt I ซะ ทุก node ที่สามารถ DFSt ไปถึงได้จาก I จะอยู่ใน SCC เดียวกับ I
int visited2[n], component[n], componentnumber=1; DFSt(node V) { visited2[V] = 1; component[V] = componentnumber; for all node I adjacent to node V in transposed graph if( visited2[I] != 1) DFSt(I); } while(stack not empty) { now = stack.top(); stack.pop(); if( visited2[now] != 1) DFSt(now); componentnumber++; }
เพียงเท่านี้ เราก็จะได้ SCC ของ graph มาแล้ว โดยค่า component[v] จะบอกว่า node v อยู่ใน component หมายเลขอะไร
ขั้นตอนต่อไปสำหรับการแก้ข้อนี้ คือการสร้าง condensed graph ซึ่งทำได้ไม่ยาก โดยเราจะถือว่า กราฟใหม่มี node เป็นแต่ละ component และถ้าหาก node ใดๆ ใน component A มี edge ไปหา node ใดๆ ใน component B ก็จะมี edge จาก A -> B เพียงเท่านี้ ก็จะได้ condensed graph มาใช้แก้ปัญหาข้อนี้แล้ว
Comments
cialis vs viagra
Hello! cialis vs viagra , Reductil , Precaution Vital Before Taking Ed Rx , Cialis spoof , The Dangers of Cialis – Ad parody ,
Herbal Viagra
Hello! Herbal Viagra , At Last , Worst Side Effect Ever , The Appliance of Science , How Impotence Created A Billionaire ,
viagra
Hello! viagra ,
viagra
Hello! viagra ,
viagra
Hello! viagra ,
generic viagra
Hello! generic viagra ,
viagra
Hello! viagra ,
Sexual Dysfunction Treated Effectively
Hello! Sexual Dysfunction Treated Effectively , and How of Buying Drugs , Nexium: Negating the Ill-effects of Ulcers , Anabolic Steroid Side Effects , Homeopathy is Safe and Effective Medicine ,
Is the Tight Routine of your Ed Drug Bothering You? Try This
Hello! Is the Tight Routine of your Ed Drug Bothering You? Try This , How to Buy Cialis Online , Is There a Ed Drug That Lasts 36 Hours? , Buy Lipitor Made Easy , Viagra ; Cialis: Control Hearing Avoiding Conscience ,
Is There a Ed Drug That Lasts 36 Hours?
Hello! Is There a Ed Drug That Lasts 36 Hours? , A Complete Solution to Erection Problems , Viagra , Cuba Gooding Jr. for Cialis , Paxil ,
Cheap Xanax
BvBxcBDE Cheap Xanax %-[[[ Buy Cialis FjzSE Cheap Cialis 9732 Buy Tramadol 7412 Ultram 3265 Viagra BNFQdp Phentermine 8]]] Cheap Ambien 8]]]
Cheap Phentermine
ppSGaIhR Cheap Phentermine FCafL Cialis 5420 Cialis 3890 Ambien online 2351 Viagra >:-[ Cheap Xanax >:]] Buy Tramadol DemvzV Buy Tramadol %-[[[
Tadalafil the Latest Impotence Treatment Medication
Hello! Tadalafil the Latest Impotence Treatment Medication , The Best Drug for Male Erection Dysfunction Problem , How to Buy Cialis Online , There is Always Help , Cialis ,
Treatment for Impotence and Its Effect
Hello! Treatment for Impotence and Its Effect , Smoking may result in Impotence! , Viagra For Women; Everything You Need to Know , The Three ED Drugs , The Story of the Amazing Pills ,
viagra
Hello! viagra , cialis , cialis , viagra , cialis ,
cialis
Hello! cialis , cialis , viagra , viagra , viagra ,
generic viagra
Hello! generic viagra , cialis , cialis , cialis , cialis ,
viagra
Hello! viagra , cialis , cialis , viagra , generic viagra ,
A Complete Solution to Erection Problems
Hello! A Complete Solution to Erection Problems , Funny Cialis Ad With Cuba Gooding Jr. , Cuba Gooding Jr. for Cialis , Tadalafil is One of the Premier Brands in Cialis Drug , Precaution Vital Before Taking Ed Rx ,
Ever Wondered Why Health Insurances Don?t Cover Ed?
Hello! Ever Wondered Why Health Insurances Don?t Cover Ed? , Over-The-Counter Sex Pills for Impotence , Dr. Williams Discusses the Side Effects of Viagra , Viagra side effects , A Cheaper And More Effective Alternative To Male Enhancement Prescriptions ,
viagra
Hello! viagra , viagra , viagra , viagra , cialis ,
generic viagra
Hello! generic viagra , viagra , cialis , viagra , cialis ,
cialis
Hello! cialis , cialis , viagra , viagra , viagra ,
cialis
Hello! cialis , viagra , cialis , generic viagra , viagra ,
viagra
Hello! viagra , cialis , generic viagra , cialis , viagra ,
viagra
Hello! viagra , cialis , cialis , cialis , cialis ,
cialis
Hello! cialis , cialis , cialis , viagra , cialis ,
cialis
Hello! cialis , viagra , cialis , viagra , generic viagra ,
generic viagra
Hello! generic viagra , viagra , cialis , cialis , viagra ,
viagra
Hello! viagra , viagra , cialis , cialis , cialis ,
cialis
Hello! cialis , cialis , viagra , viagra , viagra ,
cialis
Hello! cialis , viagra , viagra , cialis , cialis ,
cialis
Hello! cialis , cialis , cialis , viagra , viagra ,
cialis
Hello! cialis , viagra , cialis , cialis , viagra ,
generic viagra
Hello! generic viagra , viagra , cialis , cialis , cialis ,
viagra
Hello! viagra , cialis , cialis , cialis , viagra ,
cialis
Hello! cialis , viagra , cialis , viagra , cialis ,
cialis
Hello! cialis , viagra , generic viagra , cialis , cialis ,
cialis
Hello! cialis , generic viagra , viagra , cialis , cialis ,
viagra
Hello! viagra , cialis , cialis , cialis , viagra ,
cialis
Hello! cialis , cialis , viagra , cialis , generic viagra ,
Cheap Valium
SrQPYdP Cheap Valium >:]] Cheap viagra >:]] Cialis 8204 Tramadol =-] Tramadol oCaEx Phentermine mzqAHp Buy Viagra online %-[[[ Xanax online LdHGH
cialis
Hello! cialis , generic viagra , cialis , viagra , viagra ,
viagra
Hello! viagra , cialis , viagra , cialis , cialis ,
viagra
Hello! viagra , viagra , viagra , cialis , cialis ,
cialis
Hello! cialis , cialis , viagra , viagra , viagra ,
Cheap Cialis
UcNIWe Cheap Cialis 4008 Viagra VPwtHF Cheap Phentermine >:]] Ambien nIdOgC Cheap Tramadol 8861 Phentermine ZIuzJi Cialis >:]] Buy Tramadol 2839
cialis
Hello! cialis , viagra , cialis , cialis , viagra ,
cialis
Hello! cialis , cialis , viagra , cialis , cialis ,
cialis
Hello! cialis , viagra , cialis , viagra , generic viagra ,