design and analysis of algorithms - burapha universityseree/lecture/... · 2001-06-09 ·...
TRANSCRIPT
01: SolveDQ( P )02: {03: if ( P is trivial ) return Solve(P)04: divide P into P1 , P2 , …, Pk05: for (i=1 to k)06: Si = SolveDQ( Pi )07: S = combine( S1 , S2 , …, Sk )08: return S09: }
01: Partition( A, p, r )02: {03: c = A[p]04: i = p–1; j = r+105: while ( i < j ) {06: while ( A[––j] < c ) { }07: while ( A[++i] > c ) { }08: if (i < j) swap(A[i], A[j])09: }10: return j11: }
DESIGN & ANALYSIS OF ALGORITHMS
สมชาย ประสทธจตระกลภาควชาวศวกรรมคอมพวเตอร
จฬาลงกรณมหาวทยาลย
การออกแบบและวเคราะห
2
3 2
1 4 3
3 4 4 1 12
1 2 3 4
เพอใหผเขยนไดทราบวามใครใชหนงสอเลมนบาง จะไดตดตอกลบไดในอนาคตเมอมการปรบปรงเปลยนแปลงเนอหา จงอยากขอใหผอานกรอกรายละเอยดเลกๆ นอยๆ แจงใหผเขยนดวยวธใด วธหนงดงน
วธแรก : ไปท http://www.cp.eng.chula.ac.th/~somchai/books เพอกรอกรายละเอยด
วธทสอง : ในกรณทกาลงอานเอกสารฉบบนอยดวย Acrobat กสามารถกรอกรายละเอยดในชองวางขางลางนไดโดยตรงแลวกดปม SUBMIT (วธนมขอจากดเลกนอยวาตองกรอกเปนภาษาองกฤษเทานนและตองเปดเอกสารนดวย web browser เพอสงขอมลจาก form)
ชอ :
สถานศกษา :
email addr. :
ความคดเหน :ขอแนะนา
ขอบคณครบ
การออกแบบและวเคราะห
อลกอรทม เอกสารคาสอนวชา 2110427
สมชาย ประสทธจตระกลภาควชาวศวกรรมคอมพวเตอรจฬาลงกรณมหาวทยาลย
ราคา (ตามคากระดาษและคาถายเอกสาร) บาท
สงวนลขสทธตาม พ.ร.บ.ลขสทธ พ.ศ. 2521
Draft 1.0 : 30/10/00 10:17 : [email protected] ๓
ในปจจบนใครๆ กคงเหนบทบาททสาคญของคอมพวเตอรทไปแทรกซมในแทบทกกจกรรม ประจาวนไมทางตรงกทางออม คอมพวเตอรทางานไดเรวขน มขนาดเลกลง มโปรแกรมทใชงายขน ชวยเสรมกจกรรมของมนษยไดมากขน ทงนกเพราะวาเบองหลงฮารดแวรทเราจบตองได เบองหลงซอฟตแวรทเรานามาตดตงสงงานฮารดแวรนน กคอ “กน” ความคดของผสรางหรอทเรยกวาอลกอรทมทถกแปลงมาเปนฮารดแวรและโปรแกรมทใชงานไดจรง อลกอรทมจงเปนศาสตรซงมบทบาทสาคญมากในการศกษาทางวทยาการและวศวกรรมคอมพวเตอร วชาอลกอรทมเบองตน หรอโดยสวนใหญมกตงชอวา การออกแบบและวเคราะหอลกอรทม จงถกบรรจเปนวชาพนฐานในสาขาวชาดงกลาว
คาวา “Algorithm” นนศพทบญญตของราชบณฑตยสถานใชคาวา “ขนตอนวธ” ซงถาจะขยายความอยางไมเปนทางการ กคอขนตอนวธการแกไขปญหาเชงคานวณดวยคอมพวเตอร ถงแมวา “Algorithm” มความหมายดงกลาว แตเปนคาทมาจากคาวา “Al-Khwarizmi” ซงเปนชอนกคณตศาสตร (อานรายละเอยดไดในปลายบทท 2) ดงนนเพอเปนการใหเกยรตนกคณตศาสตรทานน ผมจงขอทบศพทใชคาวา “อลกอรทม” แทน จงขอใชเนอทตรงนชแจงเหตผลของการเลอกไมใชศพทบญญตคาวา “Algorithm” น
วธการศกษาอลกอรทมทไดผลวธหนง (ซงผมขอใชในทน) กคอการศกษาจากตวอยาง นกเรยนจะพบตวอยางปญหาแทรกตามกลวธการออกแบบมาตรฐานทวไป ทคนในวงการทาๆ กน นนคอกอนจะออกแบบเกง กขอใหไปศกษาสงทผอนไดเคยออกแบบกนมาในอดตเปนตวอยาง วธศกษาแบบนกมทงขอดขอเสย ขอดกคอยงรตวอยางมาก กรแนวทางหลากหลายซงพรอมทประยกตกบปญหาใหมทจะพบในอนาคต แตกมขอเสยวาจะยดตดกบกลวธเกาๆ ไมคอยยอมคดอะไรแผลงๆ ใหมๆ (จงมกพบบอยๆ วาแนวคดแปลกๆ ใหมๆ มาจากคนนอกวงการ) จงขอใหนกเรยนระแวงในประเดนนดวย
คานา
๔ การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 10:17 : [email protected]
ผออกแบบอลกอรทมทดจาตองรจกขอปญหาทสนใจ รจกเลอกกลวธการออกแบบ รจกเลอกใชโครงสรางขอมลทเหมาะสม และทสาคญตองรจกวเคราะหดวยวาผลทไดออกแบบไวดเลวเพยงใด ดงนนกอนจะเขาสเรองราวทางอลกอรทมนน นกเรยนจะตองมพนฐานทางการเขยนโปรแกรม โครงสรางขอมล และภนทนคณตศาสตร
ผมขอเนนวาพนฐานทางการเขยนโปรแกรมนนจาเปนอยางยงยวด เนองจากเราจะตองรวาแนวคดทนาเสนอในอลกอรทมนนทาใหเหนจรงไดดวยฮารดแวรหรอซอฟตแวร ดงนนจงตองมความสามารถในการเปลยนแนวคดมาเปนโปรแกรมททางานไดจรง ขอใหนกเรยนเขยนโปรแกรมเปนสกหนงภาษา (โดยสวนตวชอบ C C++ หรอ Java) อลกอรทมตางๆ ทพบในเอกสารนเมอเขยนโปรแกรมสมบรณแลวอยางมากกอยในหลกเปนรอยบรรทด ซงถอวาไมมาก ผมพบวาทกษะสวนนเปนสงทนาเปนหวงทสดสาหรบนกเรยนทจะเรยนอลกอรทมใหไดผล
จงอยากขอเนนอกประการหนงสาหรบนกเรยนวา วชาทางสาขานไมใชมานงฟง จา แลวกสอบ การศกษาจะไดผลด (ตอตวนกเรยนเอง) กคอตองอาน คด ทา และถาม (สวนการเขาเรยนและการเขาสอบนนเปนเรองของระเบยบและกฏเกณฑ) เราสามารถเจาะเนอหาในรายละเอยดจากการอานตารา ฝกสมองจากการคดระหวางการทาแบบฝกหด ฝกฝมอจากการทาการบานการเขยนโปรแกรม และสรางความกระจางในเนอหาจากการถามและถกเถยงกบผอน ผมอยากใหบรรยากาศการเรยนรเปนแบบ “อาน+คด+ทา+ถาม” มากกวาแบบ ฟง+บน+สอบ+ทง
เอกสารนประกอบไปดวยเนอหาหาสวนดวยกนคอ
1) เรองพนฐาน (บทท 1 และ 2)2) การวเคราะห (บทท 3 4 และ 5)3) โครงสรางขอมล (บทท 6 และ 7)4) การออกแบบ (บทท 8 ถง 12)5) การจดกลมปญหา (บทท 13)
เนอหาทงหมดสามารถใชสอนไดในหนงภาคการศกษา แตอาจไมสามารถครอบคลมไดทกตวอยาง ถาสนใจเฉพาะองคความรพนฐานทางอลกอรทม ผสอนอาจขามเนอหาในบทท 5 (เรองการวเคราะหถวเฉลย) บทท 6 (ในกรณทไมอยากทวนเรองโครงสรางขอมล) และบทท 7 (เรองโครงสรางขอมลแบบยง) ได เพอจะไดมโอกาสครอบคลมไดครบทกตวอยาง และลงลกในรายละเอยดของการทางานของอลกอรทมและการวเคราะห
Draft 1.0 : 30/10/00 10:17 : [email protected] คานา ๕
ตองขอบอกวาผมเองไมเคยลงทะเบยนเรยนวชานมากอน และกทาวจยทางดานการออกแบบวงจรรวมความจสงระหวางการศกษา แตพบวางานวจยทงหลายในสาขาทสนใจ (ซงกคอสายฮารดแวร) นนมแตเรองของอลกอรทม เมอเรมอาชพอาจารยกพบวามวชานปรากฏอยในหลกสตร แตไมเคยเปดสอนมาเปนเวลาสบกวาป กเลยเปดเปนวชาเลอก สอนและเรยนรสงใหมๆไปพรอมๆ กบนกเรยนมาเปนเวลา 6 ป จากนนจงผลกดนใหเปนวชาบงคบในหลกสตร สอนมาไดอก 3 ป อยมาวนหนงไดยมสมดจดการเรยนของนกเรยนคนหนง (คณปภาณน) มาดพบวาเธอเขยนสรปคาสอนของผมไดดกวาเศษกระดาษทผมใชเตรยมการสอนเสยอก กเลยรสกวานาจะมหนงสอทางดานนใหอานกนเปนภาษาไทยเสยท เพราะผมพบวานกเรยนไมคอยอานเนอหาในตาราภาษาองกฤษกนเลย อกทงตารากมราคาแพง จงใชเวลาวนละประมาณ 2 ชวโมงหลงลกเขานอนแลว เปนเวลาประมาณครงป เขยนไดเปนเอกสารคาสอนฉบบน ผสนใจสามารถเขาชมเอกสารฉบบน เอกสารชดปรบปรงทจะตองมในอนาคต (พรอมทผดซงพบเปนระยะๆ) ภาพยนตรประกอบการสอน (ประมาณ 20 ชวโมง) และเรองราวอนๆ ประกอบการเรยนการสอนวชานไดท
http://www.cp.eng.chula.ac.th/~somchai/2110427
สดทายนตองขอขอบคณภาควชาวศวกรรมคอมพวเตอร จฬาลงกรณมหาวทยาลย ทสนบสนนวสดครภณฑและโอกาส ใหผมไดผลตตนฉบบทใชเปนเอกสารประกอบคาสอนวชา 2110427 ไดอยางราบรน
สมชาย ประสทธจตระกลภาควชาวศวกรรมคอมพวเตอร
จฬาลงกรณมหาวทยาลย[email protected]
๘ กนยายน ๒๕๔๓
๖ การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 10:13 : [email protected]
1 บทนา 1การหาคานอยสดในแถวลาดบ ............................................................................................1การหาคานอยสดอนดบทสอง ......................................................................................5
การหา majority ...................................................................................................................7การใหสจดบนกราฟดวยสสามส ......................................................................................10การออกแบบอลกอรทม ....................................................................................................11เนอหาทจะเรยนในวชาน...................................................................................................12สงทจะไมสนใจในวชาน...................................................................................................13พนฐานทนกเรยนตองม ....................................................................................................14
2 ปญหาและอลกอรทม 17ปญหา ................................................................................................................................17ตวอยางปญหา ...................................................................................................................18ขนาดของตวอยางปญหา.............................................................................................19
อลกอรทม .........................................................................................................................21แบบฝกหด.........................................................................................................................23
3 การเตบโตของฟงกชน 25อตราการเตบโต.................................................................................................................25สญกรณเชงเสนกากบ .......................................................................................................29
สารบญ
Draft 1.0 : 30/10/00 10:13 : [email protected] สารบญ ๗
โอเลก..........................................................................................................................29โอเมกาเลก ..................................................................................................................29ทตาใหญ .....................................................................................................................29โอใหญ........................................................................................................................30โอเมกาใหญ ................................................................................................................31คณสมบตของสญกรณเชงเสนกากบ ..........................................................................32ขอใชเครองหมาย = แทน �........................................................................................37การใชสญกรณเชงเสนกากบในสมการ ......................................................................38การใชสญกรณเชงเสนกากบ ......................................................................................39
แบบฝกหด ........................................................................................................................41
4 การวเคราะหอลกอรทม 43คาสงมลฐาน......................................................................................................................43คาสงมาตรเวลา .................................................................................................................46การวเคราะหรปแบบการทางาน .......................................................................................46การทางานแบบลาดบ..................................................................................................46คาสง if … then … else ..............................................................................................47วงวนแบบ for .............................................................................................................48วงวนแบบ while .........................................................................................................50การเรยกแบบเวยนเกด ................................................................................................53ประเภทของการวเคราะห ...........................................................................................59
แบบฝกหด ........................................................................................................................66
5 การวเคราะหกรณถวเฉลย 69Stack แบบม multipop ......................................................................................................71วธการวเคราะหกรณถวเฉลย ............................................................................................72Stack แบบม multipop (ตอ)..............................................................................................74
๘ การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 10:13 : [email protected]
วธทางบญช .................................................................................................................74วธพลงงานศกย ...........................................................................................................75
ตวนบฐานสอง ..................................................................................................................76วธรวมกลม..................................................................................................................77วธทางบญช .................................................................................................................78วธพลงงานศกย ...........................................................................................................79
Stack ขนาดไมจากด..........................................................................................................79วธรวมกลม..................................................................................................................81วธทางบญช .................................................................................................................81วธพลงงานศกย ...........................................................................................................81
Binary search แบบ dynamic ............................................................................................83แบบฝกหด.........................................................................................................................85
6 โครงสรางขอมล (แบบงาย) 87รายการ ..............................................................................................................................88ตนไมคนแบบทวภาค........................................................................................................90ตารางแฮช..........................................................................................................................94ฮป......................................................................................................................................98กราฟ ...............................................................................................................................100แบบฝกหด.......................................................................................................................101
7 โครงสรางขอมล (แบบยง) 105ตนไม splay .....................................................................................................................105การ splay...................................................................................................................106การคน.......................................................................................................................108การเพม......................................................................................................................108การลบ .......................................................................................................................109
Draft 1.0 : 30/10/00 10:13 : [email protected] สารบญ ๙
การวเคราะหกรณถวเฉลย.........................................................................................110ฮปทวนาม .......................................................................................................................112ตนไมทวนาม ............................................................................................................112การหาคยทนอยสด (FindMin) .................................................................................114การเชอมตนไมทวนาม .............................................................................................114การแทนฮปทวนามในหนวยความจา .......................................................................115การผสานฮป (Merge)...............................................................................................116การเพม (Insert) ........................................................................................................118การลบคยทนอยสด (ExtractMin).............................................................................118การลดคาของคย (DecreaseKey) ..............................................................................118การสรางฮป (BuildHeap) .........................................................................................119
ฮปทวนามแบบขเกยจ .....................................................................................................119การแทนฮปทวนามแบบขเกยจในหนวยความจา .....................................................120การลบคยทนอยสด...................................................................................................121
ฮปฟโบนกช....................................................................................................................124การลดคาของคย (DecreaseKey) ..............................................................................124การลบคยทนอยสด (ExtractMin).............................................................................127
เซตไมมสวนรวม ............................................................................................................129การยเนยนดวยความสง.............................................................................................131การยเนยนดวยขนาด.................................................................................................132การอดวถ ..................................................................................................................133การยเนยนดวยลาดบชน ...........................................................................................133รหสเทยมของ MakeSet, Union และ Find ...............................................................134การวเคราะห .............................................................................................................134
แบบฝกหด ......................................................................................................................138
8 การแบงแยกและเอาชนะ 141การคนแบบทวภาค .........................................................................................................142
๑๐ การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 10:13 : [email protected]
การเรยงลาดบแบบผสาน ................................................................................................144การเรยงลาดบแบบเรว.....................................................................................................145ปญหาการเลอก ...............................................................................................................150มธยฐานของมธยฐานของหา ....................................................................................153
การยกกาลงมอดลาร........................................................................................................156การคณเมทรกซ ...............................................................................................................157คจดใกลกนทสด..............................................................................................................159ดารายอดนยม ..................................................................................................................163แบบฝกหด.......................................................................................................................165
9 กาหนดการพลวต 169ปญหาการหาคาเหมาะทสด.............................................................................................169ลกษณะเฉพาะของปญหา................................................................................................172โครงสรางยอยเหมาะทสด ........................................................................................173การซอนเหลอมของปญหายอย.................................................................................177
ขนตอนการออกแบบดวยกาหนดการพลวต ...................................................................181ตนไมคนแบบทวภาคเหมาะทสด ...................................................................................182ลาดบยอยเพมขนทยาวสด ...............................................................................................188วถสนสดแบบแหลงตนทางเดยว ....................................................................................190วถสนสดแบบทกค..........................................................................................................193ลาดบยอยรวมยาวสด.......................................................................................................196การคณลกโซเมทรกซ .....................................................................................................200แบบฝกหด.......................................................................................................................204
10 อลกอรทมแบบตระกลาม 209ปญหา Knapsack .............................................................................................................211
Draft 1.0 : 30/10/00 10:13 : [email protected] สารบญ ๑๑
ลกษณะเฉพาะของปญหา ...............................................................................................215ปญหาการเลอกกจกรรม .................................................................................................216วถสนสดแบบแหลงตนทางเดยว ....................................................................................218ตนไมแบบทอดขามเลกสด .............................................................................................223อลกอรทมของครสกล ..............................................................................................223อลกอรทมของพรม...................................................................................................225การพสจนความถกตองของอลกอรทมของพรมและของครสกล.............................227
รหสฮฟฟแมน .................................................................................................................228แบบฝกหด ......................................................................................................................233
11 การคนคาตอบในตนไมและกราฟ 237รปแบบของผลเฉลย........................................................................................................238การแจงกรณและตรวจสอบผลเฉลย ...............................................................................241การแจงกรณวธเรยงสบเปลยน .................................................................................242การแจงกรณเซตยอย.................................................................................................243การแจงกรณการแบงสวนเซต ..................................................................................245
ตนไมปรภมสถานะ ........................................................................................................246การคนตามแนวลก แนวกวาง และตามตนทนนอยสด ...................................................251
Live–node และ E–node ...........................................................................................251การคนตามแนวลก....................................................................................................252การคนตามแนวกวาง ................................................................................................255การคนตามตนทนนอยสด ........................................................................................259
กราฟปรภมสถานะ .........................................................................................................261การยอนรอย ....................................................................................................................265การขยายและจากดเขต ....................................................................................................275แบบฝกหด ......................................................................................................................286
๑๒ การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 10:13 : [email protected]
12 อลกอรทมเชงสม 289อลกอรทมแบบมอนตคารโล ..........................................................................................291การทวนสอบการคณเมทรกซ...................................................................................292สวนตดนอยสด .........................................................................................................294การทดสอบความเปนจานวนเฉพาะ .........................................................................297การจบคสตรง ...........................................................................................................303
อลกอรทมแบบลาสเวกส ................................................................................................306อลกอรทมแบบลาสเวกสทไมตองเรยกซา................................................................307อลกอรทมแบบลาสเวกสทอาจตองเรยกซา ..............................................................308ปญหาการเลอก .........................................................................................................309การจบคสตรง ...........................................................................................................309ปญหา n ควน ............................................................................................................310การแฮชเชงจกรภพ ...................................................................................................312
แบบฝกหด.......................................................................................................................316
13 เอนพบรบรณ 321อลกอรทมทมและทไมมประสทธภาพ ...........................................................................322ปญหางายและยาก ...........................................................................................................324ปญหาการตดสนใจ .........................................................................................................325กลมปญหา P ...................................................................................................................327กลมปญหา NP ................................................................................................................328การทวนสอบ ............................................................................................................328อลกอรทมเชงไมกาหนด...........................................................................................329
การลดรปปญหา ..............................................................................................................331กลมปญหา NP บรบรณ ..................................................................................................334การออกแบบอลกอรทมสาหรบปญหา NP–Hard...........................................................344
Draft 1.0 : 30/10/00 10:13 : [email protected] สารบญ ๑๓
การคนเฉพาะท .........................................................................................................345อลกอรทมเชงประมาณ .............................................................................................348
แบบฝกหด ......................................................................................................................357
บรรณานกรม 365
Draft 1.0 : 28/10/00 20:38 : [email protected] 1
บทท 1
จะวาไปแลวจดประสงคหลกทตองการใหนกเรยนทผานการเรยนวชานไดกคอ ความสามารถในการออกแบบขนตอนวธทมประสทธภาพเพอแกไขปญหาทไดรบ ทสามารถนาไปเขยนเปนโปรแกรมคอมพวเตอรได ความสามารถในการออกแบบนจะเรยนและถายทอดกนอยางไร วธหนงกคอการยกตวอยางกลวธมาตรฐานตางๆ ทนกคอมพวเตอรเขาใชกนอยในการแกไขปญหาพรอมทงยกตวอยางปญหาและขนตอนวธแกไขปญหาเหลานน ประเดนสาคญอยทวามนไมมสตรสาเรจในการออกแบบ ดงนนปญหาหนงๆ นนจะมขนตอนวธแกไขอยหลายแบบ จงจาเปนอยางยงทเราจะตองมความรในการวเคราะหเพอเปรยบเทยบขอดขอเสยของแตละวธทออกแบบขนได ดงนนสงทจะศกษากนจะประกอบดวย
� การศกษาลกษณะปญหา� การออกแบบอลกอรทม� การวเคราะหอลกอรทม
อนเปนสามเรองหลกทจะไดเรยนกน สาหรบในบทนานจะขอยกตวอยางเลกๆ ดงตอไปน
การหาคานอยสดในแถวลาดบปญหาทสนใจในหวขอนคอการหาขอมลตวทมคานอยสดทเกบในแถวลาดบ A อานแลวกจะรสกไดทนทวา "หมมาก" เรยนกนมาตงแตวชาแรกในการเขยนโปรแกรมแลว (ใหเขาใจวาผมมสมมตฐานวานกเรยนมความรสกเชนนจรงๆ หากใครยงไมรวาจะเขยนโปรแกรมแกปญหาน
บทนา
2 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
อยางไร กแสดงวาคงมาเรยนผดวชาแลว !!!) ผมขอเสนอโปรแกรมทหาคานอยสดใหดสามโปรแกรม
เรมดวยโปรแกรมทหนง งายสด ตรงไปตรงมา กคอการไลตรวจสอบไป n–1 ครงตงแตตวทสองถงตวสดทาย โดยจาเฉพาะตวทนอยกวาจากการเปรยบเทยบ ไดโปรแกรมดงน *
01: findMin( int A[1..n] )02: {03: m = A[1]04:05: for ( i = 2 to n )06: if ( A[i] < m ) m = A[i]07: return m08: }
นกเรยนหลายคนอาจมโปรแกรมของตวเองอยในใจทไมใชแบบน บางคนอาจจะใช whileloop แทน for loop บางคนอาจจะเลอกจะวงยอนจากตวทายมาตวหนา กได
โปรแกรมทสอง เขยนมาจาก recurrence ขางลางน
mn = min(An–1 , mn–1) สาหรบ n > 1 , m1 = A1
ซงบอกเราวาถาอยากจะหาตวนอยสดของแถวลาดบทม n ตว (mn) ใหไปหาตวนอยสดของแถวลาดบ n–1 ตวแรก (mn) กอน แลวนาผลมาเปรยบเทยบกบตวสดทาย สามารถเขยนโปรแกรมrecursive จากนยามของปญหาไดตรงไปตรงมาดงน
09: findMin( A[1..n] )10: {11: if ( n == 1 ) return A[1]12: m = findMin( A[1..n-1] )13: return ( A[n] < m ? A[n] : m )14: }
บางคนบอกวาแบบนไมเหนมอะไรเลย ในทางปฏบตกยงเปนการเปรยบเทยบแบบลาดบจากตวแรกไปตวทายอยด (ไปลองคดดเองวาทาไม ?)
โปรแกรมทสาม พจารณาขอมลทละครง คอหาตวนอยสดครงซาย แลวหาตวนอยสดครงขวาแลวคอยมาเปรยบเทยบกน ไดโปรแกรมแบบ recursive ขางลางน
* จะขอละเลยเรองจกจกอาทเชน ถา A ไมมขอมลเลยจะเกดอะไรขน เพราะจะทาให coding แลดรมรามเปลองกระดาษ
Draft 1.0 : 28/10/00 20:38 : [email protected] บทท 1 บทนา 3
15: findMin( A[1..n] )16: {17: return findMinR( A[1..n] )18: }19:20: findMinR( A[a..b] )21: {22: if ( a == b ) return A[a]23: int mid = (a + b) / 224: int m1 = findMin( A[a..mid] )25: int m2 = findMin( A[mid+1..b] )26: return ( m1 < m2 ? m1 : m2 )27: }
คาถามทอยากจะถามตอนน กคอใน 3 โปรแกรมทเขยนใหดน โปรแกรมใดนาใชทสด ?
นาใชในแงไหน ? ในแงของอลกอรทมแลวเขาพจารณากนสองประเดนหลกคอประสทธภาพเชงเวลาหรอพดงายๆวาใครทางานเรวกวากน และเรองของปรมาณหนวยความจาทใชระหวางการทางาน แนนอนวามประเดนอนๆ ทนานามาพจารณาดวยเชนความซบซอนของการเขยนโปรแกรม (หรอพดงายๆวา โปรแกรมใดเขยนงายกวากน อานเขาใจงายกวากน) เปนตน อยางไรกตามจะขอยดสองประเดนเรองเวลาและเนอทเปนสาคญในการพจารณา
เรามาสนใจเวลาการทางานกน สามโปรแกรมขางบนนโปรแกรมใดทางานเรวสด ? คาตอบงายๆ กคอพมพโปรแกรมเขาเครอง สงแปล ลองทดสอบกบขอมลจรงเลย แลวกจบเวลา ทาแบบนออกจะดทอไปหนอย เหมอนกบบอกวาจะสงดาวเทยมแบบไหนด กบอกวาลองสงไปสกสามลกสามแบบ แลวกจะรเองวาแบบไหนด เราจะตองมความสามารถทจะประเมนประสทธภาพผลงานทไดออกแบบไวโดยไมตองเขยน+แปล+สงงานโปรแกรมจรง อนนเปนเรองของการวเคราะห
จากโปรแกรมทเขยนใหดขางบนน เพอความงายในการอางองจะกาหนดใหคราวๆ วา เวลาการทางานของคาสงในบรรทดท k (ดหมายเลขกากบบรรทด) คอ tk โปรแกรมแรกเปนการทางานแบบลาดบคอไลเปรยบเทยบตวทสองไปถงตวทาย ดงนนถามขอมล n ตว กตองทางานทคาสงfor n ครง แตทางานในวงวน for n–1 ครง (คาสงครงสดทายท for จะไมเปนจรงกเลยหลดจากวงวน) บวกกบเวลานอกวงวนอกเลกนอย รวมเปนเวลา
T1(n) = t3 + t5n + t6(n–1) + t7
โปรแกรมทสองเราวเคราะหไดจาก recurrence ของเวลาการทางานดงน
T2(n) = T2(n–1) + t11 + t12 + t13 สาหรบ n > 1, T2(1) = t11
4 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
T2(n) คอเวลาในการหาตวนอยสดในขอมล n ตว เทากบเวลาในการหาตวนอยสด n–1 ตวแรกตามดวยภาระอกเลกนอย แตถามขอมลตวเดยวก return คาไดเลย (ใชเวลา t11) recurrence นงายมาก หาผลเฉลยดงน
T2(n) = T2(n–1) + t11 + t12 + t13= T2(n–2) + 2(t11 + t12 + t13)= T2(n–3) + 3(t11 + t12 + t13)…= T2(n–(n–1)) + (n–1)(t11 + t12 + t13)= t11 + (n–1)(t11 + t12 + t13)= t11n + (t12 + t13)(n–1)
โปรแกรมทสามม recurrence ของเวลาการทางานคอ
T3(n) = T3( �n/2� ) + T3( �n/2� ) + t22+t23+t24+t25+t26 สาหรบ n > 1, T3(1) = t22
กาหนดให e = t22+t23+t24+t25+t26 และให n = 2k จะวเคราะหหาผลเฉลยไดงายขนดงนT3(n) = 2T3(n/2) + e
= 2( 2T3(n/22) + e ) + e = 22 T3(n/22) + 2e + e= 22( 2T3(n/23) + e ) + 2e + e = 23 T3(n/23) + 22e + 2e + e…= 2k T3(n/2k) + 2k–1e + 2k–2e + … + 21e + 20e…= 2lg n T3(n/2lg n) + 2lg n –1 e + 2lg n –2e + … + 21e + 20e= 2lg n t22 + 2lg n –1 e + 2lg n –2e + … + 21e + 20e
= n t22 + e(n–1)
= t22 n + (t22+t23+t24+t25+t26)(n–1)
สรปเวลาการทางานของทงสามโปรแกรมดงนโปรแกรมท 1 T1(n) = t5n + t6(n–1) + t3 + t7
โปรแกรมท 2 T2(n) = t11n + (t12 + t13)(n–1)
โปรแกรมท 3 T3(n) = t22n + (t22+t23+t24+t25+t26)(n–1)
เวลาทางานจรงจะเปนเทาใดคงขนกบเวลาการทางานจรงของแตละคาสง ซงทงนขนกบวาใชภาษาอะไร compiler ตวไหน ทางานบนเครองอะไร แตถาจะพจารณาละเอยดสกเลกนอยจะพบวาคาสงทเขยนสวนใหญกเปนคาสงพนๆ เวลาการทางานคงไมแตกตางกนมากนก จะมกแตคาสงเรยกฟงกชนในบรรทดท 12, 24 และ 25 ทออกจะ "แพง" แพงในทนหมายความวามภาระเยอะ การเรยกฟงกชนมภาระในการจดการ stack frame สงคาพารามเตอร และยายการทางานไปยงฟงกชนอน ดงนนในเชงประสทธภาพการทางานแลวสรปไดวา
Draft 1.0 : 28/10/00 20:38 : [email protected] บทท 1 บทนา 5
� ทงสามโปรแกรมทางานใชเวลาแปรตามคาของ n เปนฟงกชนเชงเสนทงสน
� โปรแกรมท 1 นาจะทางานไดเรวสดเนองจากคาสงททางานซา (คาสง if และ for) ใชเวลานอยกวาของโปรแกรมอน (ซงมการเรยกฟงกชน)
เหนอย กวาจะวเคราะหโปรแกรมเลกๆ เสรจ (วาไปแลว นเปนโปรแกรมทเลกทสดทอธบายกนในวชาน) ในแงของศาสตรทางอลกอรทมนน เราคงจะไมลงไปวเคราะหกนในรายละเอยดของแตละคาสงแบบทไดทามาหรอก เพราะพอถงทสด tk ตางๆ ทตดอยในฟงกชนเวลากไมรคาอยด (เพราะมนขนกบปจจยหลายๆ อยางทกลาวมาเชน ภาษา ตวแปล เครอง) สงทเราสนใจมากกวากคอแนวโนมการเพมของเวลาการทางานเมอขนาดของขอมลเพมขน จากโปรแกรมทงสามทเขยนใหดนเวลาแปรตามจานวนขอมลในลกษณะเชงเสนทงสน นนคอถาจานวนขอมลเพมขน 100 เทา เวลาการทางานกมากขน 100 เทาตาม การเตบโตของฟงกชนทแทนประสทธภาพการทางานนแหละทเราสนใจจะวเคราะหกน และเราจะไดศกษาเครองมอทชวยใหเราวเคราะหอลกอรทมทซบซอนไดงายๆ กนตอไป
การหาคานอยสดอนดบทสองตวอยางทแลวบอกเราวาจะหาคานอยสด ใหเขยนโปรแกรมแบบธรรมดาใชวงวนวงไลเปรยบเทยบขอมลในแถวลาดบกจะเรวกวาแบบใชลกเลน เขยนเปน recursive ซะยงยาก คราวนเรามาเสรมความตองการของปญหาใหมากขนคอ นอกจากตองการจะหาคานอยสดแลว เรายงตองการคานอยสดอนดบสองดวย จะทาอยางไรด ?
ก "หม" อก กเพยงเขยนอกวงวนหนงหลงการหาคานอยสด แลวหาตวนอยสดในแถวลาดบทไมพจารณาชองทเปนตวนอยสดทหาไดในวงวนแรก เพยงเทานกเสรจ (ผมคงไมตองเขยนโปรแกรมใหดนะ) ดวยขนตอนวธน แนนอนวาการหาตวนอยสดอนดบสองกจะใชเวลาเปนฟงกชนเชงเสนกบจานวนขอมลเชนกนกบการหาตวนอยสด
มวธอนหรอไม ทจะไดตวนอยสดอนดบทสอง ดวยภาระทเปนฟงกชนซงโตชากวาเชงเสน
คาตอบคอม โดยใชผลทไดจากการหาตวนอยสดในโปรแกรมท 3 ทนาเสนอในหวขอทแลว ถาจะลองแจกแจงขนตอนการเปรยบเทยบขอมลในโปรแกรมท 3 นนพบวาเปนการเปรยบเทยบขอมลทละค ๆ ซงสามารถจาลองไดดวยตนไมแบบทวภาคดงตวอยางในรปท 1–1 ซงแสดงขนตอนการนาขอมลมาเปรยบเทยบจนไดตวทนอยสด ถาลองไลการทางานของโปรแกรมท 3 จะ
6 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
พบวาลาดบของขอมลทถกนามาเปรยบเทยบเสมอนการแวะผานตนไมแบบหลงลาดบ นนคอมการเปรยบเทยบขอมลตามลาดบดงน (6,7), (8,5), (6,5), (0,2), (3,1), (0,1) และสดทาย (5,0)แลวไดคาตอบคอ 0
6 7 8 5 0 2 3 1
6 5 0 1
5 0
0
รปท 1–1 ตนไมแบบทวภาคจาลองขนตอนการหาคานอยสดในแถวลาดบ
ใหสงเกตวาตวนอยสดอนดบสองจะตองเปนขอมลตวใดตวหนง ในบรรดาตวทเคยเปรยบเทยบกบตวนอยสด แลวแพมากอน จากตวอยางพบวา ตวทเคยเปรยบเทยบกบ 0 กม 5, 1, และ 2 ดงนนเรากเพยงแตนารายการของขอมลตวทเคยเปรยบเทยบกบตวนอยสด มาหาตวนอยสด กจะไดตวนอยสดอนดบทสอง
คาถามกคอแลววธนดตรงไหน ? คาตอบอยตรงทวาจานวนขอมลทเคยเปรยบเทยบกบตวนอยสดนนมอยางมากเทากบความสงของตนไม เนองจากตนไมแบบทวภาคนไดดลดงนนจานวนขอมลทตองนาพจารณาเพอหาตวนอยสดอนดบทสองกมอยางมากเพยง log2 n ตว ดงนนถามขอมล n ตว เราสามารถหาตวนอยสด และตวนอยสดอนดบทสองไดโดยใชการเปรยบเทยบขอมลทงสนไมเกน n + log2n – 2 ครง (n–1 ครงเพอหาตวนอยสด และอกอยางมาก log2n –1 ครงเพอหาตวนอยสดอนดบทสอง)
แนนอนวาวธทอธบายมาน คงเขยนเปนโปรแกรมไดไมสนกระทดรดเทากบวธแรก ในบางกรณวธทขยายจากโปรแกรมท 3 อาจชากวาแบบลยงายๆ กได แตแนนอนวา ถาจานวนขอมลมคามาก แบบขยายจากโปรแกรมท 3 ยอมตองเรวกวาแน
Draft 1.0 : 28/10/00 20:38 : [email protected] บทท 1 บทนา 7
การหา majorityกาหนดให A เปนแถวลาดบทเกบขอมลจานวน n ตว ปญหากคออยากรวา A มขอมลทเปนmajority หรอไม (majority คอขอมลทปรากฎอยในแถวลาดบเกนครงหนงของจานวนขอมลทงหมด)
ลยหาสกครกไดคาตอบ กเพยงแตเรมพจารณาขอมลตวแรกแลวกนบดวามอยใน A เกนครงหรอไม ถาไมเกนกพจารณาตวทสองแลวนบอก ทาเชนนไปเรอยๆ จนกวาจะเจอ majority หรอเมอพจารณาหมดทกตวแลวกยงไมพบ วธนพจารณาหนงตว กตองลยนบ n รอบ เนองจากตองพจารณา n ตว กตองเสยเวลาเปนฟงกชนทแปรตาม n2 แนนอน
ถาตองการเรวกวาน จะมวธอนหรอไม เราควรสงสยกอนเลยวาม เพราะวธแรกนนเปนแบบลยทอๆ ใครๆ กคดได สงเกตไดวาเรานบจานวนตวทปรากฏของแตละขอมลไดงายขนมาก ถาเราจดเรยงลาดบขอมลในแถวลาดบเสยกอน ดงตวอยางขางลางน
2 3 2 3 4 5 3 3 2 2 2 2 1 1 2 2 2 2 3 3 3 2 2 3 2เรยงลาดบจากนอยไปมากได
1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 5
หลงจากเรยงลาดบแลวเราสามารถนบไดงายขนดงน01: isThereMajority( A[1..n] )02: {03: mergeSort( A )04:05: d = A[1], c = 106: for (i=2 to n) {07: if ( d == A[i] )08: ++c09: else {10: d = A[i]; c = 111: }12: if ( c > n/2 ) return true13: }14: return false15: }
เวลาการทางานเทากบเวลาในการเรยงลาดบขอมล บวกกบเวลาในการนบ การนบทเขยนใหดนทางานเปนฟงกชนแปรตาม n เวลาการเรยงลาดบขอมลทเราจะไดศกษาในรายละเอยดตอไปนนดวยขนตอนวธทดทสดเปนฟงกชนทแปรตาม n log2 n ดงสรปไดตอนนวาเวลาการทางานรวมถกกาหนดโดยการเรยงลาดบขอมล
8 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
มเรวกวานอกหรอไม ? (ถามอยางนกแสดงวาควรจะม) ใหสงเกตวาหลงการเรยงลาดบขอมลนนจากตวอยางทแสดงขางบนน ม 2 เปน majority และ 2 กเปนตว median ของแถวลาดบดวยลองคดดซ ตวทเปน majority กตองมปรากฎอยในแถวลาดบเกนครง เมอนามาเรยงลาดบแลวตว majority ทงหลายกจะเกาะตดกนยาวเกนครง มนจะเรมทไหนในแถวลาดบ มนกตองผานเสนแบงครงแถวลาดบ ทาใหเราไดเงอนไขจาเปนของ majority วาจะตองเปน median ดวย (แตในทางกลบกนไมจาเปนตองเปนจรง นนคอ median ไมจาเปนตองเปน majority) ดงนนเราไดขนตอนวธแบบท 3 ดงน
01: isThereMajority( A[1..n] )02: {03: c = 0, m = findMedian( A )04:05: for ( i=1 to n )06: if ( m == A[i] ) ++c07:08: return ( c > n/2 )09: }
นนคอหา median แลว เอาคาของ median ทหาไดนมาวงนบในแถวลาดบวามเกนครงหรอไม เวลาการทางานกเทากบการหา median บวกกบการวงนบในแถวลาดบ การหา median (ซงเราจะไดศกษาตอไป) นนมวธทใชเวลาเปนฟงกชนแปรตาม n แบบเชงเสน ทาใหเราสามารถหา majority ไดในเวลาเปนฟงกชนเชงเสนกบ n ดวย
แลวมวธดกวานหรอไม ? หลายคนอาจเกดคาถามในใจตอนนแลววา จะไปรไดอยางไรวามวธดกวานหรอไม กคงเปนการดถาเราจะรวาไมมวธดกวานแลว อนนตองใชการพสจนเขาชวยจงจะสามารถบอกไดวาปญหาทเผชญอยน ถาพบขนตอนวธทมประสทธภาพเทาใดจงจะถอวาดทสด สาหรบปญหา majority น เราพบขนตอนวธ (หา median + นบ) ทใชเวลาเปนฟงกชนเชงเสนกบ n แลว ถามวาเรานาจะพบขนตอนวธอนทใชเวลาเปนฟงกชนทโตชากวา n หรอไม อาทเชน n หรอ log n หรอไม คาตอบคอไมมทาง เพราะการทเราจะรวาแถวลาดบทมขอมล n ตวม majority หรอไมนนอยางนอยเรากตองดขอมลในแถวลาดบอยางนอย n/2 ตว (เพอจะไดสรปวาเปน majority) ซงกฟงกชนเชงเสนกบ n ดงนนเราสรปไดวาเราเจอขนตอนวธทดเยยมแลว(ซงกคอ หา median + นบ)
ขอเตอนวาอยาเพงดใจมากเกนไปทพบขนตอนวธทดสด เพราะไมไดหมายความวาจะไมมวธอนอกซงใชเวลาเปนเชงเสนเหมอนกน แตซบซอนนอยกวา มความชนของเสนทลาดกวา หมายความวาทางานไดเรวกวา
Draft 1.0 : 28/10/00 20:38 : [email protected] บทท 1 บทนา 9
ยงมอกวธหนงในการแกไขปญหา majority น ทออกพกลๆ หนอย คอแทนทจะไปหา medianใหเสยเวลาแลวคอยมานบ ทาไมเราไมเสยงสมขอมลมาหนงตวในแถวลาดบ แลวมานบเลย กคงมคนแยงทนทวาวธนมโอกาสผด แนนอนวธนมโอกาสผด หรอจะพดอกนยหนงกได (แบบเขาขางตวเอง) วาวธนกมโอกาสถก ดงนนสงทนาสนใจกคอวาโอกาสถกเปนเทาใด เราลองมาแยกเปนสองกรณ
1. กรณทแถวลาดบ A ไมม majority : กรณนสบายใจไดเลยวาจะตองไดคาตอบทถกแนนอนเพราะไมวาเราจะสมขอมลใดมานบ กยอมนบแลวไดจานวนไมเกนครง (เพราะไมมตวไหนเกนครง)
2. กรณทแถวลาดบ A ม majority : กรณนจะพบวาเรามโอกาสเกนครงทขอมลทถกสมเลอกมานนเปน majority เพราะขอมลทเปน majority มเกนครง
เหนอยางนแลวยงกงวลอยหรอเปลา ถาเปนนกพนนกคงยอมเสยงใชวธน เพราะเขยนกงาย รบรองวาทางานเรวแนๆ (แค สม+นบ) แถมยงมโอกาสไดคาตอบถกมเกนครง เนองจากเราไมใชนกพนน เรากไมอยากใชวธน แตวาคนสวนใหญเชอเรองดวง เชอวาคนๆ หนงเกดมาคงไมโชครายตลอดชวตหรอก ทาไมเราไมทาการ "สม+นบ" แบบนสก 30 ครงด ถามสกหนงครงในคาตอบบอกวา "ม majority" เรากสบายใจวามแน (เพราะไดโชคดสมพบ majority จรงๆ จงนบแลวเกนครง) แตถาทง 30 ครงมแตคาตอบวา "ไมม majority" เรากนาจะเชอวาเราคงไมโชครายขนาดวาความจรงม majority แตสมเทาไรกไมพบหรอก และยงถาเราเปนนกสถตเคยเรยนมาวาโอกาสถกตอครงมเกนครง แสดงวาโอกาสทจะผดทง 30 ครง (คอซวยจรง !!!) มนอยกวา 1ในพนลาน ( 2–30 ) ทงนเนองจากการทดลองแตละครงไมขนตอกน วาไง คราวนนาใชวธ "สม+นบ k ครง" หรอไม ถายงไมกลาเสยง ลองให k เปนสก 50 แลวคานวณความโชครายทจะไดคาตอบผดดส จะพบวามนอยกวาโอกาสทวงจรอเลทรอนกสของเครองคอมพเวอตรจะทาผดพลาดเสยอก
เราจะไดศกษาขนตอนวธแบบสมในลกษณะนกนตอไปในวชาน ซงพบวามใชกนในทางปฏบตจรงๆ
10 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
การใหสจดบนกราฟดวยสสามสมาดกนอกสกปญหาหนง ปญหานตองการคาตอบแควาเราสามารถใหสจดบนกราฟทใหมาดวยสสามสไดหรอไมได (การใหสจดบนกราฟทถกตองคอจดทมเสนเชอมตอกนตองไมมสเดยวกน) คาตอบของปญหานงายมากๆ กคอตองการรแควาได หรอไมได เราจะมขนตอนวธอยางไรในการหาคาตอบ
วธงายๆ ทอๆ กคอลยใหสมนทกรปแบบ ถาลองใหทกรปแบบแลวไมมแบบไหนถกตองเลย กแสดงวาใหสไมได แตถาเจอสกแบบทใหสได กหยดการทางานแลวกตอบวาใหสได กเทานนคาถามทตามมากคอ วธนจะตองลองใหสกแบบจงจะไดคาตอบ จานวนการใหสนนกคงขนกบลกษณะของกราฟทกาหนดมาให เอาเปนวาเราอยากรกรณเลวสดกแลวกน (ซงกคอกรณทใหสกราฟไมได กวาจะสรปไดกตองลองทกแบบ) ถากราฟม n จด ในกรณเลวสดจะตองลอง 3n
แบบ (เพราะหนงจดใหสไดสามส n จดกใหสได 3n แบบ) วเคราะหแลวไดคาตอบแบบนกคงตองรองวาไมไหว มากเกนไป เพราะถากราฟทใหมามสก 50 จด ตองลอง 350 แบบ ลองคดดคราวๆ กได ถาใชคอมพวเตอรลองใหส สมมตวาสามารถใหทดสอบการใหสไดพนลานรปแบบใน 1 วนาท กยงตองรอ 350 / 109 ซงมากกวา 1014 วนาท หรอมากกวา 3 ลานป !!!
บางคนอาจจะทนอานมาถงตรงนไมไหว เพราะตองการแยงวา ทาไมไปลยแบบทอๆ ตง 3n
แบบเลา กเพยงแคดซวา ในกราฟทใหมานมสจดไหนทมเสนเชอมตอกนถงกนหมดหรอไม(หรอพดวามกราฟยอยแบบบรบรณขนาดสจดหรอไม) ถามกแสดงวาใชสามสไมพอแนๆ(เพราะกราฟยอยแบบบรบรณขนาด k จดตองการ k ส) การลองลยหยบจดสจดจาก n จดมาทดสอบวาเปนกราฟยอยแบบบรบรณหรอไมนน ทดลองเพยง C(n,4) = n(n–1)(n–2)(n–3) / 24แบบ ซงนอยกวา 3n มากมายมหาศาล (n = 50 เราทดลองเพยง 2 แสนกวากรณเทานน แคดดนวกเสรจแลว) ขาวรายกคอวาถาทดลองหมดทกกรณแลว ไมปรากฎพบกราฟยอยแบบรบรณขนาดสจดเลย กยงสรปไมไดวาใชสามสได ดกราฟวงลอในรปท 1–2 เปนตวอยาง
รปท 1–2 กราฟวงลอหาซตองใชสสถงพอ
Draft 1.0 : 28/10/00 20:38 : [email protected] บทท 1 บทนา 11
ขนตอนวธหนงทไดผลดมากในการหาคาตอบของปญหานกคอการใชกลวธการยอนรอย (ซงเราจะไดอธบายกนละเอยดตอไป) วธนจะใหคาตอบรวดเรวมากสาหรบกราฟทวไปๆ แตกจะมกราฟบางแบบทวธแบบนหาคาตอบไดในเวลาทชามากจนรอไมไหวเหมอนกน
ใครจะลองคดออกแบบขนตอนวธเพอแกปญหานตอนนกได แตขอบอกไวตอนนเลยวาปญหาการใหสสามสบนกราฟนน ในปจจบนยงไมมใครคดวธทประกนวาไดคาตอบในเวลาอนรวดเรวในกราฟทกๆ กรณได เปนปญหาหนงทจดอยในกลมปญหาท "สงสยวายาก" ทเขยนวาสงสยนกเพราะวายงไมมใครพสจนไดวามนยาก และกยงไมมใครหาขนตอนวธททางานไดในเวลาอนรวดเรวเพอแกปญหาดงกลาว ปญหากลมนเปนปญหาทมมาก พบในปญหาทตองแกอยจรงๆ ในหลายๆ วงการ จดเปนกลมปญหาทนาสนใจ ซงเราจะไดอธบายกนในภายหลง
การออกแบบอลกอรทมจากตวอยางทไดแสดงใหเหนนน พอจะสรปขนตอนการออกแบบและวเคราะหอลกอรทมสาหรบปญหาทไดรบดงน
� ตองเขาใจตวปญหาอยางถองแท อะไรคอ input มขนาดใหญไดมากเทาไร (10, 1000, 106,1020,…) อะไรคอ output ตองการคาตอบเดยว หรอทกคาตอบ ตองการคาตอบทดทสดหรอแคคาตอบดๆ กพอ ตองการคาตอบทถกตองแนๆ หรอยอมเสยงผดไดแตโอกาสนอยตองการคาตอบเรวขนาดไหน (ภายใน 1 วนาท ภายใน 1 นาท ภายใน 1 เดอน…) ปญหานตองแกไขหาคาตอบถขนาดใด (ครงสองครงในชวต หรอทกๆ นาท) ปจจยเหลานจะเปนตวชวยกาหนดแนวทางการออกแบบ
� ปญหาทเราพบอยนน เหมอนหรอสามารถแปลงไปเปนปญหาทมใหพบเหนใน "ทองตลาด" (เชนจากหนงสอ วารสาร หรออนเตอรเนต) หรอไม ถามจะไดไมตองเสยเวลาคด(แลวเอาเวลาไปคดแกปญหาทไมมใครแกไขมากอนจะดกวา) ถาไมเหมอนแลวปญหาของเราเปนกรณพเศษ หรอกรณทวไปของปญหาใน "ทองตลาด" หรอเปลา ถาใช อยางนอยกมแนวทางการแกปญหาอยบาง อยางไรกตามขอเนนวาปญหาสวนใหญทจะพบในวชานเปนปญหา "ทองตลาด" จดประสงคของวชานกอยากใหนกเรยนสามารถหาแนวทางแกไขปญหาได โดยไมตองไปดใน "ทองตลาด"
12 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
� การออกแบบอลกอรทมนนคงตองทากนหลายๆ รอบ จนกวาเราจะไดอลกอรทมทมประสทธภาพทเรายอมรบ (หรออาจจะเลกเมอหมดแรง หรอหมดเวลา หรอสนหวง …) การวเคราะหประสทธภาพมกนาไปสการปรบปรงอลกอรทมทออกแบบไวใหดขน เพราะเราไดรจดทเปนตวกาหนดประสทธภาพของอลกอรทม
� ตองเลอกใชโครงสรางขอมลทเหมาะสมดวย เพราะอลกอรทมทตองมการจดเกบและจดการขอมลนน วธการจดเกบและจดการจะสงผลโดยตรงตอประสทธภาาพทงในเชงเวลาและเนอทหนวยจาทใชของอลกอรทม
� เราควรจะรวาปญหาทเราเผชญอยนนมความยากงายเพยงไร ถาเราสามารถพสจนความยากของปญหาวาอยในกลมใด กจะทาใหเราเลอกกลวธในการออกแบบทเหมาะสม
� ถางายมกใชกลวธการแบงแยกและเอาชนะ (divide and conquer) กาหนดการพลวต(dynamic programming) หรออลกอรทมแบบตะกลาม (greedy algorithm) แตถาตองการใหเรวขนไปอกอาจใชอลกอรทมเชงสม (randomized algorithms)
� ถายากมกใชการคนเชงการจด (combinatorial search) เชนการยอนรอย (back-tracking) หรอการขยายและจากดเขต (branch and bound) ถาลดความทะเยอทะยานของคาตอบลง เชนตองการคาตอบทดๆ กพอไมจาเปนตองดทสด กอาจใชการคนเฉพาะท (local search) หรออลกอรทมเชงประมาณ (approximation algorithm) เขาชวย
� แตไมวาปญหาจะงายหรอยาก ถาเปนปญหาทมขนาดเลกจรงๆ บางทลยเอา (แบบทเขาเรยกกนวา brute force) กเพยงพอ
เนอหาทจะเรยนในวชานกลาวโดยสรป เราจะมาเรยนสามเรองดวยกนในวชาน คอการวเคราะหอลกอรทม การออกแบบอลกอรทม และการศกษาความซบซอนของปญหา
การวเคราะหอลกอรทมนนเราจะเนนทประสทธภาพเชงเวลาของอลกอรทม (จะเนนเรองเนอทหนวยความจาบางเปนครงคราว) การวเคราะหประสทธภาพเชงเวลากคอการนบจานวนคาสงท
Draft 1.0 : 28/10/00 20:38 : [email protected] บทท 1 บทนา 13
ถกใชงานระหวางการแกไขปญหา เราจะนบอยางคราวๆ (จะเหนตอไปวาคราวๆ จรงๆ) เพยงพอใหเราสามารถเปรยบเทยบอลกอรทมในแงของการเตบโตของเวลากบขนาดของปญหา
จากนนเราจงมาศกษากลวธมาตรฐานทวไป ในการออกแบบอลกอรทม อนประกอบการแบงแยกและเอาชนะ กาหนดการพลวต อลกอรทมแบบตะกลาม การคนเชงการจดในกราฟปรภมสถานะ การยอนรอย การขยายและจากดเขต อลกอรทมเชงสม และอลกอรทมเชงประมาณ แตละกลวธจะเหมาะกบปญหาในแตละลกษณะ การเรยนในหวขอเหลานจะเปนการเรยนดวยตวอยาง โดยนาเสนอปญหา "ของเลน" ฟงงายๆ แตวธแกไขปญหาและการวเคราะหบางทอาจยงยาก ปญหา "ของเลน" เหลานฟงดแลวรสกเปนปญหายกเมฆขนมา แตในโลกแหงความเปนจรงแลว มใหพบใหเหน และตองการวธแกไขกนจรงๆ และในชวงนเราจะนาเสนอโครงสรางขอมลใหมๆ (นอกเหนอจากทไดศกษากนมาในวชาโครงสรางขอมลเบองตน) เสรมในกรณทประสทธภาพของอลกอรทมทนาเสนอนนขนกบโครงสรางขอมลทเหมาะสม
เราจะปดทายเนอหาทจะนาเสนอดวยการจดกลมการจาแนกปญหาตามความซบซอน (หรอจะพดวาตามความยากงาย ) ของปญหา โดยจะเนนกลมปญหาหนงทเรยกวา NP บรบรณ (NP-complete) ซงเปนกลมปญหาทนาสนใจเพราะวาเปนกลมปญหาทพบมากในทางปฏบต อกทงเปนกลมปญหาททกคนสงสยวายาก แตยงพสจนไมได อกทงทกๆ ปญหาในกลมนมความซบซอนเทาเทยมกนทงหมด ถาใครพบอลกอรทมทมประสทธภาพทแกปญหาหนงในกลมน กหมายความวาไดพบวธแกทกๆ ปญหาในกลมดวย (คนๆ นนดงแนๆ )
สงทจะไมสนใจในวชานเนองจากประสทธภาพการทางานของโปรแกรมนนขนกบปจจยหลายๆ อยางมาก ทเราจะสนใจกคออลกอรทมของโปรแกรม หรอจะพดวาเปนแนวคด หรอ "กน" การทางานของโปรแกรมเราจะไมมาสนใจหรอโตเถยงกนในประเดนตอไปน ถงแมวาจะมผลโดยตรงกบเวลาและปรมาณหนวยความจาทใช
� ใชภาษาคอมพวเตอรนดกวา จะไมมาสนใจหรอกวาใช machine code เรวสด นาใชคาสงMMX หรอคาสง Streaming ใหมๆ ของ Pentium III หรอวาใช Java แลวชาแน เวลาการทางานกไมแนนอน ใช C ดกวา อะไรทานองน
� ใชตวแปลของบรษท A ดกวาของบรษท B อนนเราจะไมมาโฆษณาผลตภณฑ
14 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
� ใชคาสงทเหมาะสม เรองจกจกเกยวกบคาสงในภาษาอาทเชน ++k จะเรวกวา k++ นดนงเปนตน
� ใชความรเรองสถาปตยกรรมคอมพวเตอร ในวชานเราจะพดแตอลกอรทมทมหนวยประมวลผลเพยงตวเดยว อกทงจะไมสนใจเรองทไปขนกบสถาปตยกรรมคอมพวเตอรอาทเชนการอางองหนวยความจาทตาแหนงทหาร 4 ลงตว จะเรวกวาทหารไมลงตว หรอการอางองหนวยความจาในอาเรยสองมตแบบใช for loop 2 loops ซอนกนแลวเปลยน rowกอน column จะชากวาเปลยน column กอน row เพราะเรองของ data cache เปนตน
� ใชลกเลนการเขยนโปรแกรม โปรแกรมททางานตามแนวคดของอลกอรทมเดยวกน อาจมไดหลากหลายรปแบบ นกเขยนโปรแกรมสามารถใชลกเลนมากมายเพอใหโปรแกรมของตวเองทางานไดเรวกวา อาทเชนการใช sentinel การเปลยนการเรยกแบบ recursiveเปนแบบวงวนธรรมดา เปนตน ใครสนใจเรองพวกนไปหาอานในหนงสอ ProgrammingPearl และ More Programming Pearl ของ Jon Bentley ได (หนงสอเกาหาซอลาบาก แตหองสมดภาควชาฯ มใหยม)
ขอยาอกทวาปจจยตางๆ ทนาเสนอมาขางบนนลวนมสาคญอยางยงตอประสทธภาพของโปรแกรมอยางมาก แตสงทเราตองการเนนในวชานคออลกอรทมหรอแนวคดการทางานของโปรแกรม ตวอลกอรทมนมผลโดยตรงอยางมหาศาลมากกวาเรองทพดถงเสยอก ซงสามารถแสดงใหดไดวาอลกอรทมทดแตเขยนโปรแกรมกระจอก จะไดผลทดกวาอลกอรทมกระจอกแตเขยนโปรแกรมสดยอด (แตความจรงเรานาจะมความสามารถทงออกแบบอลกอรทมทเจงและเขยนโปรแกรมไดสดยอดดวยนะ)
พนฐานทนกเรยนตองมขอเนนตรงนเลยวาผทจะเรยนวชานใหไดผลทด ตองหมนปฏบต พนฐานทนกเรยนตองมกคอตองผานวชาการเขยนโปรแกรมคอมพวเตอร วชาโครงสรางขอมล และวชาคณตศาสตรดสครตแทบวาคณจะขาดอยางใดอยางหนงไมไดเอาเสยเลย จะออกแบบอลกอรทมทดไดกตองวเคราะหดวยคณตศาสตรเปน ตองเลอกใชโครงสรางขอมลทเหมาะสม เพราะมผลโดยตรงตอประสทธภาพการทางาน และแนนอนวาตองเปลยนอลกอรทมทเปนแนวคดใหเปนรปธรรม
Draft 1.0 : 28/10/00 20:38 : [email protected] บทท 1 บทนา 15
โดยการเขยนโปรแกรมได เราจะไมจากดภาษาคอมพวเตอรทจะใชกนในวชาน ใชภาษาคอมพวเตอรใดกไดทเหมาะสม (กแนะนา C, Pascal, หรอ Java) … เอาละ ขมามากพอแลว ถายงคดจะเรยนวชานตอ (ไมคดลดหรอถอนวชาน) กเรมกนเลย
16 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:38 : [email protected]
Draft 1.0 : 30/10/00 4:40 : [email protected] 17
บทท 2
กอนจะเขาเรองการวเคราะหและออกแบบอลกอรทม บทนจะขอสรางความเขาใจและสรางความคนเคยเกยวกบลกษณะของปญหาทเราจะไดพบกนในวชานวามลกษณะใดกนบาง จะไดอธบายความหมายของคาวาตวอยางปญหา ขนาดของตวอยางปญหา และคาวาอลกอรทมในบทนดวย
ปญหาคาวาปญหา (problem) ทเราจะพดกนในวชานเปนปญหาทคานวณหาคาตอบได (computational problem) หรออกนยหนงกคอปญหาทใหคอมพวเตอรแกไขหาคาตอบใหได อาทเชนปญหาการหาตวนอยสด ปญหาการทดสอบจานวนเฉพาะ ปญหาการใหสจดของกราฟ ปญหาการหา majority การเรยงลาดบขอมล และอนๆ อกสารพด การบรรยายลกษณะของปญหานนจะตองระบลกษณะของขอมลขาเขา และผลทตองการใหชดเจน เชน
ปญหาการหาคานอยสด :ขอมลขาเขา : เซตของจานวนจรง S = { a1 , a2 , …, an }ผลทตองการ : ak โดยท ak � S และ ak � aj สาหรบคา j = 1, 2, …, n
ปญหาการทดสอบความเปนจานวนเฉพาะ :ขอมลขาเขา : จานวนเตมบวก p, p > 1ผลทตองการ : จรง ถา p เปนจานวนเฉพาะ, เทจ ถา p เปนจานวนประกอบ
ปญหาและอลกอรทม
18 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:40 : [email protected]
ปญหาการใหสจดของกราฟ :ขอมลขาเขา : กราฟ G = (V, E ) และจานวนเตมบวก kผลทตองการ : จรง ถาเราสามารถใหสจดใน G ดวยสอยางมาก k ส
เทจ ถาไมมวธใหสจดใน G ดวยสอยางมาก k ส
ปญหาทเราจะมาหาวธแกกนในวชานพอแบงหมวดหมไดดงน
1. ปญหาของเซต ลาดบ และสตรง (set sequence and string problems) เชนการเรยงลาดบ (sorting) การคน (searching) การเลอก (selection) การแบงสวน (partitioning) เปนตน
2. ปญหาเชงจานวน (numerical problems) เชนการทดสอบความเปนจานวนเฉพาะ (primality testing) การแยกตวประกอบ (factorization) การยกกาลง (exponentiation) การคณเมตรกซ (matrix multiplication) การสรางจานวนสม (random number generation) เปนตน
3. ปญหาทางกราฟ (graph problems) เชนสภาพเชอมโยง (connectivity) ตนไมแบบทอดขามเลกสด (minimum spanning tree) วถสนสด (shortest path) การไหลในขายงาน (network flow) การเดนทางของพนกงานขาย (travelling salesperson) การใหสกราฟ (graph coloring) เปนตน
4. ปญหาทางเรขาคณตเชงคานวณ (computational geometry problems) เชนเปลอกนน (convex hull) จดใกลกนทสด (closest point) การสามเหลยม (triangulation) เปนตน
เราจะคอยๆ พบรายละเอยดตางๆ ของแตละปญหาในบทถดๆ ไป
ตวอยางปญหาถาอลกอรทม A ถกออกแบบมาไวแกปญหา P สงท A รบเปนขอมลขาเขากคอขอมลขาเขาทเปนไปไดของ P เราเรยกขอมลขาเขาหนงๆ ของ P วาเปนตวอยางปญหา (problem instance) หรอบางทเรยกวาตวอยางขอมลขาเขา (input instance) หรอบางครงเรยกสนๆ วาตวอยาง (instance) เฉยๆ เชน
Draft 1.0 : 30/10/00 4:40 : [email protected] บทท 2 ปญหาและอลกอรทม 19
� {3, 4, 5, 7, 30, 0, 2, 3, 5, 6} เปนตวอยางหนงของปญหาการหาคานอยสด
� 137466234876298251 เปนตวอยางหนงของปญหาการทดสอบความเปนจานวนเฉพาะ
� กราฟ G = (V, E) โดยท V = {1,2,3,4,5,6}, E = { (1,2), (1,4), (1,5), (2,3), (2,4), (2,5), (3,4), (5,6) } ซงแทนกราฟในรปท 2–1 และ k = 3 กเปนตวยางหนงของปญหาการใหสจดของกราฟ
1
2 3
4
56
รปท 2–1 กราฟในตวอยางของปญหาการใหสกราฟ
ขนาดของตวอยางปญหาเมอเราพดวา f(n) เปนฟงกชนทแทนประสทธภาพของอลกอรทมหนงนน ตว n กคอขนาดของตวอยางปญหาทอลกอรทมนนรบไปหาคาตอบ ขอเนนวา n คอขนาดของตวอยางปญหา ไมใชคาของตวอยางปญหา หนวยของขนาดทวาน จะเปนบต ไบต เวรด ตว กอน จด เสน อะไรกแลวแตสะดวก เชนรายการ {3, 4, 5, 7, 30, 0, 2, 3, 5, 6} มขนาด 10 ตว หรอจะพดวาใชทเกบ 10 เวรดกได เลข 13746286234876298251 มขนาด 20 หลกฐานสบ หรอจะพดวา 64 บตฐานสอง (เพราะตองใชทเกบ 1 + �log213746286234876298251� = 64 บต) กได และกราฟในรปท 2–1มขนาด 6 จด 8 เสน จากสามตวอยางขางบนน พอสรปขนาดของตวอยางปญหาไดดงน
ปญหาการหาคานอยสด :ขอมลขาเขา : เซตของจานวนจรง S = { a1 , a2 , …, an }ขนาดของตวอยางปญหา : n
ปญหาการทดสอบจานวนเฉพาะ :ขอมลขาเขา : จานวนเตมบวก p, p > 1ขนาดของตวอยางปญหา : 1 + �log2 p�
ปญหาการใหสจดของกราฟ :ขอมลขาเขา : กราฟ G = (V, E ) และจานวนเตมบวก k
20 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:40 : [email protected]
ขนาดของตวอยางปญหา : V และ E
บางคนอาจสงสยวาทาไมตองมาจจกบจานวนหลก จานวนบตในปญหาการทดสอบจานวนเฉพาะดวย ในขณะทไมเหนสนใจวาจะใชกบตเลยสาหรบจานวนในเซต S ของปญหาการหาคานอยสด การระบลกษณะของขอมลขาเขาของปญหานน ถาจะใหละเอยดตองบอกขนาดของขอมลดวย อาทเชนจานวนเตมแตละจานวนทใหมานนจะมขนาดไมจากดหรอเปลา (หมายถงกหลกกได) แตโดยทวไปแลวบางทถอวาเปนทรกน โดยไมตองระบอยางเดนชด เชนปญหาการหาคานอยสดนน แตละจานวนในเซต S มกมขนาดใหญไมมาก คาวา "ใหญไมมาก" ในทนกมกตความวาไมมากเกนทเกบไดในหนงเวรดของเครองคอมพวเตอร นนคอ "เลก" พอทจะทาใหการประมวลผล เชนบวก ลบ คณ หาร เปรยบเทยบ… จานวนดงกลาวใชเวลาคงตวไมเปลยนแปลงตามคาของจานวนนน (หนงเวรดของคอมพวเตอรในปจจบนกสไบต ดงนนคาวา "เลก" ในทนกเกบจานวนเตมไดเปนหลายพนลานทเดยว)
แตวาถาเปนปญหาการทดสอบจานวนเฉพาะละก สวนใหญกตองถอวาเปนจานวนทมคามาก โดยจานวนหลกของ p กจะเปนตวกาหนดประสทธภาพ ถอกนไดเลยวาถาเปนปญหาเชงจานวน ซงเปนปญหาประเภททยงเกยวกบการประมวลผลจานวนโดยตรง จะถอวา เราจะไมจากดจานวนหลกของขอมลขาเขาของปญหา แตถาเปนปญหาทยงเกยวกบเซตหรอรายการของจานวนเชน การเรยงลาดบขอมล การหาผลรวมของขอมล การผสานรายการขอมล การหาคานอยสด การเลอกตวมธยฐานของกลม เปนตน จะถอวา จานวนในเซตหรอรายการเหลานนมขนาด "เลก"
ทตองมาเนนในประเดนนเพราะหากคดขนาดของตวอยางปญหาผดไป จะสงผลโดยตรงตอการตความผลลพธของการวเคราะหอลกอรทม มาดตวอยางงายๆ ตอไปน สมมตวาเราออกแบบวธการทดสอบจานวนเฉพาะโดยใชการลองหารดอๆ ทอๆ เลย คอถาอยากจะทดสอบวา p เปนจานวนเฉพาะหรอไม กลยทดลองหาร p ดวย 2, 3, … ไปเรอยๆ จนถง p–1 ถาพบตวทหาร pลงตวกแสดงวา p เปนจานวนประกอบ แตถาทดลองหารทง p–2 ตวแลวไมมตวใดหาร p ลงตวเลย กแสดงวา p เปนจานวนเฉพาะ แนนอนวาการทางานจะเปน loop หมนลองหารอยางมาก p–2 รอบ ถากาหนดใหการทดสอบวาหารลงตวหรอไมนนใชเวลาคงตว แสดงวาประสทธภาพการทางานของอลกอรทมนยอมใชเวลาในกรณชาสดเปนฟงกชนเชงเสนของ p การพบวาอลกอรทมใชเวลาเปนเชงเสนนน จะรสกวาเรว แตอยาลมมนเปนเชงเสนกบคาของจานวนทมาทดสอบจานวนเฉพาะ ไมใชขนาดของจานวนทมาทดสอบ สงทเราอยากรกคอวาถาเพมขนาด
Draft 1.0 : 30/10/00 4:40 : [email protected] บทท 2 ปญหาและอลกอรทม 21
ของ p ไปอก 1 หลก (ไมใชเพมคาของ p ไปอก 1) แลวจะเสยเวลาเพมขนเทาใด นนหมายความวาเราตองการฟงกชนทแปรตามขนาดของ p เนองจากอลกอรทมนเปนฟงกชนเชงเสนของคา pแสดงวาเปนฟงกชนเลขชกาลงของขนาดของ p ( เพราะ p = 2lg p ) กจะใหความรสกทนทวาการเพมขนาดของ p ไปอก 1 บตจะเสยเวลาเพมขนอก 1 เทาตว แสดงวาเปนวธทชาเกนไป (ลองคดดวาจะเสยเวลาเทาไรในการทดสอบเลข 100 บต ซงถอวาเลกมากสาหรบปญหาการทดสอบความเปนจานวนเฉพาะททากนทกวนน ซงเราจะไดศกษากนในบทหลงๆ )
อลกอรทมในเมอเราจะวากนถงเรองอลกอรทมกนในทงวชาน กคงตองใหนยามคาวาอลกอรทมกนเสยหนอย อลกอรทม (ศพทราชบณฑตใชคาวา "ขนตอนวธ" แตจะขอใชทบศพท เพราะเปนคาทมาจากชอคน) หมายความถงลาดบของขนตอนเชงคานวณซงแปลงตวอยางขอมลขาเขาของปญหา ไปเปนผลลพธทตองการ ขอเนนวาขนตอนตางๆ ในอลกอรทมตองเปนขนตอนทใชหลกการคานวณ หรอจะพดงายๆ กคอขนตอนตางๆ สามารถแปลงไปเปนคาสงททางานดวยเครองคอมพวเตอรได (ดงนนอะไรทใชอารมณกไมนาจดเปนอลกอรทม) ถาเราทาตามขนตอนในอลกอรทมแลว จะตองทาเสรจ และไดคาตอบทถกตอง สาหรบทกๆ ตวอยางปญหา ดงนนเราจะไมยอมรบอลกอรทมทการทางานตดอยในวงวนไมสนสด หรออลกอรทมประเภทททางานแลวไดคาตอบถกบาง ผดบาง ดงนนจดประสงคของการออกแบบอลกอรทมสาหรบแกไขปญหาหนงๆ กคอการทางานทถกตอง และการทางานทมประสทธภาพ
เราสามารถบรรยายอลกอรทมไดดวยภาษาเขยน บรรยายไปเปนยอหนาสนๆ ไดใจความ และเขาใจถงกนหรอแนวคดการทางาน อาทเชนอาจบรรยายการเรยงลาดบขอมลแบบผสานไดดงน
การเรยงลาดบขอมลแบบผสานนนอาศยการแบงชดขอมลทตองการเรยงลาดบออกเปนสองชดยอยขนาดเทาๆ กน จากนนนาขอมลทงสองชดยอยไปเรยงลาดบขอมล (ซงกใชวธแบบผสานเหมอนกน) เมอไดขอมลสองชดยอยทเรยงลาดบแลว จงนามาผสานกนเพอไดขอมลชดใหญทเรยงลาดบทงหมด
บางทเราอาจบรรยายอลกอรทมดวยรหสเทยม (pseudo code) ซงเขยนคลายโปรแกรมภาษาคอมพวเตอร แตละเลยเรองจกๆ จกๆ ของตวภาษาเพอความกระทดรด เชนไมตองประกาศ
22 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:40 : [email protected]
ประเภทตวแปร เปนตน ซงอาจปนดวยคาบรรยายไดสาหรบกรณของคาสงทงายพอ แตไมตองการลงรายละเอยด อาทเชนอาจบรรยายการเรยงลาดบขอมลแบบผสานไดดงน
01: MergeSort( A[], left, rght )02: {03: if ( left < rght ) {04: m = (left + rght) / 2;05: MergeSort( A, left, m );06: MergeSort( A, m+1 , rght );07: Merge( A, left, m, rght );08: }09: }
หรอบางอาจเขยนแบบน01: MergeSort( A[left..rght] )02: {03: if ( left < rght ) {04: m � (left + rght) / 2;05: MergeSort( A[left.. m] );06: MergeSort( A[m+1..rght] );07: A[left..rght] � Merge( A[left..m], A[m+1..rght]);08: }09: }
คาสงทงหลายทใชกจะเปนคาสงพนๆ ทพบเหนไดในภาษาคอมพวเตอรทวไป สาหรบในเอกสารชดน จะใชคาสง และ operator ตางๆ ทคลายคลงกบทพบใชภาษา C, C++ หรอ Java ซงเปนทคนเคยของนกเรยนอยแลว โดยการสงผานขอมลตางๆ ระหวางฟงกชนนนกกระทาในลกษณะทมประสทธภาพ ตวอยางเชนรหสเทยมของ mergesort ทแสดงใหเหนขางบนน การสงแถวลาดบ A เมอมการเรยกฟงกชนนนกจะเปนการสงตาแหนงไป ไมไดตองเสยเวลามานงทาสาเนาทงแถวลาดบกอนสงไป อนนเปนสงทเปนไปไดในทางปฏบตทเราจะตองเขาใจดวยระหวางการวเคราะหอลกอรทม
อนงคาวา "algorithm" มาจากชอของนกคณตศาสตรชาวเปอรเซย Abu Ja'far Muhammad ibn Musa al-Khwarizmi (ดรปท 2–2ประกอบ) ผเขยนหนงสอเกยวกบเรองของจานวนของชาวฮนดและอาหรบ "Algoritmi de numero Indorum" (ภาษาลาตน) ซงแปลวา "Al-Khwarizmi on the Hindu Art of Reckoning" (ภาษาองกฤษ) เขาเปนผเรมใชเลขศนยในระบบทศนยม นอกจากนคาวา "algebra" กมาจากคาวา "al-jabr" ซงเปนคาในชอหนงสอทางพชคณตของเขาอกเลมหนงเชนกน
รปท 2–2 Al-Khwarizmi(780-850)
Draft 1.0 : 30/10/00 4:40 : [email protected] บทท 2 ปญหาและอลกอรทม 23
แบบฝกหด1. จงบรรยายปญหาเชงคานวณตอไปน ดวยลกษณะของขอมลขาเขา และผลทตองการ (ปญหาใดทไมเคยไดยนมากอน กใหไปคนควาตามแหลงขอมลอนประกอบ)ก) ปญหาการเดนทางของพนกงานขาย (traveling salesperson)ข) ปญหาตนไมแบบทอดขามเลกสด (minimum spanning tree)ค) ปญหาตวหารรวมมาก (greatest common divisor)ง) ปญหาเปลอกนน (convex hull)จ) ปญหาการสามเหลยม (triangulation)ฉ) ปญหาการจบคสตรง (string matching)ช) ปญหาเซตอสระใหญสด (independent set)ซ) ปญหาผลรวมของเซตยอย (sum of subset)ฌ) ปญหาการแบงสวนเชงเสน (linear partition)
2. จงบอกตวกาหนดขนาดของตวอยางปญหา ของปญหาตางๆ ในขอท 1
3. จงบรรยายอลกอรทมการเรยงลาดบขอมลแบบฟอง (bubble sort) ดวยรหสเทยม
4. จงบรรยายอลกอรทมการเรยงลาดบขอมลแบบฟอง ดวยขอความไมเกน 3 บรรทด
5. จงบรรยายอลกอรทมการคนแบบทวภาค (binary search) ดวยขอความไมเกน 3 บรรทด
6. ใชแหลงขอมลอนเพอบรรยายลกษณะของปญหาดงตอไปนก) Satisfiabilityข) Maximum 2-Satisfiabilityค) Bin packingง) Integer programming
7. ใชแหลงขอมลอนเพอบรรยายลกษณะของปญหาดงตอไปนก) Halting problemข) 3x+1 problemค) Word correspondence problemง) Hilbert’s tenth problem
24 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:40 : [email protected]
Draft 1.0 : 24/10/00 0:11 : [email protected] 25
บทท 3
จากตวอยางทไดนาเสนอในบทท 1 เราไดแสดงใหเหนถงเวลาการทางานของโปรแกรมทเปนฟงกชนของจานวนขอมล เชนการหาคานอยสด การหา majority เปนตน แนนอนวาถาจานวนขอมลมากขน ยอมตองกนเวลาการทางานมากขนตาม แตจะมากขนแคไหน เทาไรนน กคงขนกบลกษณะของฟงกชน สงทเราจะสนใจกนในบทนกคอการเตบโตของฟงกชน ทจะใชเปนตวเปรยบเทยบประสทธภาพของอลกอรทม โดยจะพจารณาการเตบโตของฟงกชนเฉพาะกรณทขอมลมจานวนมากๆ เพอศกษาภาพรวมการเตบโต โดยจะใชสญกรณจานวนหนงทชวยบรรยายลกษณะการเตบโต เพอใชในการเปรยบเทยบไดงาย
อตราการเตบโตหากยอนกลบไปดตวอยางการหาคานอยสดในแถวลาดบในบทท 1 ทเราแสดงโปรแกรมตวอยางใหสามโปรแกรมนน พบวามประสทธภาพเชงเวลาดงนโปรแกรมท 1 T1(n) = t5n + t6(n–1) + t3 + t7
โปรแกรมท 2 T2(n) = t11n + (t12 + t13)(n–1)
โปรแกรมท 3 T3(n) = t22n + (t22+t23+t24+t25+t26)(n–1)
ทงสามโปรแกรมนมฟงกชนทมการเตบโตเปนเชงเสนดวยความชนทแตกตางกน ฟงกชนจรงๆ จะเปนเชนไร กคงขนกบวาเวลาเขยนเปนโปรแกรมจรง แปลเปนคาสงททางานจรง และใชงานบนเครองจรงแลว จะเปนอยางไร ซงขนกบปจจยหลายอาท ประสบการณของผเขยนโปรแกรม ภาษาและตวแปลทเลอกใช อกทงเครองทใชทางานจรงดวย ดงนนการจะเปรยบเทยบการ
การเตบโตของฟงกชน
26 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
ทางานจรงนนคงจะลาบาก แตสงทเราสรปไดอยางหนง ซงไมขนกบปจจยทกลาวถงน กคอทงสามโปรแกรมนใชเวลาการทางานเปนเชงเสน หมายความวาเวลาการทางานจะเพมขน k เทาเมอเราเพมปรมาณขอมลอก k เทา
หรอถาจะดตวอยางการหาคานอยสดอนดบทสองทแสดงในบทท 1 นนเราพบวาแบบทหนงนนจะใชฟงกชนเชงเสนในการหาตวนอยสดอนดบทสอง ในขณะทแบบทเปนสวนขยายของโปรแกรมทสามนนจะใชเวลาเปนฟงกชน log ฐานสองของจานวนขอมล โดยทเราไมไดแสดงใหเหนรายละเอยดของโปรแกรม แตเราสรปไดวาถาเราเพมขอมลเปน 2 เทา โปรแกรมททางานแบบเชงเสนจะใชเวลาเพมเปน 2 เทาเชนกน ในขณะทโปรแกรมทมพฤตกรรมการเตบโตของเวลาการทางานเปนฟงกชน log ฐานสองนนจะใชเวลาเพมอก 1 หนวยเวลาเทานน อนนเหนไดวาอตราการเตบโตของฟงกชนทงสองนตางกนมากๆ
ดงนนสงทเราสนใจจะเปรยบเทยบกคออตราการเตบโตของฟงกชนทแทนประสทธภาพของอลกอรทม รปท 3–1 แสดงตวอยางฟงกชนทมอตราการเตบโตแตกตางกน
n
nn22n
log n
nn22n
รปท 3–1 ตวอยางฟงกชนทมอตราการเตบโตแตกตางกน
บางคนอาจแยงวากเลนเขยนฟงกชนแบบคราวๆ บางทโปรแกรมทใชเวลาเปนแบบ log n อาจมคาคงตวขางหนา log n ทมคามากกได เพราะมจานวนคาสงตอรอบการทางานมากมายเหลอเกน อนนเปนขอสงเกตทด กขอยกตวอยางใหด กแลวกน สมมตวาโปรแกรม P1 ใชเวลา 1000�log n ในขณะทโปรแกรม P2 ใชเวลา n ถามวา P1 ใชเวลามากกวา P2 เมอ n มคาเทาใด ทดลองเปลยนคา n สกครกรวา 1000�log n > n เฉพาะเมอ n < 3551 เทานน อนนเปนสงทแสดงใหเหนวาถาฟงกชน f โตเรวกวาฟงกชน g แลวคาของ f ตองมากกวา g เมอ n � n0 ดงนนอตรา
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 27
การเตบโตของฟงกชนจะใชเปรยบเทยบอลกอรทมไดอยางสอความหมาย กเมอเรากาลงพดถงกรณทขอมลมจานวนมาก
แลวจะพจารณากรณมากสกแคไหน กเพอใหมนใจแนๆ กคดตอนทมนมขนาดมากเขาใกลอนนตเลย เราเขยน f(n) � g(n) เพอแทนวา f(n) โตชากวา g(n) โดยมนยามดงน
0)()(lim)()( �
�� ngnfiffngnf
n�
ในทางกลบกน ถาคาลมตขางบนนมคาเปนอนนต เรากบอกวา f(n) โตเรวกวา g(n) แตถาคาลมตนเปนคาอนทไมใช 0 และ อนนต เรากจะเรยกวาทง f(n) และ g(n) โตพอกน
ตองขอเนนตรงนครบวา ฟงกชนทเราพดกนในเรองของอลกอรทมนนเปนฟงกชนทใหคาเปนจานวนไมตดลบ เราจะไมพจารณากรณประสทธภาพตดลบ (ไมรหมายความวาอะไรเหมอนกน) จะไดไมตองมาหวงกรณ –�
ในการหาลมตขางบนน กขอใหนกถงกฎของโลปตาล (l'Hôpital's Rule) ทเคยเรยนกนในแคลคลส จะชวยไดเยอะทเดยว ขอเขยนทบทวนใหดโดยไมพสจนทมาดงน
กฎของโลปตาล ถา f(n) และ g(n) เปนฟงกชนทหาอนพนธได โดยท ��
��
)(lim nfn
และ
��
��
)(lim ngn
แลว)()(lim
)()(lim
ngnf
ngnf
nn �
��
����
ตวอยางท 3-1 จงเรยงลาดบฟงกชนตอไปนตามอตราการเตบโต : 0.5n, 1, log n, n, 10n
พอสรปไดดงน� 0.5n � 1 � log n เพราะวา 0.5n เปนฟงกชนซงนอกจากจะไมโตแลว คายงลดลงเรอยๆ แต 1 นนเปนฟงกชนนงๆ ไมเพมไมลด ในขณะทlog n เปนฟงกชนทโต
� มาด log n กบ n จากกฎของโลปตาลจะไดวา 01
)/1)(10ln/1(limloglim ��
����
nn
nnn
ดง
นน log n � n� จากขอบนยอมไดวา 10log n � 10n ดงนน n � 10n
ดงนน 0.5n � 1 � log n � n � 10n
28 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
ตวอยางท 3-2 จงเปรยบเทยบอตราการเตบโตของ ln9 n กบ n0.1
ใชกฎของโลปตาลไดดงน
0)1.0(
ln189lim
...)1.0(
ln89lim
1.0
ln9lim1.0
)/1)(ln9(limlnlim
1.09
0
1.02
7
1.0
8
)11.0(
8
1.0
9
�
�
�
�
�
��
��
��
���
����
n
n
n
nn
n
n
nn
n
n
n
n
nnn
�
สรปไดวา ln9 n � n0.1
อยากใหนกเรยนลองไปทาตอเพอแสดงใหเหนจรงวา loga n � nb สาหรบจานวนจรง b > 0 และขอใหสงเกตดวยวาฐานของ log จะเปนฐานอะไรกไดทมคามากกวา 1 กทาให loga n � nb
เนองจากเราสามารถเปลยนจากฐานหนงไปอกฐานหนงไดโดยการคณคาคงตวคาหนง ซงกไมทาใหคาของลมตเปลยนไปแตอยางใด
ตวอยางท 3-3 จงเปรยบเทยบอตราการเตบโตของ n10 กบ 2n
จากความรทวา log an � nb แสดงวา lg10n � n แทน lg n ดวย n จะไดวา n10 � 2n
(ออลมบอกไปวา คนในวงการเขาชอบใช lg แทน log ฐาน 2 เนองจากมนเปนฐานทพบบอยในคอมพวเตอร กเลยจะใชบางในเอกสารน)
และในทานองเดยวกนกบตวอยางทแลว อยากใหนกเรยนลองไปทาตอเพอแสดงใหเหนจรงวา na � bn สาหรบจานวนจรง b > 1 จากสองตวอยางขางตนน ขอสรปอตราการเตบโตของฟงกชนทใชมากดงน� logan � nb, b > 0 หมายความวาฟงกชน polylogarithmic โตชากวาฟงกชน polynomial� na � bn , b > 1 หมายความวาฟงกชน polynomial โตชากวาฟงกชน exponential
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 29
สญกรณเชงเสนกากบมวธแทนความสมพนธของฟงกชนในแงของอตราการเตบโตอกแบบหนง คอการใชสญกรณเชงเสนกากบ (asymptotic notations) การใชสญกรณในลกษณะนจะชวยทาใหการเขยนบรรยายฟงกชนกระทาไดงาย เนองจากเปนการแทนพฤตกรรมของฟงกชน f(n) เมอ n มคามากๆ อกทงทาใหการจดการฟงกชน (เชนการบวก การหาผลรวม การหาคามาก คานอย และอนๆ ) กระทาไดงายขน เราจะลงในรายละเอยดของสญกรณ 5 ตวดงน �, �, �, � และ � (ขอเนนตรงนหนอยครบวาเรองนยามของสญกรณตางๆ ทจะพดตอไปนนน หนงสอหลายๆ เลมจะใหนยามแตกตางกนไป ขนกบวาผเขยนจะเครยดหรอจจขนาดไหน สาหรบผมเอางายๆ กคอใหจาไวเสมอวาสญกรณทจะใชตอไปนใชกบฟงกชนทใหคาไมตดลบ เพราะเรากาลงพดถงฟงกชนทแทนประสทธภาพของอลกอรทม)
โอเลกเราเรมดวยสญกรณโอเลก เขยนแทนดวย � ซงมนยามดงน
�(g(n)) = ���
���
���
0)()(lim|)(
ngnfnf
n
พดงายๆ กคอวา �(g(n)) กคอเซตของฟงกชนทงหลายทโตชากวา g(n) ดงนนจากตวอยางกอนหนานเราจะไดวา log1000n � �( n0.00001 ) , n1000
� �( (1.0001)n ) เปนตน
โอเมกาเลกในทางกลบกน เรานยามให �(g(n)) กคอเซตของฟงกชนทงหลายทโตเรวกวา g(n) ดงน
�(g(n)) = ���
���
���� )(
)(lim|)(ngnfnf
n
ซงกเหนไดชดเจนวา f(n) � �( g(n)) กตอเมอ g(n) � �( f(n))
ทตาใหญสาหรบกรณทฟงกชนโตดวยอตราเดยวกน เรากมสญกรณใหคอ � ซงมนยามดงน
30 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
���
���
�����
cccngnfnfng
n,0,
)()(lim|)())((
หรอจะเขยนนยามแบบไมตองยงกบลมตกจะไดแบบน
�(g(n)) = { f(n) | มคาคงตวบวกสามตวคอ c1, c2 และ n0 ททาให c1g(n) � f(n) � c2g(n)เมอ n � n0 }
เขยนซะยดยาวอยางน กเพราะนยามแบบนมองเหนภาพไดงายกวา พจารณารปท 3–2 เราบอกวา f(n) � �(g(n)) กแสดงวา g(n) เปนฟงกชนทกาหนดขอบเขตการเตบโตของ f(n) ทงขอบเขตบนและขอบเขตลาง เมอ n มคามากพอ (คอเมอมคาตงแต n0 เปนตนไป) คา c1 และ c2
เปนแคตวคณ g(n) เพอใหขอบเขตลางและบนมรปแบบการเตบโตคลาย g(n) เพยงแตเอยงลงและขนเลกนอย รปท 3–2 แสดงใหเหนวา f(n) จะไมหลดออกนอกขอบเขตลางและบนนเลยเมอ n � n0 เราเรยก g(n) วาเปนฟงกชนกาหนดขอบเขตทกระชบของ f(n)
n
f (n)
c1 g(n)
n0
c2 g(n)
รปท 3–2 f(n) � �(g(n))
โอใหญโอใหญไมไดมไวเพอใหตรงขามกบโอเลก เราเขยน f(n) � �(g(n)) เพอบอกวา f(n) เปนฟงกชนทโตไมเรวกวา g(n) นนคอ �(g(n)) = �(g(n)) � �(g(n)) คอเปนเซตทรวมฟงกชนทโตชากวาและทโตเทากบ g(n) หรอเขยนเปนนยามไดอกแบบหนงดงน
�(g(n)) = { f(n) | มคาคงตวบวกสองตวคอ c และ n0 ททาให f(n) � cg(n) เมอ n � n0 }
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 31
หมายความวาถา f(n) � �(g(n)) แสดงวาการเตบโตของ f(n) จะถกกาหนดขอบเขตดานบนไวดวยลกษณะการเตบโตของ g(n) นนคอเราสามารถหาคาคงตวบวก c ท f(n) � cg(n) แสดงเปนตวอยางไดดงรปท 3–3
n
f (n)
c g(n)
n0รปท 3–3 f(n) � �(g(n))
โอเมกาใหญเรามแบบโตชากวา (�) โตเรวกวา (�) โตเทากน (�) และโตไมเรวกวา (�) กตองปดทายดวยโตไมชากวา นนคอเราเขยน f(n) � �(g(n)) เพอบอกวา f(n) เปนฟงกชนทโตไมชากวา g(n)นนคอ �(g(n)) = �(g(n)) � �(g(n)) คอเปนเซตทรวมฟงกชนทเรวกวาและทโตเทากบ g(n)หรอเขยนเปนนยามไดอกแบบหนงดงน
�(g(n)) = { f(n) | มคาคงตวบวกสองตวคอ c และ n0 ททาให cg(n) � f(n) เมอ n � n0 }
หมายความวาถา f(n) � �(g(n)) แสดงวาการเตบโตของ f(n) จะถกกาหนดขอบเขตดานลางไวดวยลกษณะการเตบโตของ g(n) นนคอเราสามารถหาคาคงตวบวก c ท cg(n) � f(n) แสดงเปนตวอยางไดดงรปท 3–4
32 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
n
c g(n)
n0
f (n)
รปท 3–4 f(n) � �(g(n))
คณสมบตของสญกรณเชงเสนกากบสญกรณทงหลายทไดนาเสนอมานมคณสมบตทนาสนใจดงนTransitivity :
f(n) � �(g(n)) และ g(n) � �(h(n)) จะไดวา f(n) � �(h(n))f(n) � �(g(n)) และ g(n) � �(h(n)) จะไดวา f(n) � �(h(n))f(n) � �(g(n)) และ g(n) � �(h(n)) จะไดวา f(n) � �(h(n))f(n) � �(g(n)) และ g(n) � �(h(n)) จะไดวา f(n) � �(h(n))f(n) � �(g(n)) และ g(n) � �(h(n)) จะไดวา f(n) � �(h(n))
Reflexivity :f(n) � �(f(n))f(n) � �(f(n))f(n) � �(f(n))
Symmetry :f(n) � �(g(n)) กตอเมอ g(n) � �(f(n))
Transpose symmetry :f(n) � �(g(n)) กตอเมอ g(n) � �(f(n))f(n) � �(g(n)) กตอเมอ g(n) � �(f(n))
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 33
ขอใหระวงไวนดหนงวา การเปรยบเทยบฟงกชนสองฟงกชนตามอตราการเตบโตโดยใชสญกรณทกลาวมาน อาจกระทาไดไมเสมอไป อาทเชน n กบ n1+sin(n) เนองจากจานวนยกกาลง 1+ sin(n) มคาแกวงไปมาระหวาง 0 กบ 2 เมอ n มคาเพมขน เปนตน
เราสามารถจดการกบเซตเชงเสนกากบทกลาวมาได หลากหลายรปแบบเพอเปนการลดหรอเปลยนในอยในรปแบบทงายขนไดอาทเชน (จะไมขอแสดงวธพสจนใหด)
กาหนดให f1(n) = O(g1(n)) และ f2(n) = O(g2(n))f1(n) + f2(n) = O(g1(n) + g1(n))f1(n) + f2(n) = O( max( g1(n) , g1(n) ) )f1(n) f2(n) = O(g1(n) g1(n))f1(n)k = O( g1(n)k )
��
�
�
��
�
�� ��
��
n
k
n
kkfOkfO
11)())((
ตวอยางท 3-4 จงแสดงใหเหนจรงวา 2n2 + 500n + 1000log n = O(n2)
ตองหาคา c และ n0 ททาให 2n2 + 500n + 1000log n � cn2 เปนจรงเสมอเมอ n � n0 ให c = 1502 กสบายใจไดเลยวาอสมการนเปนจรงแนเมอ n � 1
ตวอยางท 3-5 จงแสดงใหเหนจรงวา 2n2 + 500n + 1000log n = O(n200)
จากผลของตวอยางท 3-4 2n2 + 500n + 1000log n = O(n2) และความจรงทแทบไมตองแสดงใหเหนวา n2 � n200 = O(n200) ดงนน 2n2 + 500n + 1000log n = O(n200) บางคนเขาเรยกการระบขอบเขตบน ทสงกวาทควรจะเปนเชนในตวอยางน หรอในทางกลบกนขอบเขตลางตากวาทควรจะเปนวา ขอบเขตหลวม (loose bound)
ตวอยางท 3-6 จงแสดงใหเหนจรงวา (n/2) lg (n/2) = �(n lg n)
ตองหาคา c และ n0 ททาให cn lg n � (n/2) lg (n/2) เมอ n � n0 เขยนใหมไดเปน
34 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
cn lg n � (n/2) lg n – (n/2) lg 2 หารดวย n lg n ตลอดได c � (1/2) – (1/2)(lg 2)/(lg n) ให n = 4 จะไดคา c � (1/2) – (1/2)(lg 2)/(lg 4) = 1/4 ดงนนอสมการขางตนเปนจรงเมอ c = 1/4 และ n0 = 4
ตวอยางท 3-7 จงแสดงใหเหนจรงวา )( 2
1nk
n
k���
�
ขอนงาย ใครๆ กรวาสตรสาเรจของผลบวกในโจทยคอ n(n+1)/2 = n2/2 + n/2 � (1/2)n2 สาหรบทกๆ n � 0 หรอเราจะพสจนโดยใชกลวธการแยกผลบวก โดยไมตองรสตรสาเรจกไดดงน
� �
� �
� �
)(
)2/(
20
2
212/
2/
1
12/
2/
11
n
n
n
kkk
n
nk
n
k
n
nk
n
k
n
k
��
�
��
��
��
���
���
����
ตวอยางท 3-8 จงแสดงใหเหนจรงวา )(log1
1n
kH
n
kn ��� �
�
เราสามารถแยก 11 +12 +…+
1n เปน หลายๆ ชดในลกษณะดงน
�� ��1
1+0 , ��
��1
2+0 +1
2+1 , ��
��1
4+0 +1
4+1 +1
4+2 +1
4+3 , ��
��1
8+0 +1
8+1 +…+1
8+7 , …เขยนใหมไดเปน
� �
� �
� �
)(log1lg
1
2
1
2
11
lg
0
lg
0
12
0
lg
0
12
01
nOn
jk
n
i
n
i ji
n
i ji
n
ki
i
�
��
�
���
����
�
��
�
�
��
�
��
�
� �
� ��
�
�
�
�
�
�
��
� ทางขวาอาจมจานวนพจนทผลบวกมากกวาทางซาย จงเปนขอบเขตบน
� ตด j ทง ยงคงเปนขอบเขตบน
� 0,12
112
0���
��
����
���
�
ii
ji
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 35
ตวอยางท 3-9 จงแสดงใหเหนจรงวา )(log1
1n
kH
n
kn ��� �
�
คราวนหาอกแบบโดยการประมาณผลบวกดวยปรพนธ นนคอ
����
��
��
1
1
)()()(n
m
n
mk
n
m
dxxfkfdxxf
สาหรบกรณท f(x) เปนฟงกชนทเพมทางเดยว (monotonically increasing) แตถาเปนฟงกชนทลดทางเดยว (monotonically decreasing) เราจะประมาณไดดงน
�����
�
��
n
m
n
mk
n
m
dxxfkfdxxf1
1)()()(
เนองจาก 1k เปนฟงกชนลดทางเดยว ndxkk
nn
kln11
12�� ��
�
ดงนน Hn � 1 + ln n = �(log n)
ตวอยางท 3-10 จงแสดงใหเหนจรงวา � �1
1
�
�
���k
n
i
k ni โดยท k เปนคาคงตว
อกวธหนงในการแสดง f(n) � �(g(n)) นอกจากจะใชการหาลมตหรอการหาคาสามคาเพอแสดงขอบเขตกระชบดงทนยามไว กคอการแสดงใหเหนวา f(n) � �(g(n)) และ f(n) � �(g(n))หมายความวา g(n) มลกษณะการเตบโตทเปนทงขอบเขตบนและขอบเขตลางของ f(n) จาก
โจทย เราจะแสดงใหเหนวา � �1
1
�
�
���k
n
i
k ni และ � �1
1
�
�
���k
n
i
k ni
เรมดวยขอบเขตบนกอน เนองจากภายในผลบวกนน i มคาตงแต 1 ถง n แสดงวา i � n สรปไดวา ik � nk ดงนนเมอรวมทกๆ i ตงแต 1 ถง n ยอมไดวา ��
��
�ni
kni
k ni11
= nk+1 = O(nk+1)
สาหรบขอบเขตลาง ถาเราหาผลบวกของ ik สาหรบทกๆ i ตงแต �n/2� ถง n ยอมไดคาไมมากกวาผลบวกทตองการหา ดงนน
� �����
�n
nikn
ik ii
2/1 ถาเราแทน ik ในผลบวกทางขวาดวย
(n/2)k จะไดวา � � � ���
��
�n
nikn
nik ni
2/2/)2/( � (n/2)k+1 = (1/2)k+1nk+1 = �(nk+1)
36 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
จากทแสดงใหเหนวา � �1
1
�
�
���k
n
i
k ni และ � �1
1
�
�
���k
n
i
k ni ดงนน � �1
1
�
�
���k
n
i
k ni
ตวอยางท 3-11 จงแสดงใหเหนจรงวา log n! = �( n log n )
เราจะเรมดวยการพสจนวา log n! = �(n log n) จากนยามของแฟกทอเรยล n! = n� (n–1) … 2�1 ขอแทนทกๆ พจนทางขวาดวย n จะไดวา n! � nn หาคา log ได log n! � n log n = �(n log n)
ตอมาจะพสจนวา log n! = �(n log n) จากนยามของแฟกทอเรยล n! = n� (n–1) … 2�1 คราวนขอแทนพจน n, (n–1), …, (n/2) ดวย (n/2) และแทนพจน (n/2–1), (n/2–2), …, 2, 1 ดวย 1 จะไดวา n! (n/2)n/2 หาคา log จะได log n! (n/2) log (n/2) = �(n log n) (จากตวอยางท 3-6)
จากขอบเขตบนและลางทแสดงใหเหนจรงแสดงวา log n! = �( n log n )
ตวอยางท 3-12 จงแสดงใหเหนจรงวา loga n = �( logb n ) สาหรบคาคงตว a, b > 1
เนองจากเราสามารถแปลงฐานของ log ได จาก loga n = (logb n) / (logb a) = �( logb n )
ตวอยางขางบนนตองการชใหเหนวาเรามกจะไมใสฐานของ log ในสญกรณเชงเสนกากบเพราะวานอกจากจะสะดวกแลว ยงไมมผลใดๆ ดวย ดงนนในเชงเสนกากบแลว log1.1 n กบ log100 n มอตราการเตบโตเทากน
ตวอยางท 3-13 จงแสดงใหเหนจรงวา log na = �( log n ) สาหรบคาคงตวบวก a
เหนไดชดวา log na = a log n = �( log n )
นกเปนอกตวอยางทตองการแสดงใหเหนวาเลขชกาลงภายใน log นนไมมความหมายใดๆ ตออตราการเตบโต ดงนน log n1000 กบ log n มอตราการเตบโตเทากน (อนนจะขดกบความรสกในครงแรกทพบ แตขอใหเขาใจดวยวามนเปนพฤตกรรมของฟงกชนเมอ n มคามาก)
ตวอยางท 3-14 จงแสดงใหเหนจรงวา alg n �( alog n )
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 37
หวงวาทกคนคงไมลมเอกลกษณ an bb na loglog� ดงนน alg n = nlg a ในขณะท alog n = nlog a
เนองจาก lg n ไมเทากบ log n ดงนน nlg a �( nlog a ) แสดงวา alg n �( alog n )
ตวอยางขางบนนตองการเนนวาฐานของ log ทเปนเลขชกาลงของพจนอน จะมาตดทงไมโดยพจารณาไมได ดงนนกลาวโดยสรปวา ถาจะตดไมพจารณาฐานของ log กขอใหระวงๆ กนหนอย
ตวอยางท 3-15 จงแสดงใหเหนจรงวา )()(20
nOhOnk
hh
����
����
���
โดยท k = �lg n �
(ผลบวกขางบนนคอประสทธภาพของการสราง binary heap โดยใชวธการคอยๆ percolate down ยอนจากขอมลในแถวลาดบตวสดทายมายงตวแรก) เราสามารถดงโอใหญซงอยภายในผลบวกออกมาอยนอกผลบวกได จากนนจะทาใหเราจดการกบผลบวกไดงายขน อกทงเมอเรารวาคาตอบจะเปนโอใหญซงเปนขอบเขตบน ทาใหเรากลาทจะขยายผลบวกใหรวมพจนจานวนมากขนเพอลดรปผลเฉลยทไดใหสวยขน ดงน
)()2(22
)(2 000
nOnOhnOhnOhOn
hh
k
hh
k
hh
����
�
�
��
�
�
���
����
��
��
�
�
��
�
�
���
����
���
��
����
�����
���
ขอใชเครองหมาย = แทน ����บางคนอาจสงเกตเหน และเกดความสงสยมาตงแตอานตวอยางทผานมาแลววา ตอนแรกกนยามใหสารพด , �, �, � และ � เปนเซต แลวกเขยนสวยๆ มาตลอดเชน f(n) � �(g(n))แลวอยดๆ กมาใชเครองหมาย = แทน � ในสองสามหนาทผานมา ซงนกเรยนมธยมกเหนชดๆ วาผด ยอมรบครบวามนผด แตกยงจงใจจะใชเครองหมาย = ครบ ทงนกเพราะวาผมเหนมนแตไหนแตไรแลวละครบวาเขาใช = กนทงนน จงจะขอใชผดดวยคน เนองจากมนชนตาและสะดวกด (ไมตองเปลยนฟอนตบอย) แตมนกมเหตผลบางเหมอนกนวาทาไมเขาถงใชมนผดแบบน ลองอานเหตผลท Donald Knuth (ปรมาจารยทางคอมพวเตอร) เขยนไวในหนงสอ Concrete Mathmematic ดงน
� ใชมานาน กเลยชน
38 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
� ในวงการคอมพวเตอรเราใชเครองหมาย = กนผดๆ อยแลว (เชน A = B มหลายความหมายในภาษาคอมพวเตอร) ขอใชผดอกสกครงจะเปนไร
� ปกตเราอาน f(n) = �(g(n)) วา f(n) เปนโอใหญของ g(n) คออาน "=" วา "เปน" ซงกเปนลกษณะของการเทากบทางเดยว (เชนลงเปนสตว แตไมไดหมายความวาสตวเปนลง) หรออกนยหนง f(n) = �(g(n)) ไมไดหมายความวา �(g(n)) = f(n)
� (อนนเขาทาหนอย) การใช = จะทาใหเราจดการกบนพจนทมสญกรณเชงเสนกากบไดอยางเปนธรรมชาต และงายขน ดงทจะกลาวตอไป
การใชสญกรณเชงเสนกากบในสมการโดยทวไปเราเขยนบรรยายฟงกชนแบบละเอยดครบถวน เชน f(n) = 2n3 + 3n +7.5/n แตในบางครง เราอาจละเลย ไมอยากลงรายละเอยดพจนทไมคอยสาคญ เชนการใชเครองหมาย � แลวตดสวนทคดวาไมสาคญทง เชนเขยนเปน f(n) � 2n3 หรออาจใชสญกรณเชงเสนกากบชวยกจะไดความหมายทมากกวาเครองหมาย � เชนเขยนเปน f(n) = 2n3 + �(n) เปนการบอกวา f(n) = 2n3
+ g(n) โดยท g(n)� �(n) การใชเครองหมาย = นถงแมจะผดความหมาย แตจะชวยใหเราเขาใจความหมายของ f(n) ไดงายขน กลาวคอ f(n) กคอ 2n3 บวกอะไรบางอยางทมอตราการเตบโตเทากบ n ใหสงเกตวาใชสญกรณเชงเสนกากบกบสวนของฟงกชนทมอตราการเตบโตทชากวา สวนทโตเรวกวากยงเขยนเหมอนเดม นนคอเราคงไมเขยน f(n) = �(n3) + 3n +7.5/n เพราะเขยนแบบน 3n +7.5/n ไมเหนมความหมายใดๆ เนองจากมามนโตชากวา n3 ดงนนจะเหมอนกบเขยน f(n) = �(n3)
บางคนอาจอยากถามวา แลวเราไปหาเรองเขยนแบบคราวๆ ทาไม ถาเรารตวฟงกชนจรงๆ อยแลว อนนถกตองถาเรารของละเอยด กไมตองทาใหมนหยาบ แตทเราจะใชสญกรณเชงเสนกากบในสมการในลกษณะนนน กสาหรบกรณทเราไมรของละเอยด หรอถารของละเอยดกตองเขยนกนยดยาวมากๆ เชนจากความรในอดตเกยวกบเรองจานวนฮารมอมค Hn มนยามวา
Hn = 11 +
12 +…+
1n
ทคนปรารถนาอยากไดกคอรปแบบปดของ Hn แตกหาไมได ทจะพอมใหเหนกเชน
Hn = ln n + � + 1
2n –1
12n2 +�n
120n4
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 39
โดยท 0 < �n < 1 และ � คอคาคงตวออยเลอรมคาเทากบ 0.5772156649…
แตถาเรากาลงสนใจวา Hn มแนวโนมการเปลยนแปลงคาอยางไร กอาจเขยนไดดงน
Hn = ln n + � + �(1/n)
เพอชใหเหนไปเลยวาพจนหลงๆ ทไมไดเขยนใหดนนโตไมเกน 1/n หรอจะเขยนแบบนHn = ln n + �(1)
กไมผดเหมอนกน (แตละเอยดนอยลงหนอย) หรอสดๆ เลยกเขยนแบบนกยงได
Hn = �(log n)
และทเราจะพบบอยมากในการใชสญกรณเชงเสนกากบในสมการ กคอการเขยนเปนสวนหนงของความสมพนธเวยนเกด เพอแทนประสทธภาพของอลกอรทม ตวอยางงายๆ เชนการเรยงลาดบแบบผสาน (mergesort) นนเราแบงจานวนขอมลออกเปนสองสวนเทาๆ กน แลวไปเรยงลาดบทงสองสวนใหเสรจกอนแลวจงมาผสานกน ถากาหนดให t(n) คอเวลาในการเรยงลาดบขอมลจานวน n ตวแบบผสาน เราจะเขยนความสมพนธเวยนเกดไดเปน
t(n) = 2t(n/2) + เวลาในการผสาน
กมาหากนวาเวลาในการผสานใชเวลาทงสนเทาไร เปน n–1 ? เปน n ? เอะหรอวาไมใชทงสองเพราะอาจมคาคงตวคณขางหนาดวยกได แตขอใหสงเกตวาไมวาจะเปน n หรอเปน n–1 หรอวามคาคงตวคณอยขางหนากตาม เราเขยนดงนได
t(n) = 2t(n/2) + �(n)
ซงหมายความวาการผสานขอมลนนใชเวลาทเปนฟงกชนซงโตแบบเชงเสน หลงการวเคราะหแลวกจะได t(n) ในรปแบบของสญกรณเชงเสนกากบดวย
การใชสญกรณเชงเสนกากบจากทไดกลาวมาเกยวกบความหมายของสญกรณเชงเสนกากบตางๆ บางคนอาจรสกวาสญกรณเหลานฟยเฟอย บางตวนยามไดจากตวอน ถงแมวาจะดวาฟมเฟอย เชน O กบ � เพราะมนคกนถา f(n) = O(g(n)) กตอเมอ g(n) = �(f(n)) เปนตน แตเรามกใชมนในความหมายทแตกตางกน เพอใหเขาใจงายขน อาทเชนประโยคตางๆ ตอไปน
40 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
� "Insertion sort ใชเวลาในการเรยงลาดบขอมล n ตวเปน O(n2)" หมายความวาเวลาการทางานเปนฟงกชนทโตไมเรวกวา n2
� "Insertion sort ใชเวลาในการเรยงลาดบขอมล n ตวเปน �(n)" บอกวาอยางนอยInsertion sort กตองใชเวลาทเปนฟงกชนทโตแบบเชงเสน
� "อลกอรทมการเรยงลาดบขอมล n ตวทใชการเปรยบเทยบขอมลเปนหลก ยอมใชเวลาเปน �(n log n)" หมายความวาถาเราคดอลกอรทมการเรยงลาดบอนหนงทใชเวลาเปนO(n log n) แสดงวาเราไดพบวธทเรยงลาดบทมอตราการเตบโตของเวลาการทางานทดทสดแลว
ตวอยางตางๆ ขางบนนชใหเหนวา เรามกบอกภาระขนตาของอลกอรทมทแกปญหาหนงๆ ดวยโอเมกาใหญ (นนคอเปนขอบเขตลาง)ในขณะทเราจะใชโอใหญสาหรบประสทธภาพการทางานของอลกอรทม (นนคอระบขอบเขตบน หรอกรณทใชเวลามากทสดของอลกอรทมนน)
อกประเดนทเราไดพดถงมากอนหนาน กคอการใชสญกรณเชงเสนกากบมาเปนตวบอกพฤตกรรมการทางานของอลกอรทม ถาอลกอรทม A ใชเวลาการทางานเปน �(n2) กแสดงวาเรารลกษณะการเตบโตของเวลาการทางานทแนนอนวาเปนฟงกชนยกกาลงสอง แตถาบอกวาอลกอรทม B ใชเวลาการทางานเปน O(n5) กเพยงรวาเวลาการทางานมลกษณะการเตบทไมเลวกวาn5 ซงของจรงอาจเปนเชงเสนกได (เพราะเพยงบอกแคขอบเขตบน) ถงแมวาเราจะรวาอลกอรทมของเรามประสทธภาพเปน �(n2) เรากคงไมไปเทยวบอกชาวบานวาอลกอรทมของเรานนเปน O(n10) ซงกไมผด ไมไดโกหก แตกไมนาทาจรงไหม ? ดงนนโดยทวไปถาเราสามารถวเคราะหประสทธภาพไดเปน � จะเปนการบรรยายพฤตกรรมทแนนอนกวา แตถาเราวเคราะหโดยไมรขอบเขตลาง (คอสรปเปน �ไมได) เรากควรเปนนกการตลาดทดพอทจะบอกประสทธภาพทเปนขอบเขตบนทตาสดเทาทจะตาได ตวอยางเชนการวเคราะหวธสราง binaryheap ดวยการคอยๆ percolate down ขอมลเพอปรบ heap (หวงวาคงยงจาไดในวชาโครงสรางขอมล) ถาเราวเคราะหแบบลวกๆ กคอ percolate down ครงละ O(log n) ตองทา n ครงรวมเปนO( n log n) ซงกเปนคาตอบทไมผด เพราะเปนขอบเขตบน (จะบอกวา O(n5) กไมผดเชนกน)แตมนบงบอกถงความเลวของวธทคดขน แทนทจะโฆษณาความด ทงๆ ทถาเราวเคราะหละเอยดหนอยดงททาในตวอยางท 3-15 กจะพบวาแทจรงแลวมประสทธภาพเปน O(n) (แตจะวเคราะหใหละเอยดอกสกเทาใด กคงไมทาใหขอบเขตบนตากวา O(n) อกแน)
Draft 1.0 : 24/10/00 0:11 : [email protected] บทท 3 การเตบโตของฟงกชน 41
ขอปดทายดวยเรองการใชสญกรณเชงเสนกากบอกเรองหนง มาดตวอยางการเขยนในบรรทดขางลางนวาแปลกๆ หรอไม
f(n) = n2 = �( 5n2+ 3n + 3 )
ทเขยนขางบนนกไมมอะไรผด (นอกจากการใช = ) แตมนจะแปลกตรงทวาจะไมคอยเหนใครเขาเขยนกน ทงนกเพราะวาจดประสงคของการใชสญกรณเหลานกเพอการบรรยายฟงกชนทยงดวย กลมของฟงกชนทอานงายกวา บรรยายอตราการเตบโตทดกวา ดงนนสวนใหญเราจะเหนฟงกชนงายๆ อยในวงเลบของสญกรณเชน g(n) = 5n2 + 3n +3 = �(n2) เพราะเราตองการบรรยายฟงกชน g(n) ทยงดวย � เพอบอกวามการอตราการเตบโตเทากบ n2 ทตความไดงายๆ
แบบฝกหด1. จงอธบายความหมายของ O(1) �(1) และ �(1)
2. ถา f1(n) = �( g1(n) ) และ f2(n) = �( g2(n) ) แลว f1(n) + f2(n) = �( min{ g1(n), g2(n) } ) หรอวา f1(n) + f2(n) = �( max{ g1(n), g2(n) } ) พสจนใหดดวย
3. ถา t1(n) = O(f(n)) และ t2(n) = O(f(n)) ขอใดตอไปนเปนจรงก) t1(n) + t2(n) = O(f(n))ข) t1(n) – t2(n) = o(f(n))ค) t1(n) / t2(n) = O(1)ง) t1(n) = O(t2(n))
4. จงเรยงลาดบฟงกชนขางลางนตามอตราการเตบโตn 3n n2 + log n n0.01 log log n n!
n / log n (1.01)n 106 3–n nn (log n)10
5. จงหาความสมพนธของ f(n) และ g(n) ในขอตางๆ ขางลางนวา f(n) = O(g(n) หรอวา g(n) = O(f(n))ก) f(n) = (n2–n) / 7 g(n) = 0.5nข) f(n) = n0.03 g(n) = lg (n2+3n)
42 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 0:11 : [email protected]
ค) f(n) = n log n g(n) = n n ง) f(n) = 9( log n )3 g(n) = 9 log n3
6. จงหาวาขอยอยตอไปน จรงหรอเทจก) n log n = O( n1.5)ข) n + log n = O(n)ค) 2n2 + n = O( n + n n + 20n)ง) n log n = O(n)จ) n + n = O( n log n )ฉ) 2n = �( 2n+1)ช) n! = �( (n+1)! )
7. จงพสจน หรอพสจนแยงขอยอยตอไปนก) nlog n = O( (log n)n )ข) nlog log log n = O( (log n)! )ค) (n!)! = O( ((n–1)!)! ((n–1)!)n! )
8. กาหนดให f(n) และ g(n) เปนฟงกชนทใหคาบวก จงพสจน หรอพสจนแยงขอยอยตอไปนก) f(n) = �(f(n/2))ข) f(n) = O( (f(n))2 )ค) f(n) + o(f(n)) = �(f(n))ง) ถา f(n) = O(g(n)) แลว 2f(n) = O(2g(n) )จ) ถา f(n) = O(g(n)) แลว log f(n) = O( log g(n) )
9. จงพสจนวาสาหรบจานวนเตมบวก k ใดๆ )log(lg 1
1nnOii k
n
i
k �
�
��
10. จงพสจนวา � � )()/lg(1
nOinn
i��
�
Draft 1.0 : 24/10/00 5:03 : [email protected] 43
บทท 4
ขอยาอกทวาผมอยากใหนกเรยนทเรยนวชานไป มความสามารถในการออกแบบอลกอรทมทมประสทธภาพด เราจะไดเรยนแนเกยวกบการออกแบบ แตในบทนเราจะมาวากนเรองการวเคราะหเพอใหรถงประสทธภาพของอลกอรทมทเราไดออกแบบไว โดยจะขอเนนเฉพาะประสทธภาพเชงเวลาการทางานเปนหลก ซงหาไดโดยตรงจากปรมาณของคาสงทถกใชงานในโปรแกรม และเราจะวเคราะหอลกอรทมเชงเสนกากบ หมายความวาจะเขยนฟงกชนทแทนประสทธภาพของอลกอรทมดวยสญกรณเชงเสนกากบ เพราะวาเปนการวเคราะหงาย และเพยงพอทจะใชในการเปรยบเทยบอลกอรทม เราจะเรมดวยเรองของคาสงมลฐานและคาสงมาตรเวลาซงเปนตวกาหนดประสทธภาพ ตามดวยการวเคราะหรปแบบการทางานของโปรแกรมอนไดแก การทางานเปนลาดบ คาสง if…then…else คาสงทเปนวงวน และการทางานเปน recursive ปดทายดวยประเภทของการวเคราะห อนไดแกกรณเลวสด กรณเฉลย และกรณถวเฉลย
คาสงมลฐานการวเคราะหประสทธภาพเชงเวลาของอลกอรทม มหลกการกคอการนบจานวนคาสงทถกใชงาน แนนอนวาแตละคาสงทเราเขยนบรรยายอลกอรทมนนคงใชเวลาทางานจรงในทางปฏบตไมเทากน แตสงทเราตองการกคอคาสงตางๆ ทเรานบนนตองเปนคาสงมลฐาน คอเปนคาสงพนๆ งายๆ ใชเวลาการทางานสนๆ โดยเฉพาะอยางยงตองทางานเสรจไดโดยไมขนกบขนาดของขอมลทประมวลผล นนคอใชเวลาเปน �(1) ลองมาดตวอยางรหสเทยมของอลกอรทมการ
การวเคราะหอลกอรทม
44 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
ทดสอบจานวนเฉพาะตอไปน (ทใชทฤษฎบทของวลสนทกลาวไววา p เปนจานวนเฉพาะ กตอเมอ (p–1)! � –1 (mod p) )
01: isPrime( p )02: {03: if ( ((p–1)! + 1) % p == 0 ) then return true;04: else return false;05: }
เราจะเหนไดวาคาสงเพอคานวณ ((p–1)! + 1) % p นนเขยนงายแตใชเวลาการทางานทแปรตามคาของ p ถงแม p จะมคาไมใหญมากสก 20 บต แตการคานวณขางบนนกใชเวลามหาศาล ดงนนคาสงดงกลาวไมใชคาสงมลฐาน จะมานบการทางานในคาสงนเปน "หนง" คาสงกเหนจะไมเปนธรรมแน ในการวเคราะหเรากควรจะเขยนรหสเทยมใหประกอบดวยแตคาสงมลฐานกจะเปนการด แตอยางไรกตามบางครงการเขยนคาสงสนๆ แตทานานๆ คอไมใชคาสงมลฐานนนกอาจจะกระทดรดไดใจความมากกวา ดงนนจงเปนสงทผวเคราะหจะตองตระหนกไวดวย
กลาวโดยสรปกคอการวเคราะหประสทธภาพเชงเวลาของอลกอรทมนน เราตองแปลงคาสงตางๆ ใหเปนคาสงมลฐานเสยกอน แลวหาฟงกชนของจานวนครงทคาสงมลฐานตางๆ ถกใชงาน ตามขนาดของขอมลขาเขาทไดรบ
ตวอยางท 4-1 จงหาวเคราะหการเรยงลาดบแบบเลอก (selection sort)01: SelectionSort( A[1..n] )02: {03: for (i=n downto 2) {04: j = indexMax( A[1..i] );05: Swap( A, i, j );06: }07: }
อลกอรทมนอาศยการหาคามากสดในแถวลาดบ จากนนสลบกบตวหลงสดในแถวลาดบนน กระทาเชนนไปเรอยๆ โดยลดขนาดของแถวลาดบทพจารณาลงเรอยๆ จนเหลอเพยง 1 ตวกเสรจ จากอลกอรทมนเหนไดวาบรรทดท 4 ไมใชคาสงมลฐาน (แตเขยนบรรทดเดยวแบบนอาจเขาใจกวา) ถาเขยนเปนกระจายเปนคาสงมลฐานทงหมด จะไดเปนรหสเทยมดงน (ใหสงเกตวาเราไมตองไมกงวลกบคาสง swap มาก ถงแมวาเราจะรวา 1 swap โดยทวไปเทากบ 3 moves กตาม เพราะ swap ในทนกเปนคาสงมลฐานเชนนน ไมตองไปแปลงใหมนเปนมลฐานยงขน)
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 45
01: SelectionSort( A[1..n] )02: {03: for (i=n downto 2) {04: j = 1;05: for (k=2; k<=i; k++)06: if ( A[j] < A[k] ) j = k;07: Swap( A, i, j );08: }09: }
ในทนเราจะนบใหไดเปนฟงกชนของ n (n คอจานวนขอมลในแถวลาดบ) สรปการนบไดดงน
� บรรทดท 3 คาสง for นอกสด ถกใชงาน n ครง เพราะตองการลดคา i จาก n จนเหลอแค 2 แตในรอบสดทายจะลดเปน 1 แลวผดเงอนไขจงหลดออกจาก loop (เพราะฉะนนจะทาคาสงตางๆ ภายใน for loop นอกเปนจานวน n–1 ชด)
� บรรทดท 4 คาสง j = 1 ถกใชงาน n–1 ครง� บรรทดท 7 คาสง Swap ถกใชงาน n–1 ครง� บรรทดท 5 คาสง for วงใน ถกใชงาน �
�� nii
2 = n(n+1)/2 – 1 ครง
� บรรทดท 6 คาสง if ในสด ถกใชงาน ���
�
nii
2)1( = n(n–1)/2 ครง
สรปแลวมคาสงมลฐานถกใชงานทงสน n + (n–1) + (n–1) + n(n+1)/2 – 1 + n(n–1)/2 เทากบเทาไรลองยบใหเหลอนพจนสวยๆ หนอยกแลวกน เอะลมไป ไมตองไปเสยเวลายบหรอก กบอกไวตงแตตนบทแลววาเราจะวเคราะหใหอยในรปของสญกรณเชงเสนกากบ ดงนนผลทไดกคอใชเวลาเปน �(n2) อนนใชความรทวา �(f(n)+g(n)) = �(max(f(n), g(n))) (ลองพสจนด)
ถงตรงนกคงรสกวา หนง โดนหลอกใหคดมากคดละเอยด แลวตอนหลงกมาใชสญกรณเชงเสนกากบเตะความละเอยดทงไปหมด กบสอง โลงอกในสงทเราละเลยไปหลายจดในตอนนบคาสงเพราะในทสดกไมมผล อาทเชนถาจะคดใหละเอยดแลวการทางานในคาสง if ตวในสดนนใชเวลาเทาใดยอมขนกบผลของการเปรยบเทยบดวย หรอเรอง 1 swap เทากบ 3 moves เหลานลวนเปนสงทไมตองลงในรายละเอยดมาก เพราะสญกรณเชงเสนกากบไมสนใจอยด
(คงไมตองบอกตรงนอกหรอกนะวา แลวมนใชไดหรอททามา อยาลมวาเราสนใจอตราการเตบโตของอลกอรทม เราไมเปรยบเทยบอลกอรทมวาใครชนะใครกมลลวนาท แตเราเปรยบเทยบในเชงอตราการเตบโตของฟงกชน วาใครโตเรวกวากน ซงโดยทวไปเมอขนาดของขอมลขาเขามมากพอ ตวทโตเรวกวาจะทางานชากวา)
46 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
คาสงมาตรเวลาจากทแสดงใหดในตวอยางทผานมานนพบวา หลายคาสงในรหสเทยมทเขยนขนนน ไมไดไปมสวนเปนตวกาหนดอตราการเตบโตของเวลาการทางานเอาเลย แตเรากตองเสยเวลาไปคดนบจานวนครงทมนถกใชงานอยด แลวกมาถกเขยทงในตอนหลง เพอลดภาระเหลาน กอนจะเรมนบ เราควรพจารณาเสยกอนวาคาสงไหนในอลกอรทม ทเปนตวกาหนดเวลาการทางานโดยรวม เราเรยกคาสงประเภทนวาเปนคาสงมาตรเวลาของอลกอรทม (ซงมไดมากกวาหนงคาสงในอลกอรทม) คาสงมาตรเวลาเปนคาสงทถกใชทางานมากทสดในอลกอรทม คอเวลาการทางานจะแปรโดยตรงตามจานวนครงทคาสงมาตรเวลาถกใชงาน จากตวอยางท 4-1 นนคาสง if ทอยวงวนในสด หรอคาสง for วงในจะเปนคาสงมาตรเวลาของอลกอรทมน (แตอยาไปเลอกคาสง j = k หลง if เพราะมนอาจไมถกใชงานเลยกได) เราจงสามารถนบเฉพาะจานวนครงทคาสงมาตรเวลาถกใชงานกเพยงพอในการวเคราะห
การวเคราะหรปแบบการทางานทผานมาเรากไดคนกบการนบคาสงกนมาบางแลว ในหวขอนเราจะมาพจารณากนเปนกรณๆ ไป อนไดแก การทางานแบบลาดบ คาสง if…then…else คาสงวงวน for, while และการเรยกแบบเวยนเกด (recursive calls)
การทางานแบบลาดบรปแบบนงายสด ถาเรามชดคาสงสองชดทางานเปนลาดบตอเนองกน คอทาชดหนงเสรจแลวตามดวยอกชดหนง เวลาการทางานกยอมเปนผลรวมของทงสองชด (อนนตรงไปตรงมา) แตมขอตองระมดระวงเลกนอยสาหรบกรณทเราใชสญกรณเชงเสนกากบ วาเราจะรวมกนอยางไร อนนขอยกตวอยางใหเหนสกจานวนหนง เพอใหเขาใจวาเปนสงทตองคดเลกนอยกอนสรป
ตวอยางท 4-2 กาหนดใหอลกอรทม A ประกอบดวยการทางานของชดคาสง P1 ตามดวยชดคาสง P2
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 47
� ถา P1 และ P2ใชเวลาการทางานเปน �(n) ทงสองชดจะไดวา A มเวลาการทางานเปน �(n)+ �(n) = �(n)
� ถา P1 และ P2ใชเวลาการทางานเปน �(n) และ �(n) ตามลาดบจะไดวา A มเวลาการทางานเปน �(n)+ �(n) = �(n)
� ถา P1 และ P2ใชเวลาการทางานเปน �(n) และ �(n2) ตามลาดบจะไดวา A มเวลาการทางานเปน �(n)+ �(n2) = �(n2)
� ถา P1 และ P2ใชเวลาการทางานเปน �(n2) และ �(n) ตามลาดบจะไดวา A มเวลาการทางานเปน �(n2)+ �(n) = �(n2)
จะเหนไดวาในแตละกรณนน เราจะเลอกตวทมภาระการทางานทมอตราการเตบโตทมากกวาเปนผลลพธ ขอใหสงเกตกรณทสองท �(n)+ �(n) = �(n) นนเพราะวามขอบเขตบนของเวลาการทางานเทากน และขอบเขตลางของ P1
นนสงกวาจงตองใชขอบเขตลางของ P1 เปนผลลพธ
คาสง if … then … elseกาหนดใหชดคาสง P1 , P2, และ P3 ใชเวลาการทางานเปน t1, t2 และ t3 ตามลาดบ ดงนนคาสง
if P1 then P2 else P3
ยอมใชเวลา t โดยท t1+ min( t2, t3 ) � t � t1+ max( t2, t3 ) หากพจารณาในรปของสญกรณเชงเสนกากบแลว การจะไดผลลพธเปน � กตองมนใจวาขอบเขตบนและลางมอตราการเตบโตเดยวกน ในกรณไมเทากคงไดผลลพธในรปของ �
ตวอยางท 4-3 กาหนดให ชดคาสง P1 , P2, และ P3 ใชเวลาการทางานเปน �(n2), �(nlogn) และ �(n) ตามลาดบ คาสง if P1 then P2 else P3 ยอมใชเวลาเปน �(n2) เพราะเวลาทใชในการตดสนหลง if นนใชเวลาทโตเรวกวาชดคาสงหลง then และ else
ตวอยางท 4-4 กาหนดให ชดคาสง P1 , P2, และ P3 ใชเวลาการทางานเปน �(n), �(nlogn) และ �(n) ตามลาดบ คาสง if P1 then P2 else P3 ยอมใชเวลาเปน �(nlogn) เพราะเปนสวนทโตเรวกวาใคร
48 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
ตวอยางท 4-5 กาหนดให ชดคาสง P1 , P2, และ P3 ใชเวลาการทางานเปน �(n), �(nlogn) และ �(nlogn) ตามลาดบ คาสง if P1 then P2 else P3 ยอมใชเวลาเปน �(nlogn) เพราะเปนสวนทโตเรวกวาใคร อกทงไมสามารถสรปขอบเขตลางได
วงวนแบบ forวงวนแบบ for เปนวงวนทวเคราะหงาย เพราะโดยปกตผเขยนจะระบอยางเดนชดวาจะหมนอยในวงวนกรอบ ถาชดคาสงภายในวงวนใชเวลา ti ในการทางานรอบท i และวงวนนหมนทางานเปนจานวน m รอบ การทางานทงหมดยอมเทากบ t1 + t2 + … + tm เราควรวเคราะหการทางานของชดคาสงภายในวงวนกอนวาเปนเทาไร ซงนอกจากจะแปรตามขนาดของขอมลขาเขาแลว อาจจะแปรตามหมายเลขรอบททางานดวย แลวจงนามารวมกนเปนประสทธภาพโดยรวม
ตวอยางท 4-6 จงวเคราะหอลกอรทมการเรยงลาดบแบบเลอกตอไปน01: SelectionSort( A[1..n] )02: {03: for (i=n downto 2 ) {04: j = indexMax( A[1..i] );05: Swap( A, i, j );06: }07: }
จะพบวาบรรทดท 4 ใชเวลา �(i) (เพราะตองหาตวมากสดของขอมลทม i ตว) บรรทดท 5 ใชเวลา �(1) ดงนนชดคาสงในวงวน for (บรรทดท 4 และ 5) ใชเวลาทงสน �(i)+ �(1) = �(i) เมอตองทาในวงวน for ทงสน n–1 รอบ จะไดเวลาโดยรวมเปน
� �2
221
2)1(
)( nnn
iin
i
n
i���
�
���
�
��
��
�
�
��
�
���� ��
��
ตวอยางท 4-7 จงวเคราะหอลกอรทมตอไปน01: for (i=1 to m)02: for (j=1 to m)03: s+= A[i][j];
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 49
อลกอรทมนมวงวน for สองวงซอนกน คาสงภายในสดใชเวลาเปน �(1) การวเคราะหโดยทวไปจะเรมทวงในสดกอน แลวคอยๆ นาผลจากวงในมารวมกนเปนผลของวงนอก กระทาเชนนไปเรอยๆ จนถงวงนอกสด ดงน
� �2
111 11 1)(1)1( mmm
m
i
m
i
m
i
m
j
m
i
m
j��
��
�
�
��
�
�����
���
�
�
���
�
���� ��� ���
��� �� �
ตวอยางท 4-8 จงวเคราะหอลกอรทมตอไปน01: for (i=1 to m)02: for (j=1 to i)03: s+= A[i][j];
ตวอยางนคลายตวอยางทแลว ตางๆ ตรงทวงวน for ในบรรทดท 2 จบคา j ท i วเคราะหเวลารวมไดดงน
� �2
1111 11 1)()(1)1( mmmi
m
i
m
i
m
i
m
i
i
j
m
i
i
j��
��
�
�
��
�
������
���
�
�
���
�
�� ���� ���
���� �� �
� �2
2/2/11 11 1 22)(1)1( mmmi
m
mi
m
mi
m
i
m
i
i
j
m
i
i
j��
��
�
�
��
�
����
�
���
����
���
�
�
���
�
�� ���� ���
���� �� �
เปนการหาทงขอบเขตบนและลางของเวลารวม ซงเหมอนกนแสดงวาเวลารวมเปน �(m2)(หรอจะใชการหาผลบวกไปตรงๆ �
�
���
� ���
��
����� ��
�� 2)1()()( 11
mmii mi
mi = �(m2) กไมผด)
ตวอยางท 4-9 จงวเคราะหอลกอรทมตอไปน01: for (i=2 to m–1)02: for (j=3 to i)03: s+= A[i][j];
โจทยขอนกคลายกบขอทแลว แตกตางกนกตรงทจดเรมและจดจบของคาตวแปรของวงวน forนนไมเหมอนกน แตเราจะเหนวาเนองจากการใชสญกรณเชงเสนกากบจะชวยใหเราละเลยเรองจกๆ จกๆ พวกนไดอยางสะดวก ดงน
� � � � � �221
2
1
2
1
2 3)()1( mmmii
m
i
m
i
m
i
i
j������
��
�
�
��
�
����� ����
�
�
�
�
�
� �
50 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
ตวอยางท 4-10 จงวเคราะหอลกอรทมตอไปน01: Dummy( G(V,E))02: {03: c = 0;04: for (each vertex u in V )05: for (each vertex w adjacent to u )06: ++c;07: return c;08: }
ตวอยางนมวงวนแบบ for ทไมตรงไปตรงมานก เราเหนวงวนสองวงซอนกน กจะมความรสกวาอยากเขยนผลบวกซอนกนสองชน เหนชดวาวงวนนอกจะหมนเปนจานวนรอบเทากบจานวนจดของกราฟ สวนวงในนนจะหมนเทากบจานวนเสนเชอมทตอกบจดทเลอก นนคอบรรทดท 6 ซงเราเลอกเปนคาสงมาตรเวลา (เหนดวยไหม ?) ถกใชงานเปนจานวนครงเทากบผลบวกของดกรของทกๆ จดในกราฟ หรอเทากบสองเทาของจานวนเสนเชอมนนเอง (จากความรในทฤษฎกราฟ) ดงนนใชเวลาทงหมดเปน �( |E| )
หยดกอน รสกวาคาตอบของตวอยางขางบนนจะมอะไรผดหรอเปลา ! การเลอกบรรทด 6 เปนคาสงมาตรเวลาอยางเดยวกอาจจะไมคอยถกตองนก เพราะถาทกๆ จดในกราฟไมตอกบจดอนเลย (ซงกคอกราฟทไมมเสนเชอมเลย) กแสดงวาไมเคยมาทาบรรทดท 6 เลย (ใชเวลาเปน 0!!)ดงนนเราตองสนใจนบคาสงมาตรเวลาอนดวย ซงกคอคาสง for ในบรรทดท 4 ดวย เพราะอยางนอยกตองดทกๆ จดของกราฟ (คาสง for ตรงนกเหนชดวาอลกอรทมนตองเปน �( |V| ) ดงนนอลกอรทมนใชเวลาเปน O(|V| + |E| )
วงวนแบบ whileการวเคราะหวงวนแบบ while นนจะตองอาศยการสงเกตมากหนอย เพราะจานวนรอบททานนไมไดระบอยางชดเจนเหมอนอยางวงวนแบบ for เราตองดเงอนไขทจะหลดจากวงวน whileแลวหาวาตวแปรทมผลตอเงอนไขนมการเปลยนแปลงคาอยางไร จะขอยกตวอยางดงตอไปน
ตวอยางท 4-11 จงวเคราะหอลกอรทมตอไปน01: while ( n > 0 )02: n = � n / 2 �;
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 51
ใหสงเกตวา วงวนนจะเลกทางานเมอ n � 0 กตองมาดวาคาของ n เปลยนแปลงอยางไร คาของ n นนลดลงทละครง (ปดเศษทง) กแสดงวา n จะตองจบลงทศนยอยางแนนอน (เปนทรกนวา nจะมคาเรมดวยจานวนไมตดลบนะ) การทมคาลดลงทละครงนน n ในรอบท k ยอมมคา n / 2k
กอนท n จะมคาเปนศนยแลวเลกทางานนน n กตองเทากบ 1 ดงนนรอบททาให n มคาเปน 1 กคอ k = lg n ดงนนเวลาการทางานเปน �( lg n )
ตวอยางท 4-12 จงวเคราะหอลกอรทมตอไปน01: i = 1; j = n;02: while ( i < j ) {03: i = i+3;04: j = j–5;05: }
วงวนนทางานตราบเทาท i < j โดยท i มคาเรมตนทนอยกวา j i เพมทละสาม j ลดลงทละหาแสดงวาจะตองมชวงท i � j แลวหลดจากวงวนแน และคาของ i และ j จะเขยบเขาหากนทละ 8แสดงวา จานวนรอบทหมนในวงวนมคาอยางมาก n/8 รอบ ดงนนเวลาการทางานเปน �( n )
ตวอยางท 4-13 จงวเคราะหอลกอรทม insertion sort ตอไปน01: Insertion_Sort( A[1..n] )02: {03: for (j = 2 to n) {04: key = A[j]05: i = j–106: while (i>0 and A[i]>key) {07: A[i+1] = A[i]08: i = i–109: }10: A[i+1] = key11: }12: }
เรามาสนใจกนทวงวนแบบ while ในบรรทดท 6 ถง 9 กอน ชดคาสงภายในวงวนใชเวลา �(1) วงวนจะเลกทางานเมอ i � 0 หรอ A[i] � key สาหรบกรณทเลกเมอ i � 0 นน เนองจาก i มคาลดลงทละหนงในบรรทดท 8 แสดงวาจานวนรอบการทางานเปน O(i) สวนอกเงอนไขนนมนขนลกษณะของขอมลทเกบอยใน A ทเราไมร ดงนนขอบเขตบนของจานวนรอบทเรามนใจแนวาจะหลดจากวงวนกคอ O(i) เนองจากกอนเขาวงวน i = j–1 ในบรรทดท 5 แสดงวาจานวนรอบทหมนในวงวนแบบ while นกคอ O(j) กมาถงวงวนแบบ for วงนอก การทางานของบรรทดท 4, 5 และ 10 นนเปน �(1) เมอพจารณารวมกบภาระทตองทาในวงวนแบบ while
52 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
สรปไดวาตองใชเวลาทาชดคาสงภายในวงวนแบบ for รอบท j เปน O(j) เนองจากวงวนแบบ for นหมนเปลยน j จาก 2 ถง n ดงนนสรปวาเวลาการทางานทงหมดเปน �
�
�nj j2 )( = O(n2)
ตวอยางท 4-14 จงวเคราะหอลกอรทมการหา ห.ร.ม. ของยคลดตอไปน01: GCD( m, n )02: {03: while ( m > 0 ) {04: t = m05: m = n mod m06: n = t07: }08: return n09: }
เงอนไขของวงวนแบบ while ในบรรทดท 3 ระบวาการทางานจะสนสดเมอ m � 0 เนองจากคา m ทไดรบมาเปนจานวนบวก และใหสงเกตวา m มคาเปลยนไปในทางทลดลงในบรรทดท 5 (เพราะผลทไดจาก n mod m ตองมคาระหวาง 0 ถง m–1) ดงนนวงวนนตองจบการทางานแนเมอ m มคาเทากบ 0 แลววงวนนจะหมนสกกรอบ ? กอนอนจะขอพสจนใหเหนวาตลอดเวลานน n mod m < n/2 โดยแบงการพจารณาออกเปน 2 กรณคอกรณท m � n/2 และ กรณท m > n/2 ดงน กาหนดให n � m
กรณท m � n/2 : เนองจาก n mod m มคาระหวาง 0 ถง m–1 ซง'ตองนอยกวา m และ m � n/2 ดงนน n mod m < n/2
กรณท m > n/2 : จาก n � m แสดงวา �n/m � � 1 และจาก m > n/2 แสดงวา n/m < 2 สรปไดวา �n/m � = 1 ดงนน n mod m = n – m�n/m � = n – m < n – n/2 = n/2
เราไดพสจนแลววา n mod m < n/2 ตลอดเวลา เนองจากคาของ n ในรอบนกคอคาของ m ในรอบกอน (ดบรรทดท 4 และ 6) และ m ในรอบหนาจะมคา n mod m ดงนนการท n mod m <n/2 นนบอกเราวาคาของ m ในรอบหนาจะนอยกวาคาของ m/2 ในรอบกอน การลดลงของคา m ทนอยกวาทละครงนนแสดงใหเหนวา จานวนรอบซงกคอเวลาการทางานเปน O( log n )
ตวอยางท 4-15 จงวเคราะหอลกอรทมการหาคานอยสดในตนไมคนแบบทวภาคตอไปน
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 53
01: BinaryNode findMin( BST T )02: {03: BinaryNode p;04:05: p = T.root;06: if ( p != NULL ) {07: while ( p.left != NULL ) {08: p = p.left;09: }10: }11: return p;12: }
ดจากอลกอรทมนอยางเดยวคงบอกอะไรไมได ถาไมรเรองอะไรเลยเกยวกบตนไมคนแบบทวภาค แตถายงจาสงทเรยนในวชาโครงสรางขอมลไดบาง กพอจะรวา การหาคานอยสดในตนไมคนแบบทวภาค (ซงขอมลทงหมดในตนไมยอยดานซายตองมคานอยกวาขอมลทราก) คอการเรมจากรากของตนไม (บรรทดท 5) แลววงไปยงโหนดทมคานอยกวา (นนคอวงไปทางลกซายในบรรทดท 8) ไปเรอยๆ ตราบเทาทยงพบโหนดทมโหนดอนทนอยกวา (กคอเงอนไขโหนดทยงมลกซายในบรรทดท 7) ดงนนจะหยดเมอพบโหนดทไมมใครนอยกวา (โหนดทไมมลกซาย) ซงกคอโหนดทคานอยสด
แลวอลกอรทมนใชเวลาเทาไร ในทนขนาดของขอมลขาเขากคอขนาดของตนไม ซงแทนไดโดยตรงดวยจานวนโหนด กาหนดให n คอจานวนโหนด เนองจากตนไมคนแบบทวภาคมโอกาสจะมรปรางเลวรายในลกษณะทโหนดตางๆ ของตนไมเรยงกนเปนแนวยาวไปทางซายมอตลอด นนคอการวงไลไปหาลกทางซาย (ในบรรทดท 8) นนตองผานทกๆ โหนดในตนไม แสดงวาเวลาการทางานเปน O(n)
การเรยกแบบเวยนเกดลกษณะการเขยนอลกอรทมทเราจะพบบอยมากๆ เลย กคอการเรยกแบบเวยนเกด (recursivecall) การเรยกในลกษณะนตวอลกอรทมตองประกนวาขนาดของตวปญหาตองเลกลง และเมอถงจดทมขนาดเลกพอ กจะเลกเรยกแบบเวยนเกด และหนไปทางานในลกษณะธรรมดาเพอหาคาตอบ ในการวเคราะหนนเราสามารถบรรยายเวลาการทางานของอลกอรทมทมการเรยกแบบเวยนเกดดวยความสมพนธเวยนเกด (recurrence) ของเวลาการทางานไดตรงเลย ดงน
� กาหนดให t(n) ใหเปนเวลาการทางานของการแกไขปญหาทมขนาด n
� บรรทดใดในอลกอรทมทเปนการเรยกแบบเวยนเกดกใหเขยนเวลาการทางานของบรรทดนนเปน t(m) โดยท m คอขนาดของขอมลขาเขา (ทตองมขนาดเลกลง)
54 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
� บรรทดอนๆ ทไมไดเปนการเรยกแบบเวยนเกดกวเคราะหเวลาการทางานเชงเสนกากบแบบทไดกลาวมา
� เขยนความสมพนธเวยนเกดของ t(n) ใหเทากบ ผลรวมของสองขอทหาไดขางบน
� หาผลเฉลยของ t(n) ในรปของสญกรณเชงเสนกากบ
ตวอยางท 4-16 จงวเคราะหอลกอรทม SelectionSort ตอไปน01: SelectionSort( A[1..n] )02: {03: if ( n <= 1 ) return;04: j = indexMax( A[1..n] );05: Swap( A, n, j );06: SelectionSort( A[1..n–1]07: }
ในสวนทไมใชการเรยกแบบเวยนเกดนนมบรรทดท 4 เปนคาสงมาตรเวลา ซงถกใชงานเปน �(n) (จากตวอยางท 4-1) สวนบรรทด 6 เปนการเรยกแบบเวยนเกดทมขนาดของขอมลขาเขาลดลงหนง ดงนนเวลาการทางานเปน t(n) = t(n–1) + �(n) สาหรบ n > 1, t(1) = �(1) หาผลเฉลยโดยวธการคล ดงน
t(n) = t(n–1) + �(n)= t(n–2) + �(n–1) + �(n)
= ��
�ni
i1
)(
= �(n2)
ตวอยางท 4-17 จงวเคราะหอลกอรทมการคนแบบทวภาค (binary search) ตอไปน01: BinarySearch( A[left..rght], x )02: {03: if ( left > rght ) return –1;04: m = (left + rght) / 2;05: if ( x == A[m] ) return m;06: if ( x < A[m] )07: return BinarySearch( A[left..m–1],x);08: else09: return BinarySearch( A[m+1..rght],x);10: }
บรรทดท 3 ถง 5 ใชเวลาเปน �(1) สวนบรรทดท 6 ถง 9 ใชเวลาเปน �(1) + t( n/2 ) ดงนนไดเวลาการทางานเปน t(n) � t(n/2) + �(1) สาหรบ n > 1, t(1) = �(1) (ใหสงเกตวาความสมพนธ
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 55
เวยนเกดทเขยนใชเครองหมาย � เพราะวาบรรทดท 6 ถง 9 ถกใชงานกเมอเงอนไขในบรรทดท 5 เปนเทจ หาผลเฉลยโดยวธการคล ดงน
t(n) � t(n/2) + �(1)� t(n/22) + �(1) + �(1)…
� t(n/2k) + ��
�ki
i1
)(
� �(1) + ��
�n
ilg
1)1(
� �( log n )= �( log n )
จากสองตวอยางทผานมา ไดแสดงใหเหนวาความสมพนธเวยนเกดของเวลาการทางานนนเขยนไดอยางตรงไปตรงมาจากตวอลกอรทม ภาระทยงยากกคอการหาผลเฉลยของความสมพนธเวยนเกด ซงตองอาศยความรทไดเคยเรยนมาในวชา discrete math. หลากหลายวธขนกบลกษณะของความสมพนธเวยนเกด ประกอบกบการใชสญกรณเชงเสนกากบ ในกรณทเราพบความสมพนธเวยนเกดแบบแบงแยกและเอาชนะ (divide and conquer recurrence) นน มวธหาผลเฉลยงายๆ ทไดคาตอบในรปของสญกรณเชงเสนกากบอยสองวธทใชบอยดงน
การใชตนไมจาลองการเวยนเกดเราใชตนไมจาลองการเวยนเกด (recursion tree) โดยทแตละโหนดของตนไมแทนการเรยกแบบเวยนเกด 1 ครง โดยมภาระทไมใชสวนทเปนการเรยนแบบเวยนเกดในอลกอรทมกากบทโหนด ถาโหนดใดตองเรยกแบบเวยนเกดตอ โหนดนนกจะมลกเปนจานวนตามจานวนครงทตองเรยกแบบเวยนเกดโดยขนาดของปญหาทโหนด ลกจะลดลงตามความสมพนธเวยนเกด แนนอนวาขนาดของปญหาตองลดลงเรอยๆ จนกระทงเปนกรณทไมตองเรยกแบบเวยนเกดตอ ผลเฉลยกคอผลรวมของภาระตามโหนดตางๆ ทงหมดในตนไม วธนดๆ ไปคลายๆ กบการคล แตการวาดเปนตนไมนนบางครงชวยใหเราจดการการคลไดงายขน
ตวอยางท 4-18 จงหาผลเฉลยของ t(n) = 2t(n/2) + �(n) สาหรบ n > 1, t(1) = �(1)
เรมทรากมขนาดของขอมลเปน n แสดงวาภาระทรากเปน �(n) แตละโหนดม 2 ลก (มาจากเลข 2 ทคณพจน t(n/2) ) โดยทขนาดของปญหาทลกเปนครงหนงของทพอ (มาจากการท n ถก
56 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
หารดวย 2 ในพจน t(n/2)) จะไดตนไมดงรปท 4–1 ตนไมนสง lg n ผลรวมภาระในแตละระดบจะเทากบ �(n) เนองจากมทงหมด lg n ระดบ ภาระรวมจงเปน �(n log n)
n
n/2 n/2
n/4 n/4 n/4
1 1 1 1
n/4
…
…
n
n
n
n
lg n
…
�( n log n )
รปท 4–1 ตนไมการเวยนเกดของ t(n) = 2t(n/2) + �(n)
ตวอยางท 4-19 จงหาผลเฉลยของ t(n) = 2t(n/2) + �(n2) สาหรบ n > 1, t(1) = �(1)
เราเขยนตนไมจาลองการเวยนเกด ในทานองเดยวกนกบตวอยางทแลว ไดเปนตนไมดงรปท 4–2 ทมกเขยนผดกคอการนาภาระทโหนดพอมาหาร 2 ไดเปนภาระทโหนดลก ทถกจะตองเปนขนาดของปญหาทโหนดพอหาร 2 ไดเปนของทลก แลวทนาขนาดของปญหาทไดไปคานวณภาระ เชนในรปท 4–2 ขนาดของปญหาทโหนดในระดบท 1 (กาหนดใหรากอยระดบท 0) มขนาดของปญหาเปน n/2 ดงนนขนาดของปญหาทโหนดในระดบท 2 กจะเปน n/4 จงมภาระเปน (n/4)2
n2
(n/2)2 (n/2)2
(n/4)2
1 1 1 1…
…
n2
(1/2)n2
(1/4)n2
(1/2lg n) n2
lg n
…
�( n2 )(n/4)2 (n/4)2 (n/4)2
รปท 4–2 ตนไมการเวยนเกด t(n) = 2t(n/2) + �(n2)
สรปไดวาโหนดระดบท k มขนาดของปญหาเทากบ n/2k มภาระเทากบ (n/2k)2 เนองจากมโหนดในระดบท k ทงสน 2k โหนด ดงนนจงมภาระรวมทกโหนดในระดบท k เปน 2k(n/2k)2 = n2/2k
ตนไมนสง lg n ดงนนภาระรวมทงหมดจงเปน
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 57
� � � �22lg
0
2lg
0
2)2(
2
1
2nnnn n
kk
n
kk
�������
�
�
��
�
��
��
�
�
��
�
��
�
�
��
�
� ��
��
ตวอยางท 4-20 จงหาผลเฉลยของ t(n) = t(an) + t(bn) + �(n) โดยท 0<b<1,0<a<1 และ a+b < 1
จากความสมพนธเวยนเกดเขยนไดเปนตนไมจาลองการเวยนเกด ไดดงรปท 4–3 จดสาคญของการสงเกตตนไมนกคอภาระรวมในแตละระดบ นนคอภาระรวมในระดบท k เทากบ (a+b)knเนองจากตนไมนสง logc n โดยท c = min( 1/a, 1/b) นนคอสงเปน �(log n) ดงนนภาระรวมทง
ตนเทากบ )()(1
1)())((0
log
0nn
babannba
k
kn
k
kc����
�
����
�
��
��
�
�
��
�
���� ��
�
��
n
an bn
a2n
1 1 1 1…
…
n
(a+b)n
(a+b)2n�(log n)
…
�( n )abn ban b2n
รปท 4–3 ตนไมการเวยนเกด t(n) = t(an) + t(bn) + �(n), 0<b<1,0<a<1 และ a+b<1
เราสามารถขยายผล (ลองทาดเอง) ทไดจากตวอยางขางบนนวา สาหรบความสมพนธเวยนเกด
)()()(1
nnTnTk
ii ����
�
� โดยท 0<i<1 และ 11
���
k
ii�
จะไดผลเฉลยเปน t(n) = �(n)
การใช master methodวธนจะชวยเราในการหาผลเฉลยของความสมพนธเวยนเกดในรปแบบ
t(n) = at(n/b) + f(n) โดยท a � 1, b > 1
ไดงายมากๆ โดยตรวจสอบวา a, b และ f(n) ตกอยในกรณใดในสามกรณตอไปน กจะไดคาตอบทนท
58 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
1. ถา f(n) = �(n(logb a)–� ) สาหรบคาคงตว > 0 สกตวหนง แลว t(n) = �(nlogb a )
2. ถา f(n) = �(n(logb a) ) สาหรบคาคงตว > 0 สกตวหนง แลว t(n) = �(nlogb a log n )
3. ถา f(n) = �(n(logb a)+� ) สาหรบคาคงตว > 0 สกตวหนง และ af(n/b) � cf(n) สาหรบคาคงตว c < 1 สกตว เมอ n มคาใหญพอ แลว t(n) = �( f(n) )
(วธพสจนนนไมยงยาก จะขอละไมแสดงใหด) ตองขอเนนตรงนวาทงสามกรณขางบนน ไมไดครอบคลมความสมพนธเวยนเกดในรปแบบดงกลาวทเปนไปได (เชน T(n) = 2T(n/2) + nlog n) ซงจาตองอาศยกลวธอนๆ แทน
ตวอยางท 4-21 จงหาผลเฉลยของ t(n) = 9t(n/3) + n
จากโจทย a = 9, b = 3, log39 = 2 และ f(n) = n ตรงกบเงอนไขในกรณท 1 คอ n = �(n2 – 0.1 ) =
�(n1.9 ) ได �(n2) เปนผลเฉลย
ตวอยางท 4-22 จงหาผลเฉลยของ t(n) = t(n/3) + 1
จากโจทย a = 1, b = 3, log31 = 0 และ f(n) = 1 ตรงกบเงอนไขในกรณท 2 คอ 1 = �(n0 ) ได �( n0 log n ) = �( log n ) เปนผลเฉลย
ตวอยางท 4-23 จงหาผลเฉลยของ t(n) = 3t(n/4) + n log n
จากโจทย a = 3, b = 4, log43 < 0.8 และ f(n) = n log n ตรงกบเงอนไขในกรณท 3 คอ
� n log n = �(n0.8 + 0.2 )
� 3f(n/4) = 3(n/4) log (n/4) = (3/4)n log (n/4) � (3/4) n log n
ได �( f(n) ) = �( n log n ) เปนผลเฉลย
นอกจาก master method จะชวยใหเราหาผลเฉลยไดสะดวกรวดเรวแลว ยงชวยเราตความเพอระบสวนของอลกอรทมระหวางภาระของการเรยกแบบเวยนเกด(คอ nlogb a ) กบภาระของสวนทไมไดเรยกแบบเวยนเกด (คอ f(n)) ซงเปนตวกาหนดเวลาการทางานทงหมด โดยดจากสามกรณขางตน
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 59
1. เงอนไข f(n) = �(n(logb a)–� ) บอกวาขนาดยอมลดเลขชกาลงลงใหนดหนงแลว (คอคา )พบวา f(n) ยงโตไมเรวกวาเลย เวลาการทางานจงถกกาหนดโดยสวนทเรยกแบบเวยนเกด
2. เงอนไข f(n) = �(nlogb a ) บอกวาภาระทงสองสวนเทากน
3. เงอนไข f(n) = �(n(logb a)+� ) บอกวาขนาดยอมเพมเลขชกาลงใหนดหนงแลว (คอคา )พบวา f(n) ยงโตไมชากวาภาระทเรยก recusive และเงอนไข af(n/b) � cf(n) กสรางความมนใจวาภาระ f(n) ททาในระดบนโตไมชากวาภาระรวมของ f(n) ททาในระดบถดไปเชนกน จงมนใจแนวาเวลาทงหมดถกกาหนดโดย f(n)
จงเปนประโยชนอยางยงตอผออกแบบอลกอรทมทตองการปรบปรงอลกอรทมใหดขน โดยสนใจสวนของอลกอรทมทเปนตวกาหนดเวลาการทางาน
ประเภทของการวเคราะหจากทเราเคยแสดงใหดวาเวลาการทางานของการหาคานอยสดในแถวลาดบนน เปนฟงกชนเชงเสนของจานวนขอมลในแถวลาดบ นนคอเปน �(n) โดยท n เปนจานวนขอมล แนนอนวาจานวนขอมลยงมากเวลาการทางานกยอมตองชาลง สาหรบบางอลกอรทมนนนอกจากประสทธภาพการทางานจะแปรตามขนาดของขอมลขาเขาแลว ยงแปรตามลกษณะของขอมลขาเขาดวย ตวอยางเชนจากอลกอรทมการเรยงลาดบขอมลแบบ insertion sort ทเคยวเคราะหในตวอยางท 4-13 ซงแสดงใหดอกทตอไปน
01: Insertion_Sort( A[1..n] )02: {03: for (j = 2 to n) {04: key = A[j]05: i = j–106: while (i>0 and A[i]>key) {07: A[i+1] = A[i]08: i = i–109: }10: A[i+1] = key11: }12: }
เราพบวาการหมนอยในวงวนแบบ while นนจะสนสด กเมอ i � 0 หรอ A[i] � key (ดบรรทดท 6) ในตวอยางท 4-13 นนเราพจารณาเฉพาะกรณแรกคอ i � 0 สวนกรณ A[i] � key นนขนกบ
60 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
ขอมลในแถวลาดบ A เปนไปไดวาทกครงททางานทบรรทดท 6 เงอนไข A[i] > key เปนเทจในทกๆ รอบ ทาใหไมเคยเขาไปทางานคาสงในวงวนแบบ while เลย ซงกรณนเกดขนเมอขอมลในแถวลาดบนนเรยงตามลาดบทตองการจากนอยไปมากอยแลว เวลาการทางานกจะเปนจานวนรอบทหมนอยวงวนแบบ for โดยไมไดเขาไปหมนในวงวนแบบ while เลย ซงเปน �(n) จงสรปไดวาเวลาการทางานขนกบ
� ขนาดของขอมลขาเขา� ลกษณะของขอมลขาเขา
แลวเราจะวเคราะหอยางไร ถาเวลาการทางานขนกบลกษณะของขอมล เนองจากเราไมทราบลกษณะของขอมลทอลกอรทมนจะนาไปใชงานในขณะททาการวเคราะห กาหนดให In คอเซตของขอมลขาเขาทเปนไปไดทกๆ แบบทมขนาด n ของปญหาหนง และให t(n, i) คอเวลาการทางานของอลกอรทมหนงเมอรบขอมลขาเขาขนาด n แบบท i, i � In เรามแนวทางการวเคราะหอยสามแนวทางในการวเคราะหทจะใหผลทสอความหมาย ในการเปรยบเทยบอลกอรทมตางๆ ดงน
1. การวเคราะหกรณเลวสด (worst case analysis) วธนคดเฉพาะลกษณะของขอมลททาใหกรทางานใชเวลามากสดซงจะเปนตวกาหนดขอบเขตบนของเวลาการทางาน นนคอ
� �),(max)( intntnIi
worst�
�
2. การวเคราะหกรณเฉลย (average case analysis) เนองจากบางครงลกษณะของขอมลททาใหอลกอรทมทางานแบบเลวสดนนมโอกาสเกดขนนอยมากๆ เมอเทยบลกษณะของขอมลแบบอนๆ ดงนนถาเรารความนาจะเปนทลกษณะของขอมลในแบบตางๆ จะเกดขนในทางปฏบตทกๆ แบบ กสามารถหาคาคาดหวงของเวลา ซงเปนเวลาการทางานในกรณเฉลย กาหนดให p(i) คอความนาจะเปนทขอมลขาเขา i จะปรากฏในทางปฏบต จะไดวา �
�
�
nIiavg intipnt ),()()(
สงทเปนอปสรรคในการวเคราะหกรณเฉลยกคอ เรามกไมทราบ p(i) โดยทวไปกเลยกาหนดใหทกๆ กรณเทากนหมด (นนคอ p(i) =
1|In|
) ซงกงายด แตกอาจไมตรงกบความจรง
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 61
3. การวเคราะหกรณถวเฉลย (amortized analysis) ในการวเคราะหเวลาการทางานของการดาเนนการตางๆ ของโครงสรางขอมลชนดหนงนน คงจะรสกมองโลกในแงรายเกนไป ถาเราจะวเคราะหแตกรณเลวสดของทกๆ การดาเนนการ การจดการโครงสรางขอมลนนโดยทวไปเชนเพม คน ลบขอมล นนมกมการกระทาหลายๆ ครงบนโครงสรางขอมลตวเดม เวลาการทางานทใชไปในแตละครงจะไมเหมอนกน บางครงเรว บางครงชา การวเคราะหกรณถวเฉลยน จะวเคราะหรายการของการปฏบตทเลวสด (คอใชเวลามากสด) แลวจงนาเวลาโดยรวมของทงรายการการดาเนนการท กระทาไปถวเฉลยกบจานวนการดาเนนการ (เนองจากการวเคราะหแบบนมรายละเอยดมาก จะขออธบายในบทถดไป)
หลายคนอาจสงสยวาทาไมไมมการวเคราะหกรณดสด (best case) การวเคราะหแบบนกทาไดโดยไดคาตอบเปน � �),(min)( intnt
nIibest
�
� แตผลทไดจะไมไดบอกอะไรเรามาก ตวอยางเชน
การคนขอมลแบบลาดบ (sequential search) ในรายการนนมกรณดสด กคอกรณทตวทจะคนอยทตาแหนงแรกในรายการพอด กเรวทสด เปรยบเทยบครงเดยวกพบ เราไมสามารถเอาผลการวเคราะหกรณดสดมาใชเปรยบเทยบอลกอรทมได เพราะเราสามารถฝงความรเฉพาะกรณของปญหาลงในอลกอรทมกไดเพอใหไดกรณทดสดเรวมากขนได เชนอลกอรทม selection sort ทเขยนใหดในตวอยางท 4-16 นนใชเวลาเปน �(n2) เสมอไมวาลกษณะขอมลจะเปนเชนไร แตถาเพยงแตเราเพมการตรวจสอบกอนวาขอมลในแถวลาดบเรยงจากนอยไปมากอยแลวหรอยง ถาเรยงจะไดไมตองทา selection sort ถาไมเรยงจงจะเรมทา กจะไดผลลพธทมกรณดสดคอ �(n)ซงมเพยงกรณเดยวเทานนในจานวน n! กรณทเปนไปไดของขอมลขาเขา (สมมตใหขอมลเปนจานวนเตมตงแต 1 ถง n) สวนขอมลขาเขาแบบอนๆ ยงใชเวลาเหมอนเดม สรปกคอกรณดสดนนนามาใชเปรยบเทยบไมได อกทงผออกแบบอลกอรทมสามารถเพมกล (ฉลาดแกมโกง !) เพอใหกรณดสดมประสทธภาพดได
สาหรบการวเคราะหกรณเฉลยนน หลายคนคงมความรสกวากรณทเปนไปไดของตวปญหานนอาจมมากมายเปนอนนต สมมตตวอยางงายๆ อยางเชนปญหาการเรยงลาดบขอมล ในกรณทขอมลเปนตวเลข กเหนไดชดวา In มขนาดใหญเปนอนนต แลวเราจะไปหา t(n,i) ของทกๆ i ไดอยางไร โดยทวไปเราจะไมใชวธแจกแจงทกๆ กรณหรอก แตเราจะอาศยความรเกยวกบลกษณะของขอมลขาเขามาเปนตวจากดจานวนกรณใหลดลง เชน ปญหาการเรยงลาดบขอมลนน ถาพจารณาเฉพาะกรณทขอมลทกๆ ตวไมเทากน จะเหนไดวากรณทเปนไปไดทงหมดจะลดรปลงมาเหลอ n! กรณ นนคอสามารถคดเฉพาะกรณทขอมลทจะเรยงลาดบคอจานวนเตม
62 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
1,2,…,n กพอ ซงเหนไดวามกรณเรมตนของลาดบขอมลขาเขาทเปนไปได n! แบบ สมมตวา nเทากบ 4 ขอมลขาเขา 3, 2, 1, 4 กยอมแทนสารพดขอมลขาเขาทมตวมากสดอยทายสด และสามตวแรกเรยงจากมากมาหานอย เชน 30, 20, 10, 40 หรอ 33, 22, 9, 50 และอนๆ อกมากมาย เปนตน
จะขอแสดงตวอยางการวเคราะหกรณเลวสดและ กรณเฉลยในดจานวนหนง เพยงพอใหเหนภาพของสงทตองคานงถงขณะวเคราะห ตวอยางการวเคราะหจะปรากฎอกมากมายในทงวชาน
ตวอยางท 4-24 จงวเคราะหอลกอรทม sequential search ตอไปนในกรณเลวสด และกรณเฉลย01: SequentialSearch( A[1..n], x )02: {03: i = n;04: while ( i > 0 AND A[i] � x )05: ––i;06: return i;07: }
อลกอรทมนมคาสงมาตรเวลาคอบรรทดท 4 ซงทางานเปนจานวนมากสดเทากบ n+1 เพราะ iเรม n ลดลงทละหนงจนถง 0 ดงนนกรณเลวสดจะใชเวลาเปน �(n)สาหรบกรณเฉลยนน สมมตใหขอมลทกๆ ตวใน A มโอกาสถกคนเทาๆ กน เทากบ 1/n ดงนนเวลาการทางานโดยเฉลยในกรณทพบขอมลจะเทากบ 1n +
2n +
3n +…+
nn =
n(n+1)2n =
n+12 = �(n)
ตวอยางท 4-25 จงวเคราะหอลกอรทม binary search ตอไปนในกรณเลวสด และกรณเฉลย01: BinarySearch( A[1..n], x )02: {03: i = 1; j = n;04: while ( i � j ) {05: m = (i+j) / 2 :06: if ( x == A[m] ) return m;07: if ( x < A[m] ) then j = m–1;08: else i = m+1;09: }10: return 0;11: }
binary search ทเขยนขางบบนจะมหลกการทางานเหมอนกบทไดเขยนใหดในตวอยางท 4-17(เพยงแตวาแบบนใชวงวนแบบ while ในขณะทในตวอยางท 4-17 นนใชการเรยกแบบเวยนเกด)
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 63
อลกอรทมนมคาสงมาตรเวลาคอบรรทดท 4 คาของ (j–i+1) มคาเรมตนท n หลงจากนนจะลดลงทละครงในลกษณะเชนนไปเรอยๆ ในกรณเลวสดกจะลดลงจน i > j การลดลงทละครงทาใหเราสรปไดวาเวลาการทางานในกรณเลวสดเปน �(log n)
แตในความเปนจรงแลว เราอาจพบขอมลตวทตองการกอนท i > j กได ถากาหนดใหโอกาสทเราตองการคนขอมลแตละตวในแถวลาดบมเทาๆ กน เทากบ 1/n สาหรบกรณเฉลย ดงนน โอกาสทเราจะหาพบในรอบแรกมเพยงหนงตว (คอตวท n/2) โอกาสทเราจะหาพบในรอบทสองมสองตว (คอตวท n/4 และตวท 3n/4) สงทสรปไดกคอโอกาสทเราจะหาพบในรอบท k ม
2k–1 ตว ดงนนกรณเฉลยจะหมนเปนจานวนรอบ = ��
�n
k
k
nklg
1
12 (เพอความงายขอกาหนดให n
มคาเทากบ 2 ยกกาลงเลขจานวนเตม)
จากความรใน discrete math : 1
)( 1
1�
�
�
�
�
� xxxx
mm
k
k
หาอนพนธทงสองขางได2
1
1
1
)1(11)1(
�
��
�
��
�
�
�
�
�x
xxx
xmkxmmm
k
k
แทน x =2, m = lg n ได 2212)lg1(2 lg1lglg
1
1�����
�
�
�
�nn
n
k
k nk
= n lg n – n + 1
ดงนน��
�n
k
k
nklg
1
12 = lg n –1 + 1n = �(log n) (ทาแทบตายไดกรณเฉลยเทากบกบกรณเลวสด)
ตวอยางท 4-26 จงวเคราะหอลกอรทม binary search ตอไปนในกรณเลวสด และกรณเฉลย01: BinarySearch( A[1..n], x )02: {03: i = 1; j = n;04: while ( i < j ) {05: m = (i+j) / 2 :06: if ( x < A[m] ) then j = m;08: else i = m;09: }10: if ( A[i] == x ) then return i;11: else return 0;12: }
อลกอรทมขางบนนคลายกบในตวอยางทแลว ตางกนตรงทไมมการตรวจสอบวาเทากบตวทตองการคนหรอไมในวงวน (โดยระวงไมตดตวตรงกลางทงนนคอให j = m หรอ i = m ) แลวคอยมาตรวจสอบตอนสดทายทเหลอเพยงตวเดยวแลวหลดจากวงวนวา ใชตวทตองการหรอไม
64 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
อลกอรทมนหมนอยในวงวนเปนจานวน lg n รอบแนนอนไมวาลกษณะขอมลจะเปนเชนไร ดงนนกรณเลวสดและกรณเฉลย (รวมทงกรณดสด) ใชเวลาเปน �(log n) ทงสน
ดๆ ไปอลกอรทมนนาจะทางานในทางปฏบตชากวาแบบทเขยนในตวอยางทแลว แตความจรงจะถาพจารณาโดยนบจานวนการเปรยบเทยบเปนหลก ตอหนงรอบ แบบทเขยนในตวอยางนใชแคหนงเปรยบเทยบ ในขณะทแบบของตวอยางทแลวใชสองเปรยบเทยบ สรปจานวนการเปรยบเทยบทงหมดเปนดงน (ขอใหไปลองนบจานวนการเปรยบเทยบใหละเอยดดเอง จะไดดงตารางท 4–1)
ตารางท 4–1 จานวนการเปรยบเทยบของการคนแบบทวภาค
ตวอยางทแลว ตวอยางนกรณหาขอมลพบ กรณเลวสด 2( lg n – 1 ) + 1 1 + lg n กรณเฉลย 2( lg n – 2 + 1/n ) + 1 1 + lg nกรณหาขอมลไมพบ กรณเลวสด 2 lg n 1 + lg n กรณเฉลย 2 lg n 1 + lg n
อยางไรกตามหากวเคราะหเชงเสนกากบแลวกพบวาทกๆ กรณเปน �(log n) ทงสน
ตวอยางท 4-27 จงวเคราะหอลกอรทม insertion sort ตอไปนในกรณเฉลย01: Insertion_Sort( A[1..n] )02: {03: for (j = 2 to n) {04: key = A[j]05: i = j–106: while (i>0 and A[i]>key) {07: A[i+1] = A[i]08: i = i–109: }10: A[i+1] = key11: }12: }
เราไดวเคราะห insertion sort กนมาทหนงแลวในตวอยางท 4-13 ซงเราไดวาใชเวลาเปน O(n2) ผลทไดเปนโอใหญซงระบขอบเขตบน เพราะเราพจารณาเฉพาะเงอนไข i > 0 เทานนทบรรทด
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 65
ท 6 คราวนเราจะมาดเงอนไข A[i] > key ซงขนกบลกษณะของขอมลใน A ในการวเคราะหกรณเฉลย
ถาเงอนไข A[i] > key เปนจรงตลอด จานวนรอบทหมนใน while กถกกาหนดโดยเงอนไข i > 0 ซงคอกรณเลวสดใชเวลาเปน �(n2) เงอนไข A[i] > key เปนจรงตลอดไดกเพราะวาขอมลใน Aนนเรยงจากมากไปนอยนนคอ A[1] > A[2] > A[3] > … > A[n] จงตองมการยายขอมลในวงวนแบบ while จน A[j] ซงคอขอมลตวใหมทกาลงพจารณาจะถกใสในชองแรกเสมอ
แตถาเปนเงอนไข A[i] > key เปนเทจทนทเมอตอนตนของวงวน กจะไมเขาไปทางานในวงวนเลย เปนกรณดสด นบจานวนรอบทงหมดกเพยงแคทหมนในวงวนแบบ forใชเวลาเปน �(n) เหตการณเชนนเกดขนไดกเมอขอมลใน A นนเรยงจากนอยไปมาก นนคอ A[1] < A[2] < A[3] < … < A[n] ดงนน A[j] จงไมตองยายไปไหน อยในชองเดม
แลวถาเปนกรณเฉลยจะเปนเชนไร เวลาการทางานกขนอยกบวา A[j] ทเปนขอมลตวใหมทกาลงพจารณาหาทแทรกวาจะลงทชอง 1, 2, 3, …, หรอ j (ซงเปนหนาทของวงวนแบบ while ในอลกอรทม ถาเรากาหนดใหการทขอมลตวใหมตวท j จะถกนาไปลงทตาแหนงตางๆ กนทง jชองนน มความนาจะเปนเทาๆ กน ดงนนเวลาโดยเฉลยของการทางานทงอลกอรทมจะเปน
� ��� �� ��� �� �
����
���
� �
���
�
�
���
�
��
���
�
�
���
�
� n
j
n
j
j
i
n
j
j
inji
jji
2
2
2 12 12
11
ทผานมาเราไดเหนตวอยางตางๆ ทมประสทธภาพเชงเวลาในกรณเลวสด และกรณเฉลยนนเทากน เราจะไดเหนตวอยางของอลกอรทมทกรณเลวสดนนแยกวากรณเฉลยกนตอไป (เชน quick sort ใชเวลากรณเลวสดเปน �(n2) แตในกรณเฉลยจะเปน �(n log n) )
การวเคราะหโดยทวไปทจะใชกนในวชานจะเปนกรณเลวสด เนองจากงาย และกมกสะทอนถงประสทธภาพในทางปฏบตจรง อยางไรกตามเราจะใชการวเคราะหในกรณเฉลยหรอถวเฉลย บางเปนครงคราว
66 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
แบบฝกหด1. จงวเคราะหเวลาการทางาน (เปนฟงกชนของ n) ของสวนของอลกอรทมตอไปน
01: s = 002: for ( i=1 to n )03: for ( j=i+1 to n )04: for ( k=1 to j )05: ++s
2. จงวเคราะหเวลาการทางาน (เปนฟงกชนของ n) ของสวนของอลกอรทมตอไปน01: s = 002: for ( i=1 to n )03: for ( j=1 to i )04: for ( k=j to i+j )05: ++s
3. จงวเคราะหเวลาการทางาน (เปนฟงกชนของ n) ของสวนของอลกอรทมตอไปน01: s = 002: for ( i=1 to n )03: for ( j=1 to i )04: for ( k=j to i+j )05: for ( m=1 to i+j–k )06: ++s
4. จงวเคราะหเวลาการทางาน (เปนฟงกชนของ n) ของสวนของอลกอรทมตอไปน01: s = 002: for ( i=1 to n )03: for ( j=i+1 to n )04: for ( k=i+j–1 to n )05: ++s
5. จงวเคราะหเวลาการทางาน (เปนฟงกชนของ n) ของสวนของอลกอรทมตอไปน01: s = 0 02: while (n > 0) {03: n = � n/8 �;04: sum++;05: }
6. จงวเคราะหเวลาการทางาน (เปนฟงกชนของ n) ของสวนของอลกอรทมตอไปน01: i=0; j=n; s=002: while ( i < j ) {03: i = i+2;04: s++;05: j = j–3;06: }
7. จงวเคราะหเวลาการทางาน (เปนฟงกชนของ n) ของอลกอรทมตอไปน
Draft 1.0 : 24/10/00 5:03 : [email protected] บทท 4 การวเคราะหอลกอรทม 67
01: Dummy( n )02: {03: if ( n <= 0 ) return04: for ( i=1 to n )05: for ( j=1 to n )06: s++07: for ( i=1 to 4 )08: Dummy( n/4 )09: }
8. พจารณาอลกอรทมขางลางน กาหนดใหการ Print(x[1..n]) ในบรรทดท 4 ใชเวลาเปน �(n) การ Swap ในบรรทดท 7 และ 9 ใชเวลาคงตว จงหาวาเมอเราเรยก WhatsThis( x[1..n], 0 ) จะใชเวลาเทาไร (ตอบในรปของ �)
01: WhatsThis( x[1..n], k )02: {03: if ( k == 0 ) for(i=1 to n) x[i] = i04: if ( k == n ) Print( x[1..n] )05: else {06: for (i=k+1 to n) {07: Swap( x[k+1], x[i] );08: WhatsThis( x[1..n], k+1 )09: Swap( x[i], x[k+1] );10: }11: }
9. จงใชตนไมจาลองการเวยนเกดเพอหาผลเฉลย (ในรปของ �) ของความสมพนธเวยนเกดตอไปนก) T(n) = 4T(�n/2�) + nข) T(n) = 2T(n/2) + n lg n
10. จงใช master method เพอหาผลเฉลย (ในรปของ � ) ของความสมพนธเวยนเกดตอไปนก) T(n) = 4T(n/2) + nข) T(n) = 4T(n/2) + n2
ค) T(n) = 4T(n/2) + n3
11. ปญหาหนงสามารถหาคาตอบไดโดยใชอลกอรทม A ทมเวลาเปน TA(n) = 7TA(n/2) + n2 และอลกอรทม B กแกปญหานไดแตใชเวลา TB(n) = aTB(n/4) + n2 จงหาคาของ a (จานวนเตม) ทมากสดทยงทาให B ทางานเรวกวา A ในเชงเสนกากบ
12. จงแสดงใหเหนจรงวา ถา )lg()/()( log nnbnaTnT kab��� โดยท k � 0 จะไดผลเฉลย )lg()( 1log nnnT kab �
��
68 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 24/10/00 5:03 : [email protected]
13. จงวเคราะหจานวนการเปรยบขอมลทเกดขนในการคนแบบทวภาคตามอลกอรทมทแสดงในตวอยางท 4-25 และตวอยางท 4-26 เพอแสดงทมาของตารางท 4–1
14. จงวเคราหเวลาการทางานรณเลวสด และกรณเฉลยของการเรยงลาดบแบบฟอง (bubble sort)
15. อลกอรทมขางลางน มขนตอนการทางานคลายกบการหาตาแหนงทมคานอยทสดในแถวลาดบ A เพยงแตมเพมการเรยกฟงกชน LongProcess (บรรทดท 7) ทกครงทพบตาแหนงใหมทมคานอยกวาท เคยพบมา จงวเคราะหจานวนครงโดยเฉลยทฟงกชน LongProcess จะถกเรยกใช ในอลกอรทมขางลางน (กาหนดใหแถวลาดบ A เกบจานวนเตมทแตกตางกนหมด)
01: Exercise( A[1..n] )02: {03: m = 104: for ( i=2 to n ) {05: if ( A[i] < A[m] ) {06: m = i07: LongProcess( A, m )08: }09: }10: }
Draft 1.0 : 30/10/00 4:52 : [email protected] 69
บทท 5
ถาเรามอลกอรทมหนงทประกอบดวยวงวนทมการเรยกชดคาสง P หลายๆ ครง หาก f(n) คอเวลาการทางานกรณเลวสดของ P หนงครง เวลารวมกรณเลวสดของวงวนทมการเรยก P เปนจานวน m ครงกคงเปน �(mf(n)) นกเรยนสงสยไหมวาทาไมไมกลาสรปวาเปน �(mf(n))เหตผลกเพราะวา มนไมแนวาการเรยก P หลายๆ ครงในกรณเลวสดนน ไมจาเปนวา P ตองทางานเลวสดเปนจานวน �(m) ครงเสมอไป
หลายอลกอรทมมการทางานในลกษณะนโดยเฉพาะอยางยงเมอ P มการยงเกยวกบการดาเนนการ (operation) ตางๆ กบโครงสรางขอมลหนงๆ ทงนเพราะวาการดาเนนการตางๆ อาทเชน เพม ลบ หรอคนขอมล ทเกดขนบนโครงสรางขอมลนนจะเกดขนบอยๆ และใชเวลาไมคอยเทากน ขนกบสภาพของโครงสรางขอมลขณะนนๆ ถาวเคราะหเฉพาะในกรณเลวสด อาจพบวาการดาเนนการนนชามาก แตพอคดแบบถวเฉลยแลวจะพบวาเรวกวาทคาด (เพราะวานานๆ ถงจะชาสดๆ สกท)
ตวอยางเชนโครงสรางขอมลแบบตนไมชนดหนงเรยกวาตนไม splay มลกษณะคลายๆ กบ ตนไมคนแบบทวภาคจะตางกนตรงทโครงสรางของตนไม splay จะมการปรบตวเองเมอมการดาเนนการกบขอมลในตนไม ไมวาจะเปนการเพมลบหรอแมกระทงคนขอมลในตนไม (ผมจะไมลงรายละเอยดของตนไม splay ในทน แคขอยกผลมาใหด) ถาเราวเคราะหกรณเลวสดของการเพม ลบ หรอคนขอมลนนจะพบวาทกคาสงใชเวลาเปน �(n) ทงสน เชนเดยวกบตนไมคนแบบทวภาค (เพราะวาโหนดตางๆ ในตนไมอาจเรยงกนเปนแนวยาวลงมา ทาใหสง �(n) ได) สงทแตกตางกนระหวางตนไม splay กบตนไมคนแบบทวภาคกอยตรงทวา สมมตใหมการดาเนนการกบตนไมเปนจานวน m ครง กรณเลวสดทเปน �(n) ของตนไมคนแบบทวภาคสามารถเกดขนตดๆ กนไดทง m ครงทาใหใชเวลารวมเปน �(mn) ในขณะทเหตการณทกรณ
การวเคราะหกรณถวเฉลย
70 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
เลวสดเกดขนตลอด จะไมเคยเกดขนเลยกบตนไม splay ซงเราสามารถพสจนใหดไดดวยวา ไมวาจะเปนการดาเนนการชดใดๆ กตามทม m ครง เวลารวมจะเปน �(m log n) หรออกนยหนงลาดบของ m การดาเนนการทเลวสดบนตนไม splayใชเวลาเปน �(m log n) เมอคดแบบถวเฉลยตอการดาเนนการหนงๆ กนา m ไปหารไดเปน �(log n)
เวลา
จานวนการดาเนนการ
� เวลาทางานจรง
� เวลาถวเฉลย
� เวลาเลวสด
รปท 5–1 การวเคราะหกรณเลวสด และกรณถวเฉลย
รปท 5–1 แสดงการเปรยบเทยบผลทไดจากการวเคราะหกรณเลวสด กบกรณถวเฉลย ของเวลาทสะสมตามจานวนการดาเนนการ เมอคดมาจากการนาเวลาในกรณเลวสดมาคณดวยจานวนการดาเนนการ จะหางจากเวลารวมจรงมาก การวเคราะหกรณถวเฉลยจะใหเวลารวมทเปนขอบเขตบนของเวลารวมจรงทตากวาเวลารวมกรณเลวสด มโครงสรางขอมลหลายๆ ตวทมพฤตกรรมเชนน ซงเปนพฤตกรรมทเหตการณทกรณเลวสดของการดาเนนการจะเกดขนตดๆ กนนนไมม ดงนนเมอคดแบบถวเฉลยจะไดผลดกวา บางคนอาจสงสยวาเรากาลงพยายามวเคราะหเพอหาผลทเขาขางตวในทางทดหรอไม ตองตอบวาใช คอพอมองกรณเลวสดเฉพาะการดาเนนการหนงๆ นนไมด กเลยมามองกรณเลวสดของลาดบของหลายๆ การดาเนนการแทน ซงใหผลดกวา แตนไมใชการโกงผลการวเคราะห แตกลบเปนการสะทอนถงเหตการณทเกดขนจรง ในการใชงานโครงสรางขอมลหนงๆ ซงจะตองมการดาเนนการเกดขนกบโครงสรางขอมลตวนนมากมายหลายๆ ครง
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 71
Stack แบบม multipopเรามาดตวอยางแรกกนเลยดกวา กาหนดให MStack คอโครงสรางขอมลประเภทหนงทมลกษณะเหมอนกบ stack ทกประการคอรองรบการดาเนนการ push, pop ได ทจะมพเศษเพมจาก stack กคอการดาเนนการ multipop ซงรบพารามเตอร k เพอระบวาจะให pop ขอมลออกจาก stack เปนจานวน k ตว (ถา stack มไมถง k ตวก pop เทาทจะ pop ได)
จากวธการสราง stack ทเคยเรยนกนมาในวชาโครงสรางขอมลนน พบวาการ push และ pop นนใชเวลาคงตว (ไมขนกบขนาดของ stack) เราสามารถเขยน multipop ดวยรหสเทยมดงน
01: multipop( Stack S, int k )02: {03: while (not empty(S) AND (k � 0) ) {04: pop( S );05: ––k;06: }07: }
บางคนอาจอยากทวงวาทาไมไมเขยนแบบเลอน top of stack เลยกสนเรองใชเวลาคงตวดวย ขอบอกตรงนกอนวานเปนการสาธตใหเหนของเลว ! กมาดกนกอนวาเลวเพยงใด เหนไดชดเลยวา multipop ใชเวลาแปรตาม min( k, n ) โดยท n คอจานวนขอมลใน stack หรอจะพดวาใชเวลากรณเลวสดเปน �(n)
คราวนเรามาดชดของการดาเนนการ push, pop และ multipop จานวน n การดาเนนการ เหนไดวาขนาดของ stack กจะมไดอยางมาก n (เพราะมอยางมาก n push) multipop ในชดนยอมใชเวลามากสดเปน �(n) ชดของการดาเนนการนจะเลวสด กตองประกอบไปดวยของทเลวสดๆ นนคอเมอม multipop เปนจานวนมากๆ ถามจานวน multipop เปน O(n) เวลารวมกเปน �(n2)
วเคราะหแบบนกไดขอบเขตบนทถก แตจะหลวม คอไมตาจรง เพราะความรสกบอกเราวา เราจะทาแต multipop อยางเดยวคงไมได เพราะถาไมม push ขอมลเลยแลวจะไปเอาทไหนมา pop พอ multipop แบบเลวใหหมด stack ไปแลว กตองรอ push เขามามากๆ กอน แลวคอย multipop จะไป multipop แบบเลวๆ ตดๆ กนยอมทาไมได
ในเมอเวลาแปรตามจานวนขอมลทถก push และถก pop โดยทขอมลตวใดทถก push เขาใน stack มสทธถก pop ไดอยางมากแคหนเดยว ซงจะเปนการ pop ทกระทาจากการดาเนนการ pop หรอจาก multipop กตาม ดงนนถาเรามชดการดาเนนการ push, pop และ multipop จานวน n
72 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
ครง กยอมสามารถ push ขอมลไดอยางมาก n ตว กแสดงวาสามารถ pop (จาก pop หรอ multipop) ไดอยางมากเทากบทได push ดงนนเวลาของชดการดาเนนการใดๆ ใชเวลาเปน �(n)เมอถวเฉลยตอหนงดาเนนการกเทากบ �(n)/n = �(1)
สรปไดวาเขยน multipop ชยๆ (ดชาๆ) แบบขางบนนกไมกระทบกระเทอนอะไรตอเวลาการทางานโดยรวม
วธการวเคราะหกรณถวเฉลยวธวเคราะหกรณถวเฉลยทาไดสามรปแบบ พอสรปแนวคดไดดงน
1. วธรวมกลม (aggregate method) วธนเปนวธทตรงไปตรงมาทสด กคอเราหา T(m) ซงคอเวลารวมของลาดบการดาเนนการทเลวสด ซงมจานวน m การดาเนนการ เวลาถวเฉลยตอหนงการดาเนนการกคอ T(m)/m วธนฟงดงาย แตการหา T(m) ทแทนเวลาของลาดบการดาเนนการทเลวสดนนบางทกยง อกทงวธนไมแยกแยะเวลาถวเฉลยของการดาเนนการแตละแบบ เนองจาก T(m) นนไดมาจากการรวมเวลาของทกๆ การดาเนนการในลาดบ จงไดเวลาถวเฉลยของแตละการดาเนนการเทากนหมด
2. วธทางบญช (accounting method) วธนอาศยการเดา (อยางมเหตผล) ของเวลาถวเฉลยของแตละการดาเนนการกอน แลวคอยแสดงใหดวาคาตอบทเดานนไมผด การกาหนดเวลาถวเฉลยนนลอเลยนการทาบญชทมเรองของการเครดตและเดบต เราเปรยบใหเวลาถวเฉลยทใชไปตอหนงการดาเนนการนน เสมอนเปนเงนถวเฉลยจานวนหนงทแทนตนทนถวเฉลยในการดาเนนการนนใหเสรจ แตแนนอนวาเนองจากเปนตนทนถวเฉลย ในทางปฏบตจรงอาจใชไมถงตามทกาหนดกได หรออาจตองใชเกนกวาทกาหนดกได กเลยเกดแนวคดของฝากเงนสวนทเหลอเขาในบญช เมอตนทนการทางานจรงนอยกวาตนทนถวเฉลย และถอนเงนในบญชมาใช เมอตนทนการทางานจรงมากกวาตนทนถวเฉลย ดงนนการวเคราะหดวยวธทางบญชนน กคอการกาหนดตนทนถวเฉลยของแตละการดาเนนการ การดาเนนการแตละแบบนนฝากหรอถอนเงนสวนเกนหรอสวนขาดได แตทสาคญกคอเงนในบญชตางๆ ตองหามตดลบ ถาเราสามารถแสดงใหเหนไดวาเงนในทกๆ บญชไมเคยตดลบเลย ไมวาจะเปนลาดบการดาเนนการใดๆ กตาม แสดงวาตนทนถวเฉลยทเรา
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 73
กาหนดไวตอนตนนนเปนขอบเขตบนของตนทนจรง ภาระทสาคญในการวเคราะหดวยวธนกคอการกาหนดตนทนถวเฉลยทตาๆ ทไมเคยทาใหเงนบญชตดลบ
3. วธพลงงานศกย (potential method) วธนจะคลายกบวธทางบญช แตจะเทยบเคยงกบพลงงานศกยของระบบแทน วธนเราไมไดเดาตนทนถวเฉลย สงทเราตองกาหนดขน (เดา) กคอฟงกชนซงคานวณคาพลงงานศกย � ของโครงสรางขอมลจากลกษณะของโครงสรางขอมลขณะนนๆ เชนเปนฟงกชนของจานวนโหนด จานวนใบ จานวนบตทเปน 1 หรออนๆ กแลวแต แตโดยทวไปพลงงานในระบบ มกแสดงใหเหนวาระบบมพลงงานเกบอยใหใชไดแทนตนทนจรงในอนาคตได (เทยบไดกบเงนทฝากไวในบญช) กาหนดให
�(Di) คอฟงกชนพลงงานศกยของโครงสรางขอมล Di หลงการดาเนนการครงท ici คอตนทนจรงของการดาเนนการครงท ici คอตนทนถวเฉลยของการดาเนนการครงท i เมอใช � ซงหาไดจาก
ci = ci + �(Di) – �(Di–1)
หมายความวาสวนตางของตนทนถวเฉลยและตนทนจรง จะเปนคาทไปเพมหรอลดพลงงานของระบบ ถาใชจรงนอยกวาทคาด กเอาสวนทเหลอไปเพมพลงงานสะสม ถาใชจรงมากกวาทคาด กเอาสวนทขาดมาจากพลงงานทสะสมไวมากอนหนาน ในกรณทเรามการดาเนนการเปนจานวน m ครงกจะได
� �
)()(
)()(ˆ
01
11
1
DDc
DDcc
n
m
ii
m
iiii
m
ii
������
�
�
��
�
����
�
��
�
�
�
�
เนองจากผลรวมของตนทนถวเฉลยขณะใดๆ ตองมคาไมตากวาผลรวมของตนทนจรง (นนคอ �ci � �ci ตลอด) ดงนน �(Dn) ตองไมนอยกวา �(D0) เสมอสาหรบทกๆ mหมายความวาพลงงานศกยขณะใดๆ ตองไมนอยกวาพลงงานตอนเรมตน โดยทวไปเราจะออกแบบ � ซงม �(D0) = 0 ดงนน �(Di) � 0 เสมอสาหรบทกๆ i
ขอแตกตางของวธพลงงานศกยกบวธบญชกคอ วธบญชนนเราตองกาหนดตนทนถวเฉลยของทกๆ การดาเนนการ แลวแสดงใหเหนบญชไมเคยตดลบ แตวธพลงงานศกย เรากาหนดฟงกชนคานวณพลงงานศกยของทงโครงสรางขอมล (ซงตอนกาหนดนกตองแสดงใหดเลยวาฟงกชนนไมเคยใหคานอยกวาตอนเรมตน) จากนนใชความรเกยวกบตน
74 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
ทนจรงของแตละการดาเนนการ ประกอบกบการเปลยนแปลงพลงงานศกย มาคานวณตนทนถวเฉลยของแตละการดาเนนการ
ทกลาวมาเปนเพยงแนวคดของการคานวณเวลา (หรอใชคาวาตนทน) ถวเฉลยของการดาเนนการตางๆ การวเคราะหกรณถวเฉลยออกจะดยงยาก กเพราะตองยงเกยวกบหลายๆ การดาเนนการ อกทงมกใชวเคราะหโครงสรางขอมลประเภทแปลกๆ ยงๆ หรอประเภทดงาย แตมองไมออกวาทาไมถงด วธตางๆ ทนาเสนอมานเราอาศยการเปรยบภาระการทางานดวยเงนหรอพลงงานศกย ทงนเพอชวยใหเขาใจการวเคราะหทยงยากใหงายขน (อยาลมวาเงนหรอพลงงานเหลานไมมสวนรวมใดๆ ในการเขยนโปรแกรมเพอสรางโครงสรางขอมลเหลาน มนเปนเพยงขอมลจนตภาพทเราสรางขนเพอชวยในการวเคราะห) ในหวขอยอยตอไปนจะขอยกตวอยางเลกๆ พรอมแสดงวธการวเคราะหดวยวธทงสาม เราจะไดพบการวธวเคราะหทยงขนเมอไดกลาวถงเรองของโครงสรางขอมลขนสงในบทถดไป
Stack แบบม multipop (ตอ)เราไดวเคราะหมากอนนแลว (ดวยวธรวมกลม) ไดผลวาการดาเนนการตางๆ อนไดแก push pop และ multipop ใชเวลาเปน O(1) คราวนจะใชวธทางบญช และวธพลงงานศกยเพอวเคราะหกรณถวเฉลยกน
วธทางบญชกอนอนขอกาหนดกอนวาตนทนจรงในการ push หนงครง หรอ pop หนงครงนนใชเงน 1 บาท อนนใชไดเพราะ push และ pop ใชเวลาคงตว เราจะกาหนดตนทนถวเฉลยเปนเงน 2 บาทในการ push หนงครง และกาหนดใหไมตองใชเงนเลย (ถวเฉลยแลว) ในการ pop และ multipop (อยาลมวานเปนตนทนถวเฉลย multipop จรงๆ อาจตองใชเงนและกใชไมคงตวดวย ขนกบจานวนท pop ออกดวย) หมายความวาอะไรในการกาหนดเชนน เหตผลและแรงจงใจในการกาหนดเชนนกคอ ถาในการ push หนงครงเรานาเงน 2 บาท (ทกาหนดใหเปนตนทนถวเฉลย) นนไปใช push จรงๆ (ดวยตนทนจรง) 1 บาท อก 1 บาทนนฝากไวในบญชใหม ทเพงเปดใหกบขอมลใหมทเพง push เขาไป ดงนนทกๆ ขอมลใน MStack จะมบญช(เกบเงน 1 บาท) กากบ
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 75
อย พอถงตอนจะ pop ขอมล (ซงอาจถกเรยกจาก multipop กได) เรากไมตองใชเงนใดๆ เพมอก (ตนทนถวเฉลยเปน 0) เพราะวาเราเพยงแตถอนเงน 1 บาทจากบญชของขอมลนนมาใชเปนตนทนจรงในการ pop ขอมลออก (แลวกปดบญชนนเลย !) สรปไดวาดวยเงน 1 บาททจายไวลวงหนาตอน push กากบขอมลไว พอตอน pop กไมตองเสยเพม แตละบญชไมตดลบแนๆ เพราะตอนเปดกมเงนในบญช 1 บาท พอตอนบญชเปนศนยกถกปดเรยบรอย ตนทนถวเฉลยทกาหนดใหเปน 2, 0, และ 0 สาหรบ push, pop, และ multipop ตามลาดบนนจงใชได ดงนนเวลาการทางานถวเฉลยของทงสามจงเปน O(1)
บางคนอาจมคาถามวาแลวทาไมไมกาหนดใหตนทนถวเฉลยของ push ใหเปน 3 และตวอนๆ เปนคาคงตวอนๆ กคงทาได (การกาหนดใหเปน 2 หรอ 3 หรอ 10,000 หรอคาคงตวอนนน กแสดงวาเรามความหวงไวในใจวาการดาเนนการนใชเวลาคงตว) กคงไมแปลกทเงนในบญชจะมมากขนๆ เรอยๆ (แตหามตดลบ) คงจะเปนเรองตลกถาเราจะกาหนดใหตนทนถวเฉลยของ push และ pop ใหมากกวาคาคงตว (เชนใหเทากบจานวนขอมลใน stack คอเทากบ n) กเพราะวาเรารอยแลวโดยแทบไมตองวเคราะหกรณถวเฉลยเลยวา push และ pop เปน O(1) แลวเราจะไปตงตนทนถวเฉลยใหสงกวาทเปนจรงไปทาไม แตสาหรบ multipop นนเราวเคราะหกรณเลวสดแลวเปน O(n) เราจงกาหนดใหตนทนถวเฉลยนอยกวาน (สาหรบททามากคอเปนคาคงตว) เพราะเรามความรสกวาเวลาของ multipop ไมนาเลวตลอดตดๆ กน แลวแสดงใหเหนจรงวา ดวยตนทนถวเฉลยทกาหนดไวนน ไมเกดกรณบญชตดลบ กแสดงวาใชได
วธพลงงานศกยจากความรทวาการ push และ pop นนใชเวลาคงตว ขอสมมตวาใหใชพลงงาน 1 หนวย กาหนดให � (Di) = ni โดยท ni แทนจานวนขอมลใน MStack หลงการดาเนนการครงท i ถากาหนดใหตอนเรมตน MStack ไมมขอมลกแสดงวา �(D0) = 0 และเนองจากจานวนขอมลไมเคยตดลบ กแสดงวา �(Di) � 0 สาหรบทกๆ คาของ i สรปวาฟงกชนพลงงานศกยทกาหนดขนนนามาใชวเคราะหกรณถวเฉลยได
คราวนมาดวาหลงจากกาหนด � แลว แตละการดาเนนการมตนทนถวเฉลยเทาใด
push : push ใชตนทนจรงเทากบ 1 หนวย หลง push แลวจานวนขอมลใน MStack ยอมเพมขน 1 นนคอ ci = 1 และ �(Di) – �(Di–1) = 1 จากสตรการคานวณตนทนถวเฉลย ci = ci + �(Di) – �(Di–1) จะไดวา ci = 1 + 1 = 2
76 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
pop : pop ใชตนทนจรงเทากบ 1 หนวย หลง pop แลวจานวนขอมลใน MStack ยอมลดลง 1 นนคอ ci = 1 และ �(Di) – �(Di–1) = –1 จากสตรการคานวณตนทนถวเฉลย ci =
ci + �(Di) – �(Di–1) จะไดวา ci = 1 – 1 = 0
multipop : ถา multipop มการ pop ขอมล k ตว กตองใชตนทนจรงเทากบ k หนวย และหลง multipop k ตวแลวจานวนขอมลใน MStack ยอมลดลง k นนคอ ci = k และ �(Di) – �(Di–1) = –k จากสตรการคานวณตนทนถวเฉลย ci = ci + �(Di) – �(Di–1) จะไดวา ci = k – k = 0
เหนไดวาทงสามการดาเนนการขางบนนมตนทนถวเฉลยเปน O(1) ทงสน เหมอนกบผลทวเคราะหดวยสองวธแรก
ตวนบฐานสองกาหนดให A คอตวนบเลขฐานสองขนาด k บต A[0] ถง A[k–1] โดยท A[0] คอบตทมนยสาคญนอยสด การดาเนนการนบเลขฐานเขยนเปนอลกอรทมไดดงน (ตวนบนมหลกการทางานเทยบเคยงไดกบ asynchronous counter หรอทเรยกวา carry–ripple counter ทนกเรยนคงเคยเรยนกนมาในวชาการออกแบบวงจรดจตอล)
01: Inc( A[0..k–1] )02: {03: i = 004: while ( i<k AND A[i] == 1 ) {05: A[i] = 006: ++i;07: }08: if ( i < k ) then A[i] = 109: }
เรมตน A เปนศนยทกๆ บต เวลาในการเรยก Inc แตละครงกขนกบวาจะวนอยในวงวนแบบ while กรอบ จะขอกาหนดจานวนการเปลยนบตใน A แทนภาระทเกดขนจรง (ซงสะทอนถงเวลาการทางาน) เชนการเปลยนจาก 0000 ไปเปน 0001 เสยภาระ 1 หนวย การเปลยนจาก 0111 เปน 1000 เสยภาระ 4 หนวย เปนตน ใหสงเกตวาภาระในการ Inc จะเทากบจานวนบตทเปน 1 ทตดกนจากดานขวามาทางซายเรอยๆ จนเจอบตทเปน 0 ตวแรก (จานวนบต 1 เหลานจะถกเปลยนเปน 0) บวกอกหนง (ซงกคอบต 0 บตแรกจากขวามอมาทางซาย ทจะถกเปลยนเปน 1)
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 77
จะยกเวนกกรณเดยวคอกรณทเปลยนจากตวนบทเปน 1 หมดใหเปน 0 หมด เหนชดเลยวาภาระเลวสดกคอกรณน ซงใชเวลาเปน �(k)
กรณเลวสดบอกวา Inc เสยเวลาเปน �(k) ดงนนถาเรยก Inc m ครงกจะเสยเวลา O(mk) ทตองใชโอใหญในทนกเพราะวาเรารวา การเรยก Inc หลายๆ ครงนน นานๆ จะเปนกรณเลวสดสกครง mk จงเปนขอบเขตบนแน แตจะเปนขอบเขตลางดวยหรอเปลานน ชกไมแนใจ
เราจะมาวเคราะหกนวาเวลารวมเมอเรยก Inc m ครงจะเปนเทาใดกนแน ซงจะทาใหเราทราบวาถวเฉลยตอครงแลวเปนเทาใด
วธรวมกลมวธนอาศยการลยรวมคดภาระทงหมดเมอทางานไป m ครง จากนนกหารดวย m ไดเปนกรณถวเฉลย จากตวอยางการดาเนนการ Inc มตวนบ A เรมท 0 ดการเปลยนแปลงบตตางๆ ในรปท 5–2 จะพบวา A[0] เปลยนทกครงทเรยก A[1] เปลยนครงเวนครง A[2] เปลยนทกๆ 4 ครง สรปงายๆ กคอ A[i] เปลยนคาทกๆ 2i ครง
หรอพดอกนยหนง ถามการเรยก Inc m ครง A[0] เปลยน m ครง A[1] เปลยน m/2 ครง A[2] เปลยน m/22 ครง … A[i] เปลยน m/2i ครง ดงนนภาระสะสมเมอเรยก Inc m ครงยอมเทากบ
� � )(22
1
2
1
2 0
1
0
1
0mmmmm
ii
k
ii
k
ii
������
�
�
��
�
���� ���
�
�
�
�
�
�
สรปไดวาเวลาการ Inc ถวเฉลยแลวเทากบ �(m)m = O(1)
A[3] A[2] A[1] A[0] ภาระจรง ภาระจรงสะสม 2m0 0 0 00 0 0 1 1 1 20 0 1 0 2 3 40 0 1 1 1 4 60 1 0 0 3 7 80 1 0 1 1 8 100 1 1 0 2 10 120 1 1 1 1 11 141 0 0 0 4 15 161 0 0 1 1 16 181 0 1 0 2 18 201 0 1 1 1 19 221 1 0 0 3 22 241 1 0 1 1 23 261 1 1 0 2 25 281 1 1 1 1 26 30
รปท 5–2 ภาระในการเปลยนบตของการนบเลขฐานสอง
78 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
วธทางบญชวธนกตองกาหนดตนทนถวเฉลย แลวคอยแสดงใหดวาใชได (คอบญชไมเคยตดลบ) กอนอนกาหนดใหภาระในการเปลยนคาของบต (จาก 1 เปน 0 หรอจาก 0 เปน 1) ใชเงน 1 บาท คราวนจะขอกาหนดใหตนทนถวเฉลยของ Inc เปน 2 นนคอเรยก Inc 1 ครงตองเสยเงน 2 บาท บาท (คอมความรสกวาตนทนถวเฉลยนาเปนคาคงตว) แลวจะแสดงใหดวาเสยเทานแหละ เพยงพอตอภาระในการนบเลขฐานสองไดจรงๆ (โดยไมตองยมเงนใครอก คอบญชไมตดลบ)
ใหสงเกตวาการเรยก Inc 1 ครงนนอาจมหลายบตทเปลยนจาก 1 เปน 0 แตจะมอยางมากเพยงบตเดยวทเปลยนจาก 0 เปน 1 (ลองดกรณ 100111 เปลยนเปน 101000 เปนตวอยาง) ดงนนทกาหนดใหเสยเงน 2 บาทตอ Inc หนงครงนนกเพราะวา จะใช 1 บาทในการเปลยนจากบต 0 เปนบต 1 และเหลออก 1 บาทฝากไวทบญชของบตทเพงถกเปลยนเปน 1 นเพอเปนตนทนในการเปลยนบตนกลบเปน 0 ในอนาคตเมอถงเวลาทตองเปลยน (เราจะมบญชประจาทกๆ บตๆ ละบญช) สวนบตอนๆ ทตองเปลยนจาก 1 เปน 0 นนใหใชเงนในบญชประจาบตนนเปนคาใชจายในการเปลยน (บตใดทเปน 1 แสดงวาบตจะตองเคยถกเปลยนจาก 0 และมการฝากเงนให 1 บาทในบญชอยแลว เพราะตวนบเราเรมทศนย) รปท 5–3 แสดงการเปลยนเงนในบญชประจาแตละบต (เขยนเปนเลขชกาลง)
A[3] A[2] A[1] A[0] ตนทนจรง ตนทนถวเฉลย ฝากเงน ถอนเงน00 00 00 00
00 00 00 11 1 2 1 000 00 11 00 2 2 1 100 00 11 11 1 2 1 000 11 00 00 3 2 1 200 11 00 11 1 2 1 000 11 11 00 2 2 1 100 11 11 11 1 2 1 011 00 00 00 4 2 1 311 00 00 11 1 2 1 011 00 11 00 2 2 1 111 00 11 11 1 2 1 011 11 00 00 3 2 1 211 11 00 11 1 2 1 011 11 11 00 2 2 1 111 11 11 11 1 2 1 0
รปท 5–3 การเปลยนเงนในบญชของแตละบต (เลขทเขยนเปนเลขชกาลง)
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 79
ดวยการกาหนดตนทนถวเฉลยเปน 2 บาทนพบวาเงนในบญชของแตละบตไมเคยตดลบ และเพยงพอในการนบเลขฐานสองตามทกาหนดไวแสดงวามตนทนถวเฉลยเปน O(1)
วธพลงงานศกยในเมอเรมตน A เปนศนยทกบต คลายกบเปนภาวะสงบนาจะมพลงงานศกยเปน 0 เมอนบไปๆ บตตางๆ มการเปลยนแปลง พลงงานศกยนาจะเพมบางลดบางแตเมอใด A เปน 0 หมด พลงงานศกยกนากลบมาเปน 0 เหมอนตอนแรก แลวอะไรในตวนบ A นจะเปนตวกาหนดพลงงานศกยของตวนบ เมอใดทมการเปลยนแปลงบตมากๆ ตอการ Inc หนงครง กนาจะแสดงวามการใชพลงงานศกยในตวนบมาเปนตวเปลยนบตมาก (การใชพลงงานในระบบมาทางานเปนการระบวาตนทนถวเฉลยนาจะด เพราะเราพยายามไมใชพลงงานจากแหลงภายนอก แตพยายามจะใชพลงงานทไดสะสมมา) พดใหชดๆ กคอเปลยนบต 1 เปน 0 มากๆ เพราะบตทเปลยนจาก 0 เปน 1 อยางมากมเพยงบตเดยวตอการ Inc หนงครง ดงนนพลงงานศกยกควรถกกาหนดโดยจานวนบตทเปน 1 ในตวนบ
กาหนดให �(Ai) = bi โดยท bi แทนจานวนบตทเปน 1 หลงจาก Inc ครงท i เนองจากตอนเรมตน A เปนศนยทกบต แสดงวา �(A0) = 0 และ�(Ai) = bi ไมเคยตดลบเพราะไมมกรณจานวนบตตดลบ ดงนนฟงกชนพลงงานศกยนนามาใชวเคราะหกรณถวเฉลยได
กาหนดใหการ Inc ครงท i มตนทนจรงเปน ci นนคอมบตทเปลยนแปลงคาเปนจานวน ci บต เนองจากมอยางมากเพยงหนงบตทเปลยนจาก 0 เปน 1 ตอการ Inc หนงครง หรอจะกลาวไดวามอยางนอย ci –1 บตทเปลยนบตจาก 1 เปน 0 ดงนน bi � bi–1 – (ci –1) + 1
จากสตรการคานวณตนทนถวเฉลย ci = ci + �(Di) – �(Di–1) จะไดวา ci � ci + (bi–1 – (ci –1) + 1) – bi
= 2 = O(1)
Stack ขนาดไมจากดวธสราง stack วธหนงกคอการใชแถวลาดบ หรอทเราเรยกกนวาอาเรย (array) โดยผใชตองกาหนดขนาดกอนสรางวาจะเกบขอมลเปนจานวนมากสดกตวในแถวลาดบ เหนไดชดวามขอ
80 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
เสยตรงทมขนาดจากด ยงมวธสราง stack อกแบบหนงทใชแถวลาดบเชนกน แตคราวนถา stack เตม เรากเพยงแตจองแถวลาดบใหมทใหญกวา แลวกทาสาเนาขอมลไปยงทเกบใหม เพยงแคน stack ทสรางกสามารถเกบขอมลได โดยไมตองกาหนดขนาด
วธทอธบายมานนงายด แตคาดวาคงจะทางานชา เพราะตองมาทาสาเนาขอมลจากแถวลาดบเกาไปแถวลาดบใหมเมอมการขยาย stack ซงตองใชเวลาแปรตามจานวนขอมลเปน �(n) แตเรามความรสกวานาจะเปนเหตการณทเกดขนไมบอย ถาคดแบบถวเฉลยกนาจะไมสะเทอนอะไร
กอนอนขอตงคาถามวา เมอไรจะขยาย stack ? และเมอตองขยายจะขยายเปนขนาดเทาไร ? สามญสานกบอกวากนาจะขยายเมอมปญหา นนคอเมอ stack มนเตมแลว แลวกคงขยายใหมขนาดใหญกวาเดม คงไมดแนถาจะขยายใหใหญขนอกหนงชอง เพราะจะเกดสภาพเตมตลอดเมอมการเพมอยเรอยๆ ทาใหตองขยายตลอด กลายเปนวาเพมขอมล n ตว ขยายทกครง ทาสาเนาชดขอมลทกๆ ครง เสยเวลารวมทงสนเปน �(n2) หรอเราจะขยายขนาดไปสกรอยเทาของของเดม ซงคงไมคอยด เพราะสนเปลองเนอท โดยทวไปเราตองการให load factor ซงคอสดสวนของจานวนขอมลตอเนอททจองไวควรมขนาดไมนอยกวา 0.5 ดงนนเมอเตม กควรขยายขนาดตารางเปนสองเทา ไดเปนอลกอรทมสาหรบการ push ขางลางน
01: push( S, x )02: {03: if ( S.size == 0 ) {04: allocate S.array with 1 slot05: S.size = 1; S.num = 006: }07: if ( S.size == S.num ) {08: allocate newArray with 2�S.size slots09: copy all items from S.array to newArray10: S.array = newArray11: S.size = 2�S.size12: }13: S.array[ S.num ] = x14: ++(S.num)15: }
บรรทดท 3–6 ใชสาหรบกรณเรมตนท stack ไมมขอมลเลย ( S.size คอขนาดของ stack ) บรรทดท 7–12 ทางานเมอ stack เตม ( S.num คอจานวนขอมล ) สวนบรรทดท 13 กคอการเพมขอมลในแถวลาดบใชเวลา �(1) ดงนนกรณเลวสดของ push กคอเมอ stack เตม มการทาสาเนาขอมลใชเวลาทงสนเปน �(n)
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 81
วธรวมกลมถาวเคราะหกรณถวเฉลยโดยใชวธรวมกลม จะพบวามการขยาย stack เมอจานวนขอมลเปน 1, 2, 4, …, 2k ตอนจะ push เนองจากเราขยาย stack ทละเทาตว ดงนนเวลาโดยรวมสาหรบการpush เปนจานวน n ครงเปน
� �nnn
n
k
kn
i3221
lg
01���
���
�
�
���
�
�
��
�
�
��
�
����
ผลบวกตวแรกคอภาระในการเพมขอมลในแถวลาดบทตองทาแนๆ เพม n ครง กตองทา n หน สวนผลบวกตวขวาคอภาระทเกดการขยาย stack ตอนทมขอมลเปน 1, 2, 4, 8, … ใชเวลาเปน 1, 2, 4, 8, … ตามลาดบ มคาเทากบ � � 12 1lg
�
�n ซงนอยกวา 2n ดงนน push n ครงใชตนทนรวมแลวนอยกวา 3n ถวเฉลยแลวจงนอยกวา 3 เปน O(1)
วธทางบญชถาใชวธทางบญช กขอยกคาตอบเลยวาเพมหนงครงใชตนทนถวเฉลย 3 บาท ทอยากจะอธบายกคอวาทาไมตอง 3 บาทดวย เราจะมบญชตามขอมลตางๆ โดยเมอขอมลเตมตาราง ทกๆ บญชตามขอมลตางๆ จะมเงนฝากอยางนอยหนงบาท เมอจองแถวลาดบใหมเสรจ (ในบรรทดท 8) แลวกาลงตองการทาสาเนาขอมล (ในบรรทดท 9) การทาสาเนาขอมลตรงนกจะใชเงนตามบญชของขอมลตางๆ นเองมาเปนตนทนในการทาสาเนา ขอมลละบาท แลวเงนเหลานมาจากไหน กคอทกๆ ครงท push ตองใชเงน 3 บาท หนงบาทแรกใชในการเพมขอมลในแถวลาดบ บาททสองเกบไวทขอมลใหมทเพงถกเพมเขามา และบาททสามฝากไวกบขอมลเกาใน stack ทไมมเงนในบญชเลย (จะไดใชตอนทาสาเนาขอมลหลงขยายในอนาคต) สมมตวาหลงขยายแถวลาดบและทาสาเนาเสรจมขอมล m ตว จะเหนไดวากวาจะเตมครงตอไป กตอง push อก m ตว จงประกนไดวาบญชของขอมลทกๆ ตวตอนท stack เตมครงตอไปตองมเงนฝากอยางนอยหนงบาทแนๆ บญชทงหลายจงไมเคยตดลบ แสดงวา 3 บาททกาหนดมานนใชได
วธพลงงานศกยถาใชวธพลงงานศกย เราอยากให stack มพลงงานสะสมไวเพอการขยายตว ดงนนการ push จะเพมพลงงาน เมอ push ไปเรอยๆ พลงงานกเพมขนเรอยๆ เปนเชนนจน stack เตม เมอตอง push อก เพมไมได เกดการจองแถวลาดบใหมและทาสาเนาขอมล ชวงนจะใชพลงงานทเกบไวมา
82 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
เปนตนทนในการทาสาเนา เมอทาสาเนาเสรจพลงงานทสะสมไวกถกใชหมด แลวมาเรมสะสมหลง push กนใหม ประเดนทตองการใหใชพลงงานจนหมดนน กเพราะนนแสดงวาทสะสมมานน สะสมมาพอดๆ ไมเกน (แตพลงงานไมพอไมได) ทไมเกนนนยอมแสดงวาตนทนถวเฉลยทจะคานวณไดนนจะไดเปนตนทนถวเฉลยทตาสดจรงๆ เอาละทอธบายมาทงหมดนเพอบอกวาพลงงานของระบบจะเปนศนยเมอตอนไมมขอมล (ตอนเรมตน) และเมอหลงจองแถวลาดบขนาดใหญขนแลวทาสาเนาเสรจ ซงสองสภาพนเกดขนเมอ จานวนขอมลเปนครงหนงของขนาดของแถวลาดบ จงกาหนดให
�(Vi) = 2Vi.num – Vi.size
เหนไดวาระบบมพลงงานเพมขนเมอมขอมลเพมขนในสวนทเกนครงของขนาด stack ฟงกชนพลงงานศกยนใชคานวณตนทนถวเฉลยได เพราะเมอตอนเรมตนมพลงงานเปนศนย และสตรนไมเคยใหคาตดลบ เพอความกระทดรดจะขอเขยนใหสนๆ เปน �i = 2ni – si
มสองกรณทตองพจารณาคอตอนทไมมการขยาย กบตอนทมการขยาย เนองจากทงสองกรณใชตนทนจรงไมเทากน ตอนทไมมการขยายนนใชตนทนจรงเทากบ 1 ดงนน
ci = ci + �i – �i–1
= 1 + (2ni – si) – (2ni–1 – si–1)= 1 + (2(ni–1+1) – si–1) – (2ni–1 – si–1)= 3
เนองจากไมมการขยายดงนน si = si–1 และหลงการ push ni = ni–1 + 1
สาหรบกรณทมการขยายนนตนทนจรงเทากบปรมาณการทาสาเนา บวกกบการเพมขอมลตวใหม รวมเปน ni–1
+1 และเนองจากมการขยายดงนน si = 2si–1 และ ni–1 = si–1 จะไดวาci = ci + �i – �i–1
= ni–1 + 1 + (2ni – si) – (2ni–1 – si–1)= ni–1 + 1 + (2(ni–1+1) – 2si–1) – (2ni–1 – si–1)= ni–1 + 1 + (2(ni–1+1) – 2ni–1) – (2ni–1 – ni–1)= 3
สรปวาตนทนถวเฉลยในการ push เปน 3 = O(1)
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 83
Binary search แบบ dynamicวธการคนแบบทวภาคนนกระทากบขอมลในแถวลาดบทเรยงจากนอยไปมาก โดยมเวลาการทางานทงกรณเลวสด และกรณเฉลยเปน O( log n ) ตามทไดวเคราะหใหดในบททแลว สงทเปนปญหาของการคนแบบทวภาคกคอการทตองเกบขอมลในแถวลาดบ ซงใชเวลาเปน O(n) ในการเพมหรอลบขอมลในแถวลาดบ มวธจดเกบขอมลอกแบบหนงทยงคงทาใหเราคนแบบทวภาคไดในเวลาเกอบเทาเดม แตสามารถเพมขอมลไดเรวขน รายละเอยดการจดเกบและการดาเนนการตางๆ มดงน
สมมตวาเราตองการเกบขอมลเปนจานวน n ตว โดยเราสามารถเขยนคาของ n ในฐานสองเปน( nk–1 …n1 n0 )2 โดยท ni = 0 หรอ 1 , k = 1+ �lg n� และ nn
ki
ii ��
�
�
10
2 เราเตรยมแถวลาดบ A0, A1, …,Ak–1 โดยท Ai มขนาด 2i ชอง Ai ตางๆ เหลาน ถาไมเกบขอมลจนเตม กไมมขอมลเลย ทงน Ai จะเตมหรอวางกขนกบวา ni = 1 หรอ 0 ตามลาดบ ขอมลทเกบใน Ai ตองเรยงลาดบจากนอยไปมาก แตไมมขอจากดใดๆ เกยวกบการเรยงของขอมลทอยคนละแถวลาดบกน รปท 5–4 (ก) แสดงตวอยางการเกบขอมล 6 ตว เนองจาก (110)2
คอจานวนฐานสองทมคา 6 ดงนนเราตองจอง 3 แถวลาดบ โดยท A2 และ A1 มขอมลเตมแถวลาดบทงสอง สวน A0 วาง
การคนขอมล ทาไดโดยการคนแบบทวภาคในแตละแถวลาดบ ใชเวลาทงสน
)log()())2(lg())2(lg( 221
0
1
0
1
0nkin
k
i
k
i
ik
i
ii ����
��
�
�
��
�
������ ���
�
�
�
�
�
�
การเพมขอมล ทาไดดงน01: insert( A, x )02: {03: B0 = x; i = 0;
04: while ( i < k and Ai is full ) {
05: built Bi+1 by merging Ai and Bi06: clear Ai07: ++i08: }09: if ( i >= k ) allocate Ai10: Ai � Bi11: }
กาหนดให Bi คอแถวลาดบทมขนาด 2i หลกการทางานอาศยการนาขอมลใหมมาใสใน B0 ถา A0 วางกเพยงแตยาย B0 ไปแทน A0 กจบ แตถาไมวางกสราง B1 ซงไดจากการผสาน B0 และ A0
84 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
เขาดวยกน (ในบรรทด 5) ทแลวกเตรยมจะไปแทน A1 ถาวาง แตถาไมวางกสราง B2 ซงไดจากการผสาน B1 และ A1 เขาดวยกน แลวกเตรยมจะไปแทน A2 ถาวาง กกระทาเชนนไปเรอยจนกวาจะเจอ Ai ทวาง หรอวาอาจเปนไปไดวาเตมหมดตงแต A0 ยน Ak–1 กไมเปนไรถาเปนกรณน กเพยงแตจอง Ak ใหมกเทานน (บรรทดท 9) แลวกจะไดทวางเพอใส Bi
ลองดตวอยางการเพมขอมล (ดรปท 5–4) จากเดมเรามขอมลอย 6 ตวในรป (ก) ถาเราเพม 4 กจะงายและรวดเรวมากเพราะ A0 วางพอด ไดผลดงรป (ข) คราวนเราอยากเพม 7 กยงหนอยเพราะ A0 ไมวาง กเลยสราง B1 (ดรป (ค)) มาจากการผสาน 7 กบ 4 ได (4,7) แต A1 กไมวางอก กสราง B2 มาจากการผสาน (4,7) กบ (6,8) ได (4,6,7,8) แต A2 ไมวางกเลยสราง B3 มาจากการผสาน (4,6,7,8) กบ (2,5,9,14) ได (2,4,5,6,7,8,9,14) แต A3 ไมเคยจองมากอน กจองแลวยาย B3
ไปเกบใน A3 ไดดงรป (ง)
6 8
2 5 9 14
A0
A1
A2
4
6 8
2 5 9 14
A0
A1
A2
B0
B1
B2
2 4 5 6 7 8 9 14
A0
A1
A2
A3
(ก)
(ค)
(ข)
(ง)
7
4 7
4 6 7 8
2 4 5 6 7 8 9 14B3
รปท 5–4 ตวอยางการเพมขอมล
แนนอนวากรณเลวสดกคอกรณทหมนในวงวนแบบ while เปนจานวนมากสด ซงกคอกรณททกๆ แถวลาดบของ A เตมหมด ตองหมนเปนจานวน k รอบ การสรางแถวลาดบและผสานแถวลาดบในบรรทดท 5 นนใชเวลา �( 2i+1 ) ดงนนกรณเลวสดบรรทดท 4 ถง 8 ใชเวลาทงสน
Draft 1.0 : 30/10/00 4:52 : [email protected] บทท 5 การวเคราะหกรณถวเฉลย 85
� � )(222)2(1
0
11
0
1 nkk
i
ik
i
i �������
�
�
��
�
��� ��
�
�
�
�
�
�
บวกกบกรณตองจอง Ak (บรรทดท 9) และยายขอมล (บรรทดท 10) ซงใช �( n ) เชนกน ดงนนสรปไดวากรณเลวสดใชเวลา �( n )
แตเรารสกวา กรณเลวสดนจะเกดกเฉพาะเมอทกๆ แถวลาดบใน A เตมหมด ซงนานๆ จะเกดซะท ถาคดกรณถวเฉลยนาจะดกวาน เนองจากบรรทดท 5 และ 10 ในอลกอรทม insert เปนคาสงมาตรเวลา ซงเปนภาระเกยวกบการยายขอมล (ไมตองคดตอนจองกได เพราะถาจองเทาใดกตองยายขอมลเทานน) เราจะมาวเคราะหกรณถวเฉลย ซงพจารณาจากกรณเลวสดของการเพมขอมลเปนจานวน n ครง (กาหนดใหตอนเรมตนไมมขอมลเลย)
คดงายๆ แบบน (ดวยวธรวมกลม) เมอมการเพมขอมลจนครบ n ครงแลว ขอมลทอยใน A0 ตองเคยผาน B0 แลวมา A0 (คอยาย 2 ครง) ขอมลทอยใน A1 กคงตองเคยผาน B0 , A0 , B1 แลวมา A1
(คอยาย 4 ครง) ขอมลทอยใน A2 กคงตองเคยผาน B0 , A0 , B1 , A1 , B2 แลวมา A2 (คอยาย 6ครง) สรปไดวาขอมลทอยใน Ai ตองเคยถกยายไปมาเปนจานวน 2(i+1) ครง เนองจากมขอมลอย 2i ตวใน Ai ถา ni = 1 ดงนนจานวนภาระทงหมดเมอไดเพมไป n ตวจะเทากบ
��
�
�
��
�
��
��
�
�
��
�
��� ����
�
�
�
�
�
�
�
�
�
�
1
0
11
0
11
0
1
022)1(22)1(22
k
i
ik
i
ik
i
ik
i
ii iiin
โอใหญตวซายไดผลลพธเปน O( n log n ) (จากผลบวกในลกษณะเดยวกนในตวอยางท 4–25)และโอใหญตวขวาสดไดผลเปน O(n) เวลารวมในการเพมขอมล n ตวเปน O(n log n) ดงนนเวลาถวเฉลยตอการเพมหนงครงเปน O( log n )
แบบฝกหด1. ถาเราเพมการดาเนนการ Dec ในตวนบฐานสอง ซงทาหนาทลดคาของตวนบลงหนง จงแสดงใหเหนจรงวาการดาเนนารจานวน n ครงอาจมตนทนมากไดถง �(nk) โดยท k คอจานวนบตของตวนบ
86 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:52 : [email protected]
2. กาหนดให stack ทใชในระบบสามารถรบขอมลไดไมเกน k สมมตวาเราทาสาเนา stack ของระบบไวทกครงทมการดาเนนการบน stack นผานไปทกๆ k ครง จงแสดงใหเหนจรงวาตนทนรวมเปน O(n) เมอเกดการดาเนนการของ stack เปนจานวน n ครง
3. จงแสดงวธการสราง queue ดวย stack สองตว โดยทตนทนถวเฉลยของการดาเนนการ enqueue และ dequeue เปน O(1)
4. กาหนดใหเกดการดาเนนการบนโครงสรางขอมลหนงเปนจานวน n ครง การดาเนนการครงท i มตนทนจรงเปน i ถา i = 2k สาหรบ k = 0, 1, 2, ... มฉะนนจะมตนทนเปน 1 จงหาตนทนถวเฉลยตอหนงการดาเนนการดวยการใชวธรวมกลม วธทางบญช และวธพลงงานศกย
5. จงหาตนทนรวมของการดาเนนการบน stack แบบม multipop จานวน n ครง โดยทตอนเรมตนมขอมลอยใน stack s0 ตว และตอนสดทายมขอมลอย sn ตว
6. สมมตใหตวนบฐานสองเรมนบทตวเลข B (แทนทจะเปน 0 ตามทไดนาเสนอมา) ซงมจานวนบตทเปนหนงอย b บต จงแสดงใหเหนจรงวาการเรยก Inc ไป n ครงจะมตนทนเปน O(n) ถา n = �(b)
7. ถาเราตองการเพมการดาเนนการ Reset ใหกบตวนบฐานสอง ซงเปนการตงคา 0 ทกบตในกบตวนบ อยาทราบวาจะตองออกแบบตวนบฐานสองอยางไร เพอทจะทาใหลาดบของการดาเนนการทประกอบดวย Inc และ Reset เปนจานวน n ครงใชตนทน O(n) กาหนดใหตอนเรมตนตวนบนมคาเปนศนย
8. ถาเราจะเพมคณสมบตใหกบ stack ขนาดไมจากด เพอใหมความสามารถในการหดขนาดของแถวลาดบดวยเมอขอมลใน stack มจานวนนอยเกนไป ทาใหใชเนอทไมคอยคม (หมายความวา push มโอกาสขยาย ในขณะท pop กมโอกาสหดตว) จะทาอยางไร เพอใหยงคงมตนทนถวเฉลยตอหนงการดาเนนการเปน O(1)
9. จงอธบายแนวคดในการลบขอมลอกจากตารางทรองรบ binary search แบบ dynamic
10. สมมตวาเราออกแบบฟงกชนพลงงานศกย � ซงม �(Di) � �( D0) ตลอดทกๆ i > 0 โดยท �(D0) � 0 จงแสดงใหเหนจรงวามฟงกชนพลงงานศกย �’ ทม �’(D0) = 0 �’(Di) � 0 สาหรบทกๆ i > 0 และใหตนทนถวเฉลยเหมอนกบกรณใช � เปนตววเคราะห
Draft 1.0 : 30/10/00 4:58 : [email protected] 87
บทท 6
ประสทธภาพการทางานของอลกอรทมหนงๆ นนผกพนกบลกษณะของการจดเกบขอมลทใชระหวางการทางานอยางแนนแฟน การเลอกโครงสรางขอมลทเหมาะสมจะสงผลใหการทางานเปนไปอยางมประสทธภาพ หลายๆ อลกอรทมทมหลกการทางานคลายๆ กนแตมวธการจดเกบขอมลภายในตางกน สงผลใหไดประสทธภาพทตางกน ตวอยางทเหนไดชดคอการเรยงลาดบแบบเลอก (selection sort) และการเรยงลาดบขอมลแบบฮป (heap sort) สองอลกอรทมนอาศยหลกการทางานทเหมอนตรงทวา ในแตละรอบของการเรยงลาดบนนจะคนขอมลตวมากสด เพอนาไปสลบทเกบกบขอมลตวหลงสดในชดขอมลทกาลงพจารณา สงทสองอลกอรทมนตางกนกคอ selection sort นนมองการเกบขอมลเปนรายการจงใชวธการคนขอมลตวมากสดแบบลาดบ ใชเวลาในแตละรอบเปน �(n) ในขณะท heap sort นนจดเกบขอมลแบบฮปซงสามารถหาและสลบขอมลตวมากสดไดใน O(log n) ประสทธภาพโดยรวมของการเรยงลาดบของทงสองจงแตกตางกนเปน �(n2) กบ O( n log n ) ซงเปนผลโดยตรงจากการใชโครงสรางขอมลทตางกน
ตองขอเนนวาการจะเลอกใชโครงสรางขอมลประเภทใดนน กคงตองขนกบวาเราตองการบรการแบบใดจากขอมลทจดเกบ ถาเรากาลงแกปญหาทเกยวกบกราฟ เชนหาเสนทางสนสดของกราฟ G เราจะคงตองหาวธแทน G ในหนวยความจาเพอทจะสอบถามคณสมบตของจดหรอเสนเชอมตางๆ ใน G อนนจะเหนวามนตรงไปตรงมา ถาอลกอรทมทเกยวกบกราฟ กตองมทเกบสาหรบกราฟ อลกอรทมทเกยวกบการประมวลผลรปทรงเรขาคณตกตองมทเกบรปทรงเรขาคณตทจะถกประมวลผล เปนตน
แตประเดนทพบบอยมากกคอการบรการจดเกบขอมลเสรมอนๆ ทตองใชระหวางการทางานของอลกอรทม ซงมลกษณะแบบ dynamic set คอเปนทเกบขอมลทสมาชกภายในมการเปลยน
โครงสรางขอมล (แบบงาย)
88 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
แปลงไปเรอยๆ คอมการเพม ลบ หรอเปลยนคาสมาชกได และแนนอนวาเมอมการเกบกตองมการคน อาจเปนคนขอมลตามคย หรอคนขอมลทมคยนอยสด หรอคนขอมลทมคยมากสด หรออาจคนตวถดไป สารพดความตองการ ขนกบกระบวนการแกไขปญหานนๆ โดยทวไปเราควรพจารณาการใชงานขอมลเหลานทเราตองการกอน โดยการแจกแจงการดาเนนการตางๆ ทจะเกดขนกบขอมล เราเรยกชดของการดาเนนการทจะใชเหลานวา abstrat data type (เรยกยอๆ วา ADT) มอยหลายๆ ADT ทเปนทคนเคยกนในวงการเชน stack, queue (สองตวนใครไมรกรบถอนวชานได), Dictionary กเปน ADT เพอการเพม ลบ และคนขอมลโดยใชคย หรอ Priority queue เปน ADT เพอการเพม ลบขอมลทมคยนอยสด และคนขอมลทมคยนอยสด เปนตน เราอาจจะพบปญหาทตองใช ADT ทมแคการเพมและคนขอมลเทานน (ไมมลบ) กเปนได ดงนนการนยาม ADT ทเราตองการในกระบวนการแกไขปญหาทกาลงออกแบบเปนเรองสาคญ โดยเรานยาม ADT ทตองการใหเสรจเสยกอน แลวคอยมาคดในรายละเอยดวา ADT ทตองการนนควรสรางจรงๆ ดวยโครงสรางขอมลแบบใด จงจะมประสทธภาพทสด
ในบทนเราจะมาสรปอยางยอๆ ในเรองของโครงสรางขอมลทไดเคยเรยนมาในวชาโครงสรางขอมลเบองตน อนไดแกรายการ ตนไมคนแบบทวภาค ตารางแฮช ฮป และกราฟ แตละแบบกสนองความตองการในการจดการกบขอมลแตกตางๆ กน จะขอทบทวนเพยงเลกนอย โดยจะเสรมการวเคราะหประสทธภาพการดา เนนการสาหรบกรณทไมไดแสดงใหดตอนเรยนวชาโครงสรางขอมล
รายการรายการ (list) เปนโครงสรางขอมลทรองรบการดาเนนการทวๆไปคอการเพม ลบ และคนขอมล สงทเดนของรายการกคอขอมลทจดเกบนนมการระบตาแหนง หมายความวาแตละขอมลทเกบนนมความสมพนธในเรองทวาตวใดอยกอนหรอหลงตวใด ดงนนจะรองรบการดาเนนการทเกยวกบตาแหนงของขอมล เชนตาแหนงแรกสด ตาแหนงทายสด ตาแหนงถดไป ตาแหนงกอนหนา เหลานเปนตน เมอผใชตองการเพมหรอลบขอมล กตองระบตาแหนงของขอมลทจะดาเนนการดวย
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 89
วธสรางรายการนนกระทาไดงายสองวธคอ การใชแถวลาดบเกบขอมล โดยใชเลขดชนของแถวลาดบแทนตาแหนงของขอมลในรายการ (ดรปท 6–1) หมายความวาขอมลตางๆ ในรายการถกเกบตดกนไปในแถวลาดบเรมตงแตชองแรกไปเรอยๆ ดวยวธนการเขาถงขอมลโดยระบตาแหนงจะสามารถทาไดในเวลา �(1) เนองจากการเขาถงขอมลในแถวลาดบโดยการระบเลขดชนนนกระทาไดในเวลาคงตว แตวาการเพมและลบขอมลนนใชเวลาเปน O(n) เนองจากอาจมการยายขอมลเพอแทรกขอมลตวใหม หรอยายขอมลเพอปดตาแหนงของขอมลตวทถกลบ ในขณะทการคนขอมลนน ถาใชแบบคนตามลาดบกจะใชเวลาเปน O(n) แตถาเราจดใหขอมลทเกบในแถวลาดบนนเรยงลาดบตามคาของขอมลกสามารถคนแบบทวภาคไดในเวลา O(log n)
count 1 2 3 4 5 6 7 8 9 105 25 31 42 9 84
รปท 6–1 การสรางรายการ <25, 31, 42, 9, 84> ดวยแถวลาดบ
เพอขจดปญหาทตองยายขอมลเนองจากการเพมหรอลบขอมล (เพราะวาความตองการทจะใหขอมลตดกนในแถวลาดบ) เราสามารถเกบขอมลแตละตวแยกจากกน แลวเกบทอยของขอมลตวถดไป (หรอตวกอนหนาดวยกได) เพอสรางความสมพนธเชงอนดบของขอมลในรายการไว วธการเกบแบบนเรยกวารายการโยง (linked list) ดวยวธน รปท 6–2 แสดงรายการโยงของรายการ <25, 31, 42, 9, 84> โดยชองทมเสนลกศรแทนการจาทอยของกอนขอมลถดไปในรายการ ในกรณเปนขอมลตวสดทายกจะเกบคาพเศษเพอระบวาไมมตวถดไป
25 31 42 9 84
รปท 6–2 การสรางรายการ <25, 31, 42, 9, 84> ดวยรายการโยง
เนองจากขอมลไมจาเปนตองเกบตดกนในหนวยความจา ดงนนการแทรกขอมลใหมระหวางขอมลตวเกาสองตวกกระทาไดโดยเพยงแตเปลยนตวโยงอนดบขอมลในรายการเทานน ซงใชเวลาเปน �(1) การลบขอมลกเชนเดยวกนใชเวลาเปน �(1) แตเราไมสามารถเขาถงขอมลไดรวดเรวโดยการระบตาแหนง (หรอเลขอนดบ)ของขอมลในรายการ (เชนอยากไดขอมลตวท 3 เปนตน) วธเดยวททาไดกคอตองเรมทหวรายการแลวคอยๆ กระเถบไปทละตวจนถงตวทตองการ ซงใชเวลาเปน O(n) และการคนขอมลกคงตองทาแบบลาดบเทานนซงใชเวลาเปน O(n) ไมสามารถคนแบบทวภาคไดรวดเรวดวยเหตทไมสามารถเขาถงขอมลใดไดรวดเรวนนเอง
90 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
สรปไดวาสาหรบการเกบขอมลแบบรายการนน ไมวาจะใชวธใดสรางกตาม โดยทวไป 1 จะมบางการดาเนนการทใชเวลาเปน O(n)
ตนไมคนแบบทวภาคตนไมคน (search tree) เปนโครงสรางขอมลอกประเภทหนงทรองรบการดาเนนการทวไป จาพวกการเพม ลบ และคนขอมล เนองจากการจดเกบขอมลในตนไมคนนนอาศยอนดบของขอมลทไดจากการเปรยบเทยบวานอยกวาหรอมากกวา มาเปนตวกาหนดโครงสรางการจดเกบ ดงนนจงรองรบการดาเนนการทมเรองของอนดบของขอมลเกยวของดวย เชนการหาตวมากสด การหาตวนอยสด การหาตวทมคาใกลสดกบขอมลทตองการ เปนตน
ตนไมคนทใชกนมากคอตนไมคนแบบทวภาค (binary search tree) เปนตนไมแบบทวภาคทแตละโหนดมสองลก โดยมกฎในการเกบคอขอมลทกๆ ตวในตนไมยอยทางซายของโหนด x ตองมคานอยกวาขอมลท x และขอมลทกๆ ตวในตนไมยอยทางขวาของโหนด x ตองมคามากกวาขอมลท x รปท 6–3 แสดงตวอยางตนไมคนแบบทวภาค ใบของตนไมซงแสดงดวยสเหลยมทบแทนจดสนสดคอไมมขอมลเกบอย วธสรางกคลายรายการโยงคอใชวธจาทอยของโหนด
25
15 51
2 20
18
73
รปท 6–3 ตนไมคนแบบทวภาค
การคนขอมลกระทาโดยการวธไลเปรยบเทยบเรมจากราก อาศยผลของการเปรยบเทยบในกรณไมเทา เปนตวตดสนใจวาจะเลยวไปคนตอในตนไมยอยซาย หรอขวา ถาการคนสนสดทใบ กแสดงวาไมพบขอมลทตองการคน ดงนนประสทธภาพการคนจงเปน O(h) โดยท h คอความสง 1 ทตองขอใชคาวาโดยทวไป กเพราะวามรายการพเศษบางประเภททออกแบบเฉพาะงาน ซงใหประสทธภาพทดกวาได อาทเชน stack หรอ queue
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 91
ของตนไม การเพมและลบขอมลกมประสทธภาพเปน O(h) เชนกน (จะไมขอลงในรายละเอยดของวธการเพมและลบ)
ปญหาทนาสนใจกคอความสงของตนไมเปนเทาไร ความสงของตนไมคนแบบทวภาคนมชวงทเปนไปไดกวางมากคอเตยทสดเทากบ 1 + �lg n� (กรณของตนไมไดดล) และสงสดเปน n(เชนกรณททกๆ โหนดเรยงยาวทางขวาไปเรอยๆ จากนอยสดไปมากสด) ดงนนถามขอมลหนงลานตว ความสงของตนไมจะอยในชวง 20 ถงหนงลาน ซงกวางมาก แลวการเพม ลบและคนขอมลจะมประสทธภาพเปนเชนไร
วธหนงทพอจะชวยใหเหนภาพของตนไมในกรณเฉลยได กคอการวเคราะหจากตนไมคนแบบทวภาคทสรางขนจากการเพมขอมลทสมขน แลววเคราะหหาความลกเฉลยของโหนดภายใน และความลกเฉลยของโหนดภายนอก (ซงคอใบ) จะขอเรมดวยการหาคา DI(n) ซงคอความลกเฉลยของโหนดภายในของตนไมคนแบบทวภาคทมขอมล n ตว กาหนดให I(n) คอผลรวมของความยาวของวถจากรากถงทกๆ โหนดภายใน เรยกคานวาความยาวของวถภายใน (internal path length) จะไดวา
DI (n) = I(n)n
LR
รปท 6–4 ตนไมคนแบบทวภาค
พจารณารปท 6–4 ถาตนไมทงตนม n โหนด และตน L ม k โหนด ตน R กจะม n–k–1 โหนด ถาพจารณาเฉพาะตน L (ไมคดวาเปนลกของใคร) L ยอมมความยาวของวถภายในเปน I(k) และในทานองเดยวกน R ยอมมความยาวของวถภายในเปน I(n–k–1) แตเมอพจารณา L ตอนทเปนตนไมยอยทางซาย ทกๆ โหนดใน L ยอมมความลกเพมอกหนงระดบ และทานองเดยวกบตน R ทเมอเปนตนไมยอยทางขวา ทกๆ โหนดกจะลกลงอกหนงระดบเชนกน เขยนเปนความสมพนธเวยนเกดของ I(n)ไดดงน
I(n) = (I(k) + k )+ (I(n–k–1) + n–k–1)= I(k)+ I(n–k–1) + n–1
92 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
เนองจากตน L มสทธทจะมจานวนโหนดภายในไดตงแต 0 ถง n–1 โดยทแตละแบบมโอกาสเทาๆ กน ทงนเพราะวาตนทางซายจะมกตว กขนกบคาของรากวาเปนอนดบทเทาไรในขอมล nตว เนองจากขอมลทเพมเขามานนเปนคาสม โอกาสทรากจะเปนอนดบใดนนจงถอไดวาเทาๆ กน ดงนนคาเฉลยของความยาวของวถภายในยอมเทากบ
� �
� �
)1()(2
)1()1()(1
1)1()(1)(
1
0
1
0
1
0
���
������
������
�
�
�
�
�
�
�
�
�
nkIn
nknIkIn
nknIkIn
nI
n
k
n
k
n
k
สามารถหาผลเฉลยของ I(n) ไดดงน
)1()(2)(1
0��� �
�
�
nnkInnIn
kคณ n ตลอด
)2)(1()(2)()1(2
0����� �
�
�
nnkInInn
kเปลยน n เปน n–1
nI(n) = (n+1)I(n–1) + 2(n–1)
< (n+1)I(n–1) + 2n
นาสองความสมพนธขางตนมาลบกนตด –1 ตวขวาสดทง (จะทาใหงายตอการหาผลเฉลย)
I(n)n+1 <
I(n-1)n +
2(n+1)
= I(1)
2 +2��
��1
3 +14 +…+
1n+1
หาร n(n+1) ตลอด จากนนคลความสมพนธเวยนเกด โดยท I(1) = 0 ผลบวกทปรากฎในวงเลบคลายจานวนฮารมอนก Hn+1
I(n) < 2(n+1)Hn+1
= O( n log n )
จากความร Hn = O(log n)
ดงนนจาก DI(n) = I(n)n = O(nlog n)
n = O( log n )
เราสามารถหาความลกเฉลยของใบ (DE(n)) ของตนไมคนแบบทวภาคไดจากความยาวของวถภายนอก ( E(n) : external path length) ซงคอผลรวมของความยาวของวถจากรากถงทกๆ ใบในตนไม โดย DE(n) =
E(n)n+1 (ทตองหารดวย n+1 กเพราะวาตนไมทมโหนดภายใน n โหนดจะม
n+1 ใบ) เราสามารถหา E(n) ไดจากสมการ E(n) = I(n) + 2n (สามารถพสจนไดงายๆ ดวยอปนยเชงคณตศาสตร ซงจะไมขอกลาวรายละเอยดในทน ผสนใจหาอานไดจากตารา
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 93
คณตศาสตรภนทนะในบททเกยวกบตนไม) เมอ I(n) = O(n log n) จะไดวา E(n) = O(n log n) ดวย ดงนน DE(n) =
E(n)n+1 = O(nlog n)
n+1 = O( log n )
สรปไดวาความลกเฉลยของทงโหนดภายในและโหนดภายนอกเปน O( log n ) การคนขอมลทใชเวลาแปรตาม DI(n) กรณคนพบ และแปรตาม DE(n) กรณคนไมพบ รวมถงการเพมและการลบทใชเวลาแปรตาม DE(n) จงใชเวลาในกรณเฉลยเปน O( log n ) ทงสน
อนงตองขอเนนวารปลกษณะของตนไมทไดวเคราะหมาน มาจากการเพมขอมลอยางเดยว ในกรณทมการลบขอมลผสมดวยอาจไดผลตางจากทนาเสนอ
ความจรงแลวขอความทเรากลาววาประสทธภาพโดยเฉลยเปน O( log n ) นนตความลาบาก อกทงสมมตฐานทเราตงไววาขอมลทเพมมคาสม หรอวาลกษณะของขอมลในรปแบบตางๆ มโอกาสเกดขนเทาๆ กนนน กเหนจะไมคอยตรงกบความจรงทเกดขนในทางปฏบต เพราะถาเราเจอขอมลทไดตนไมทสง (เชนขอมลทเพมเขามาเรยงจากนอยไปมาก) เรากจะไดประสทธภาพทไมดตลอดไป วธแกปญหานมหลายแนวทางดงน
� เพมกฎในการจดเกบใหไดโครงสรางทประกนวาความสงเปน O( log n ) แนนอน เชนตนไม AVL หรอตนไม Red–Black ซงจะไดวาการเพม ลบ และคนขอมลนนใชเวลา O( log n ) ในกรณเลวสด
� ใชแนวคดโครงสรางขอมลแบบปรบตวเอง (self–adjusting structure) เชนตนไม splay ทลกษณะของตนไมจะเปลยนแปลงแมกระทงเมอเราค นข อมลในตนไม กระบวนการปรบโครงสรางนจะประกนวาตนทนถวเฉลยของการเพม ลบ และคนเปน O(log n)
� ใชแนวคดการจดโครงสรางตนไมเชงสม เชนตนไม treap ซงมการเพมขอมลเสรมสาหรบการจดอนดบแบบฮปตามโหนดตางๆ ในตนไมคนแบบทวภาค โดยอาศยขอมลเสรมนเปนตวกาหนดรปรางของตนไม ซงสามารถพสจนไดวาหากขอมลเสรมนเปนจานวนสมจะไดตนไมทมความสงเปน O(log n)
แบบแรกนกเรยนคงไดเรยนกนมาแลวในวชาโครงสรางขอมล สวนสองแบบหลงนนเราจะไดนาเสนอกนในบทตอๆ ไป
94 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
ตารางแฮชจะวาไปแลวตนไมคนแบบทวภาคนน เปนลกษณะโครงสรางขอมลทรองรบความตองการสารพดรปแบบทมประสทธภาพด ไมวาจะเปนการเพม ลบ คน คนตวนอยสด ตวมากสด ตวถดไป หรอแมกระทงไลเรยงขอมลจากนอยไปมาก กกระทาไดอยางมประสทธภาพ แตถาเราตองการแคการเพม ลบ และคน โดยไมมการดาเนนการทเกยวของกบอนดบของขอมลเลย เราสามารถใชโครงสรางขอมลทเรยกวาตารางแฮช (hash table) ซงมประสทธภาพทเหนอกวา
ตารางแฮชอาศยการเกบขอมลในตาราง แลวใชการคานวณเลขทอยของขอมล แทนการจาเลขทอยของขอมลทสมพนธกน วธการคานวณนเรยกวาฟงกชนแฮช (hash function) ซงรบคยของขอมล มาคานวณอะไรบางอยางในเวลาคงตว เพอใหไดตาแหนงในตาราง ฟงกชนแฮชจะสดยอดมากถาขอมลแตละตวมเลขทอยในตารางของมนเองไมซากบขอมลอน แตในทางปฏบตจะหาสภาพทเปนอดมคตแบบนไดลาบาก ทงนเพราะเราไมรกอนลวงหนาวาขอมลทจะจดเกบมคาอะไรบาง ดงนนจงเปนเรองธรรมดา ทฟงกชนแฮชจะคานวณไดตาแหนงเดยวกนสาหรบขอมลทตางกน สภาพเชนนเรยกวาเกดการชน (collision) เมอยอมรบวาคงจะเกดการชนแน กตองหามาตรการรองรบ วธแรกคอพยายามลดจานวนการชนใหนอยๆ หนอย และวธทสองคอออกแบบวธหาทเกบใหกบขอมลใหมทไปชนกบขอมลเดมในตาราง
ฟงกชนแฮชทดตองเปนฟงกชนทคานวณไดรวดเรวและลดจานวนการชน ฟงกชนแฮช h(k) ควรมคณสมบตทแตละคยทเปนไปไดมโอกาสเทาๆ กนทจะไปอยในชองใดๆ ในตาราง (เรยกคณสมบตเชนนวา simple uniform hashing) ถา P(k) คอความนาจะเปนทคย k จะถกเลอกมาจากเซตของคยทเปนไปไดทงหมด และ sj คอเซตของคยทงหมดทเมอแฮชแลวจะไปตกทชอง jของตารางทมขนาด m ชอง นนคอ sj = { k | h(k) = j } ฟงกชนแฮช h(k) จะเปน simple uniform hashing เมอ
mkP
jsk
1)( ���
สาหรบ j = 0, 1, ..., m–1
โดยทวไปจะออกแบบฟงกชนแฮชใหไดตามคณสมบตขางบนนเหนจะอยาก เนองจากเรามกไมรคา P(k) อยางไรกตามมรปแบบของฟงกชนแฮชทใชกนไดดในทางปฏบต ดงน
h(k) = ((ak + b) mod p ) mod m
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 95
k เปนจานวนเตมในชวง [0, U–1] m เปนขนาดของตาราง p เปนจานวนเฉพาะทมคาในชวง [U, 2U ) a และ b เปนคาคงตวโดยท 0 < a < p และ 0 � b < p
ฟงกชนแฮชขางบนนจะเปนเชนไรกขนกบคาของ a และ b เราเรยกชดของฟงกชนแฮชทมรปแบบเชนนสาหรบทกๆ a และ b วาเปนการแฮชเชงจกรภพ (universal hashing) ซงสามารถพสจนใหเหนไดวาคาคาดหวงของจานวนการชนของขอมลมคานอยกวาหนง (จะขอพสจนใหเหนจรงในภายหลง เมอเรานาเสนอเรองอลกอรทมเชงสมในบทหลงๆ )
แลวคาของ a และ b จะเปนเชนไร ? กงายๆ ใชวธสมขนมา (สมแลวกใชคานนตลอดการทางาน) ดวยเทคนคแบบนทาใหนกทดสอบโปรแกรมทตองการใสขอมลขาเขาทแกลงการเกบขอมลในตารางแฮชใหทางานชาสดๆ (คอสรางชดขอมลทแฮชแลวชนตลอด) นนกระทาไมได เพราะคา a และ b ทใชเปลยนทกครงทโปรแกรมเรมทางาน (แตพอตงคาแลวกเปนคาคงตวตลอดการทางานของโปรแกรม)
นอกจากการเลอกใชฟงกชนแฮชทดแลว เรากตองเตรยมมาตรการการแกปญหาการชนดวย (เนองจากฟงกชนแฮชทดนนเพยงลดจานวนการชนลงเทานน จะใหลดจนเปนศนยเหนจะลาบาก) วธการหาทเกบใหมใหกบขอมลใหมทชนกบขอมลเดมกมอยสองวธคอ separate chaining และ open addressing
Separate chaining อาศยการจดเกบขอมลทชนกนใหอยในรายการขอมลเดยวกน (โดยทวไปใชรายการโยง) โดยแตละชองของตารางแฮชกเพยงแตเกบหวของรายการโยงของขอมลทมคาแฮชเดยวกน (ดรปท 6–5 ประกอบ) จะเหนไดวาถาฟงกชนแฮชทใชนนด เรากคาดหวงวารายการโยงของแตละชองในตารางแฮชคงมความยาวพอกน
70 15
21
67
13 88
รปท 6–5 ตารางแฮชแบบ separate chaining โดยท h(k) = k mod 5
96 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
กาหนดให n คอจานวนขอมลในตาราง m คอขนาดของตาราง และ � คอสดสวนของจานวนขอมลตอขนาดของตาราง ( n/m ) หรอทเรยกวา load factor ถาฟงกชนแฮชเปนแบบ simple uniform hashing จะไดวาความยาวของรายการโยงโดยเฉลยจะเทากบ � กระบวนการคนขอมลกจะประกอบดวยการแฮช และการคนในรายการของชองในตารางทแฮชมา เวลาการคานวนฟงกชนแฮชเปน �(1) ดงนนถาคนแลวไมพบขอมล กตองใชเวลาเปน �(1+�) เพราะตองคนทงรายการจงสรปไดวาไมพบ แตถาคนพบขอมลโดยเฉลยกจะคนไปประมาณครงหนงของรายการ ดงนนเวลาการคนแลวพบเปน �(1+�/2) = �(1+�) สาหรบการเพมนนในกรณทเกบเปนรายการโยง กควรเพมทหวรายการเพราะเรวจะไดเวลาเปน �(1) สาหรบการลบกคอการคนกอนแลวลบซงใชเวลาเทากบการคน
จะเหนไดวาเวลาการทางานของการเพม ลบ และคนนนขนกบ � ทงสน ดงนนหากเราออกแบบใหตารางแฮชนม �ไมเกนคาคงตว (ซงอาจอนญาตใหตารางยดหดตวไดเพอคมคาของ �) กจะไดวาเวลาการทางานของการเพม ลบ และคนเปน �(1) (กรณถวเฉลย) ซงเปนคณสมบตทไมเคยเกดขนกบโครงสรางขอมลแบบรายการหรอตนไม
Open Addressing วธนเกบขอมลทกๆ ตวไวทตารางแฮช เมอเกดการชน จะตองหา (เรยกวาการ probe) ชองใหมในตารางเพอเกบขอมลใหม ถาชองท probe ไมวาง กตอง probe ตอไปจนกวาจะเจอชองวาง การหาชองใหมทวางนมไดหลายวธ ดงน
� linear probing วธนอาศยสตร hi(k) = ( h(k) + i ) mod m ทคานวณหาหมายเลขชองเมอเกดการชนครงท i หรอจะอธบายงายๆ กคอเมอชนกไล probe ชองถดไปเรอยๆ แบบลาดบจนกวาจะพบชองวาง
� quadratic probing วธนอาศยสตร hi(k) = ( h(k) + i2 ) mod m เนองจาก linear probling นนเกดการเกาะกลมกนของขอมล ประสทธภาพการทางานยงวนจะยงคลายการคนแบบลาดบ จงใชวธการหาชองวางแบบ "กระโดดๆ" โดยการบวกดวย i2 จากตาแหนงเรมตน กจะเปนการลดการเกาะกลมกนของขอมลไปไดด
� double hashing วธนอาศยสตร hi(k) = ( h(k) + i�g(k) ) mod m วธทงสองทกลาวมานนการกระโดดไปหาตาแหนงใหมๆ นนระยะกาวกระโดดไมขนกบคาของคยเลย จงมพฤตกรรมการกระโดดเหมอนกนหมด ดงนนสาหรบคยทมคาแฮชเหมอนกนจะมลาดบการ probe ในตารางเหมอนกน ทาใหเกดการเกาะกลมแบบทเรยกวา secondary clustering ดง
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 97
นน double hashing จงอาศยอกฟงกชนแฮชหนงคอ g(k) ซงใหคามากกวาศนย ทมไวเพอคานวนระยะกระโดด ทาใหคยสองคยทมคาแฮชเหมอนกนมระยะกระโดดตางกน (ดวยความนาจะเปนทสง)
จะขอวเคราะหประสทธภาพการทางานของ open addressing แบบ uniform hashing ซงคอกรณททกๆ ลาดบการ probe นนเปนไปไดเหมอนๆ กนทกๆ กรณ (ถาม m ชองกมลาดบทเปนไปได m! กรณ) หรอพดงายๆ วา ชองตอไปทจะ probe มสทธทจะเปนชองใดๆ กไดทยงไมถก probe ลกษณะของ uniform hashing น ถงแมจะสรางไมไดจรงในทางปฏบต แต double hashing กมพฤตกรรมใกลเคยงมาก (และเหตผลใหญทแสดงวธวเคราะห uniform hashing ใหด กเพราะมนเขาใจงายกวาแบบอนๆ มาก อยางนอยกตองการแสดงใหเหนวา แบบทวาดสดแลว จะมประสทธภาพเทาใด)
เราเรมดวยการพจารณากรณทคนไมพบขอมล ซงมการ probe ไปเรอยๆ เจอแตชองไมวางและกไมใชขอมลทตองการ จนกระทงเจอการ probe ครงสดทายเปนชองวาง เลยสรปไดวาคนไมพบขอมลทตองการ กาหนดให pi คอ ความนาจะเปนทการ probe เปนจานวน i ครงแรก เจอแตชองไมวาง ดงนนคาคาดหวงของจานวนการ probe เทากบ
��
�
�
01
iiip
ขอกาหนดให qi คอความนาจะเปนทตอง probe อยางนอย i ชองทไมวาง จะไดวาq1 = p1 + p2 + p3 + …q2 = p2 + p3 + p4 + …
ดงนน ���
�
�
�
�
10 ii
ii qip สมมตวามขอมล n ตวเกบในตาราง m ชอง ความนาจะเปนทการ
probe ครงแรกเจอชองไมวางยอมเทากบ n/m ซงกคอ q1 และความนาจะเปนททงการ probe ครงแรกและครงสองเจอแตชองไมวางยอมเทากบ (n/m)((n–1)/(m–1)) ซงกคอ q2 ดงนน
qi = �� ��n
m ��
��n-1
m-1 …��
��n-i-1
m-i-1 � ����n
mi
หรอเขยนสนๆ วา qi � �i ดงนน คาคาดหวงของจานวน probe กรณคนไมพบคอ
���
�
�������� ���
�
�
�
11...111 2
10 ii
ii qip
98 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
ถาเราคมให � เปนคาคงตว กยอมไดวากรณคนขอมลไมพบเปน O(1) และเนองจากการเพมกคอการ probe จนเจอชองไมวางแลวจงใสขอมล ซงกมจานวน probe เทากบการคนไมพบ ดงนนการเพมขอมลกมคาคาดหวงของจานวน probe เปน 1/(1–�) เชนกน
สาหรบคนแลวพบขอมลนนจะยงนดหนอย ถาคน k แลวพบ k กแสดงวาการคนน probe ตามลาดบเดยวกบตอนทเพม k ลงในตาราง ถา k เปนขอมลตวท i+1 ทถกเพม แสดงวาตอนทจะเพม k นน load factor เปน i/m ดงนนคาคาดหวงของจานวน probe ตอนเพม k คอ 1/(1–i/m) ซงกคอคาคาดหวงของจานวน probe ในการคน k ดงนนคาคาดหวงของการคนแลวพบขอมลใดๆ กเพยงแตหาคาเฉลยของขอมลทง n ตว (ถอวาโอกาสทจะหาขอมลตวใดๆ มพอๆ กน) ซงเทากบ
� �nmmn
i
n
iHH
imnm
min �
�
�
�
�
��
�
�
���
�
11/1
11 1
0
1
0
โดยท Hi คอจานวนฮารโมนกตวท i จากความรใน discrete math. ทวา ln i � Hi � 1+ln i ดงนน
1 � (Hm – Hm–n) �
1 � ( 1 + ln m – ln(m–n) )
= 1 � ln
mm-n +
1 �
= 1 � ln
11-� +
1 �
เปนคาคาดหวงของจานวน probe สาหรบกรณพบขอมล ดงนนถา � = 0.9 แสดงวากรณเฉลยแลวเมอคนพบขอมลจะ probe ประมาณ 3.7 ชอง และเมอคนไมพบขอมลจะ probe ประมาณ 10 ชอง
ฮปฮป (heap) เปนโครงสรางขอมลทรองรบการทางานของ priority queue ไดเปนอยางดเยยม การดาเนนการหลกๆ ของ priority queue นนกประกอบไปดวย การเพม การหาคยนอยสด การลบคยนอยสด การลดคาของคย และการรวมฮป priority queue เปนลกษณะการจดการขอมลทใชระหวางการแกไขปญหามากมาย อาทเชนอลกอรทมแบบตระกลาม การคนผลเฉลยแบบ
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 99
ขยายและจากดเขต และแบบศกษาสานกอนๆ อกมายมายทเราจะไดกลาวถงในชวงหลงๆ ของวชาน
ฮปแบบงายทนกเรยนไดศกษากนมาแลวกคอ binary heap (ดตวอยางในรปท 6–6 ประกอบ) ซงจดเกบขอมลในตนไมแบบทวภาคไดดล โดยมกฎการจดเกบวาคยทโหนดพอตองมคานอยกวาคยของลกๆ เสมอ ดวยกฎแคนกประกนไดวารากตองมคาคยทนอยสด จงหาคยนอยสดไดในเวลา �(1) เนองจากเราสามารถสรางตนไมแบบทวภาคไดดลนดวยแถวลาดบแถวเดยว โดยอาศยสตรคานวณตาแหนงลกซาย ลกขวา และพอของโหนด i ไดงายๆ (ซงคอ 2i, 2i+1, �i/2�ตามลาดบโดยทรากอยทดชนท 1 ของแถวลาดบ) ทาใหการเกบ binary heap กนทนอยมาก ประสทธภาพรวดเรว เพราะการเพมและลบคยนอยสดนนใชเวลาแปรตามความสงของตนไมไดดล ซงคอ O(log n)
2
10 6
11 23 213 8
19 200
รปท 6–6 ตวอยาง binary heap
จะมกแตการรวมฮปเทานนทใชเวลา O(n) ซงอาศยการนาฮปสองฮปมาตอกน (หมายความวานาแถวลาดบทแทนฮปทงสองมาตอกน) จากนนทาการปรบฮป (บางทเรยกวา percolate down บางทเรยกวา heapify ) จากระดบลางๆ ไลขนไปจนถงราก การปรบฮปแตละครงกนเวลาแปรตามความสงของตนไมในกรณเลวสด กาหนดใหตนไมม n โหนด ยอมมความสง k = �lg n� เพราะวาเปนตนไมแบบทวภาคไดดล ใหสงเกตวาตนไมนจะมตนไมยอยทสง h อยจานวนทงสน n/2h โดยท h = 0, 1, …, k การปรบฮปของตนไมยอยทสง h ใชเวลา O(h) ดงนนการรวมฮปจงมปรบฮปยอยๆ ทงหลายซงใชเวลา
)()2(22
)(2 000
nOnOhnOhnOhOn
hh
k
hh
k
hh
����
�
�
��
�
�
���
����
��
��
�
�
��
�
�
���
����
���
��
����
�����
���
100 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
กราฟการแทนกราฟ G = (V, E) ในหนวยความจาโดยทวไปทาไดสองวธคอการใชเมทรกซประชด (adjacency matrix) และรายการประชด (adjacency list) กาหนดใหจดตางๆของกราฟมหมายเลข 1, 2, 3, …, �V� กากบ วธแทนแบบเมทรกซประชดนนอาศยเมทรกซ A ขนาด �V���V�โดย aij คอสมาชกแถวแนวนอนท i และแถวแนวตงท j เมอมเสนเชอมตอจากจด i ไปยงจด j จะไดวา aij = 1 มฉะนน aij = 0 สาหรบกรณของกราฟไมระบทศทาง (directed graph) กเพยงแตกาหนดให aij = aji และถากราฟถวงนาหนก (weighted graph) ซงเสนเชอมแตละเสนมจานวนทแทนนาหนกกากบ กเพยงแตให aij แทนนาหนกของเสนเชอมจาก iไป j และให aij มคาพเศษเชน 0 หรอ (ทงนขนกบปญหา) เมอไมมเสนเชอม (i, j) รปท 6–7 แสดงตวอยางของการแทนกราฟโดยใชเมทรกซประชด
สาหรบการแทนกราฟ G = (V, E) ดวยรายการประชดนน ประกอบดวยรายการแรกเปนรายการของจดตางๆ ใน V (แสดงดวยแถวลาดบแถวตงในรปท 6–7) แตละจด i ในรายการแรกนจะเกบรายการโยงของจดอนๆ ทตอกบ i (สาหรบกรณกราฟไมมทศทาง) หรอทจด i มเสนเชอมพงไปหา (สาหรบกรณกราฟทมทศทาง) ในกรณของกราฟถวงนาหนก กสามารถเกบนาหนกกากบเสนเชอมไวตามโหนดตางๆในรายการได ดงตวอยางในรปท 6–7
การแทนกราฟ G = (V, E ) ดวยเมทรกซประชดนนจะใชเนอทเปน �(�V�2 ) ทเปนขนาดของเมทรกซ ในขณะทเมอแทนดวยรายการประชด จะใชเนอทเปน �(�V�+�E�) ซงโดยทวไปจะพบวาเราแทนกราฟดวยรายการประชด เนองจากใชเนอทนอยกวา 2 โดยเฉพาะกรณเมอกราฟมจานวนเสนเชอมนอย คอเปนกราฟแบบโลงๆ (sparse) แตอยางไรกตามการจะแทนกราฟดวยวธใดนนคงพจารณาถงการเขาถงลกษณะของกราฟดวย ซงจะพบวาถาหากตองทดสอบวาจดหนงตอกบอกจดหนงหรอไม อยบอยๆ จะเหนไดชดเลยวาเมทรกซประชดเหนอชนกวารายการประชดมากเนองจากเพยงแตดจาก aij กไดคาตอบ ในขณะทการใชรายการประชดตองใชเวลาเปน (�V� ) แตถาเราอยากรวามจดใดบางทตอกบจดหนง แบบนรายการประชดชนะขาด เพราะเปนโครงสรางทเกบคาตอบของคาถามแบบนอยแลว ไมเหมอนเมทรกซประชดทเราตองวงไลเทยบเปนจานวน �(�V� ) เสมอกวาจะไดคาตอบ
2 ตองเนนวาเมอพจารณาแบบเชงเสนกากบ หรออกนยหนงเมอกราฟมขนาดใหญ
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 101
1
2 3
4 5
1 2 3 4 51 0 1 1 1 02 1 0 1 0 13 1 1 0 0 04 1 0 0 0 15 0 1 0 1 0
1
2
3
4
5
2 3 4
1 3 5
1 2
1 5
2 4
(ก) กราฟไมระบทศทาง
1
2 3
4 5
1 2 3 4 51 0 1 0 1 02 0 0 1 0 03 1 0 0 0 04 0 0 0 0 05 0 1 0 1 0
1
2
3
4
5
2 4
3
1
2 4
(ข) กราฟระบทศทาง
1
2 3
4 5
1 2 3 4 51 0 1 0 8 02 0 0 9 0 03 2 0 0 0 04 0 0 0 0 05 0 3 0 3 0
1
2
3
4
5
2,1 4,8
3,9
1,2
2,3 4,3
91
3
38
2
(ค) กราฟถวงนาหนกรปท 6–7 การแทนกราฟดวยเมทรกซประชด และรายการประชด
แบบฝกหด1. จงออกแบบโครงสรางขอมลแบบ multiset ซงเกบกลมขอมลทซากนได เพอใหสามารถเพมหรอลบขอมลไดในเวลาคงตว (การลบตองระบตาแหนง)
2. จงออกแบบอลกอรทมเพอตรวจสอบวารายการโยงทใหมานนมวงวนอยภายในหรอไม ตวอยางของรายการโยงทมวงวนแสดงดงรปขางลางน
21 1 2 21 88 88 31 88 21
102 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
3. จงพสจนความสมพนธ E(n) = I(n) + 2n (หนาท 92)โดยท E(n) คอความยาวของวถภายนอก I(n) คอความยาวของวถภายใน และ n คอจานวนโหนดภายใน
4. จงออกแบบวธการรวมตนไมคนแบบทวภาคสองตนเขาดวยกนกลายเปนตนเดยว โดยใชเวลาเปน O(h) โดยท h คอความสงของตนไมตนทสงกวาของตนไมทงสอง
5. จงออกแบบเพอหาขอมลตางๆ ทเกบในตนไมคนแบบทวภาคซงมคาอยในชวง [k1, k2] ทกาหนดให โดยใชเวลา O(K + log n) โดยท n คอจานวนขอมลในตนไม และ K คอจานวนขอมลในชวงทหาได
6. จงแสดงใหเหนจรงวาคาคาดหวงของเวลาในการคนขอมล (เมอคนพบ) ในตารางแฮชแบบ separate chaining นนเทากนไมวาเราจะใชวธเพมขอมลเขาทางหวรายการ หรอทายรายการ
7. ถาเราออกแบบใหขอมลในรายการของ separate chaining นนเรยงลาดบจากนนไปมาก อยากทราบวาจะมผลกระทบอยางไรเชงเวลาการทางานของการเพม ลบ คนแลวพบ และคนแลวไมพบ
8. จงยกตวอยางเหตการณซงเมอใช quadratic probing แลวไมสามารถ probe พบชองวางในตาราง ถงแมจะมชองวางในตารางอยกตาม
9. จงพสจนวาหากกาหนดใหตารางแฮชมขนาดเปนจานวนเฉพาะ การใช quadratic probing จะสามารถ probe พบชองวางในตารางแฮชแนๆ ถา load factor มคา > ½
10. การ Insert และ ExtractMin ของฮปแบบทวนามซงเกบขอมล n ตวนนใชเวลา O( log n ) จงออกแบบฟงกชนพลงงานศกย � เพอแสดงใหเหนวาตนทนถวเฉลยของ Insert คอ O( log n ) ในขณะทของ ExtractMin คอ O(1)
11. จงออกแบบโครงสรางขอมลเพอรองรบการดาเนนการ Insert ในเวลา O(log n) และการดาเนนการ ExtractMin และ ExtractMax ในเวลา O(1)
12. การรวมฮปแบบทวภาคทไดนาเสนอมานนทาไดโดยการนาแถวลาดบทแทนฮปทงสองมาตอกน ไดเปนแถวลาดบใหม (ใหชวา H) จากนนอาศยการคอยๆ ปรบฮป (heapify) ตนไมยอยเลกๆ ดานลาง ไลจากขวามาซาย จากลางขนบน (ซงคอการ heapify H[n/2] ไลกลบมาจนถง H[1] ) ซงใชเวลา O(n) จงใหเหตผลวาการรวมฮปของวธขางลางนทางานไดจรงหรอไม ถาได จะใชเวลาเทาใด
Draft 1.0 : 30/10/00 4:58 : [email protected] บทท 6 โครงสรางขอมล (แบบงาย) 103
ก) heapify เรมจาก H[1] ไปจนถง H[n/2]ข) ผลกขอมลขนดวยวธ bubble up เรมตงแต H[n] ไลกลบมาจนถง H[2]
13. นอกจากการใชเมทรกซประชด และรายการประชดเพอแทนกราฟแลว เรายงสามารถแทนกราฟไมระบทศทาง G=(V, E) ดวยเมทรกซอบตการณ (incidence matrix) B ซงมขนาด |V| � |E| โดยท bij มคาเปน 1 ถามจด vi ตอกบเสนเชอม ej มฉะนนกมคาเปน 0 จงบรรยายการแทนกราฟระบทศทาง และกราฟถวงนาหนก ดวยเมทรกซอบตการณ พรอมทงยกตวอยางประกอบดวย
14. กาหนดให G = (V, E) คอกราฟไมระบทศทาง จงออกแบบวธการสรางกราฟ G �
= (V, E �
) ซงคอสวนเตมเตมของกราฟ G โดยท E
� = { (i, j) | (i, j) � E } ในแตละกรณทแทนกราฟ
ดวยเมทรกซประชด รายการประชด และเมทรกซอบตการณ (อธบายในแบบฝกหดขอท 13)
15. ถาเราแทนกราฟระบทศทาง G = (V, E) ดวยเมรกซประชด จงออกแบบอลกอรทมทสามารถหาจดของกราฟทเปนจดรบ (sink) ไดในเวลา O( |V| ) จดรบในกราฟคอจดซงดกรออก (out-degree) เปน 0 ในขณะทดกรเขา (in-degree) เปน |V|-1
104 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 4:58 : [email protected]
Draft 1.0 : 30/10/00 5:09 : [email protected] 105
บทท 7
ในบทนเราจะนาเสนอเรองของโครงสรางขอมลกนตอ แตคราวนเปนโครงสรางขอมลแบบยงหนอย (แตไมยาก) คอจะยงในเชงของการวเคราะห เนองจากเปนโครงสรางขอมลทดผวเผนแลวไมนาจะใชไดด แตพอวเคราะหกรณถวเฉลยจะพบวามประสทธภาพดทดเทยม หรอในหลายกรณดกวาแบบทไดนาเสนอมาในบททแลว โดยจะนาเสนอโครงสรางขอมลตนไม splay ฮปทวนาม ฮปทวนามแบบขเกยจ ฮปฟโบนกช และเซตไมมสวนรวม การนาเสนอในบทนจะไมเขยนรหสเทยมของการดาเนนการตางๆ ใหด (ถาไมจาเปน) แตจะใชวธการบรรยายกระบวนการทางานแทน ซงจะบรรยายแนวคดหลกๆ โดยถอวานกเรยนควรมความสามารถเพยงพอทจะเปลยนแนวคดทบรรยายไปเปนโปรแกรมได (หรอจะดจากหนงสอตามทองตลาด หรอในหองสมดกได)
ตนไม splayเราไดรกนมาแลววาประสทธภาพของการดาเนนการโดยทวไป ของตนไมคนแบบทวภาคนน แปรตามความสงของตนไม ในกรณดสดกไดตนไมไดดลความสงเปน �(log n) ในกรณเลวสดกจะสงเปน �(n) แตถาเปนตนไมทสรางมาจากการเพมขอมลทมคากระจาย (เสมอนสม) กจะไดตนไมทมความสงเปน �( log n ) ซงกเปนขาวดตรงทวาเปนตนไมทเตยมาก แตอยางไรกตามหากเราพบกบลกษณะทไมด กจะไมดตลอดการทางาน ซงเปนไปไดวาถามการดาเนนการเปนจานวน m ครงกบตนไมคนแบบทวภาคทสงกจะใชเวลาเปน �( mn ) ในกรณเลวสด
โครงสรางขอมล (แบบยง)
106 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
เราแกปญหานไดสองวธ (ความจรงมอกวธหนงซงจะยงไมขอบอกตอนน แตจะขอยกไปอธบายในบทหลงๆ) วธแรกอาศยการเพมกฎเกณฑในการจดเกบขอมล เพอบบโครงสรางของตนไมไมใหสงนก ตนไม AVL และ ตนไม Red–Black เปนตวอยางของตนไมคนทสามารถควบคมความสงของตนไมใหเปน �(log n) ตลอดเวลา ผลทไดตามมากคอประสทธภาพของการดาเนนการโดยสวนใหญเปน �(log n) ในกรณเลวสด ดงนนการดาเนนการเปนจานวน mครงกบตนไมแบบนกจะใชเวลาเปน �( m log n ) ในกรณเลวสด (นกเรยนคงไดศกษารายละเอยดของตนไมประเภทนมาแลวในวชาโครงสรางขอมล จะไมขอลงในรายละเอยด)
อกวธหนงในการประกนประสทธภาพการทางานบนตนไมคน กคอการอนญาตใหตนไมปรบเปลยนโครงสราง ตามลกษณะของรปแบบการเขาถงโหนดตางๆ ในตนไม เรยกวาเปนแบบโครงสรางปรบตนเอง (self–adjusting structure) ซงเปนกลวธทใชในตนไม splay ทจะอธบายในหวขอน ตนไม splay ไมไดประกนเรองความสงของตนไม (หมายความวาการดาเนนการตางๆ มโอกาสใชเวลาเปน �(n) ในกรณเลวสด) สงทตนไม splay ประกนกคอวาการดาเนนการใดๆ กบขอมลในตนไมนเปนจานวน m ครงจะใชเวลาเปน O( m log n ) ดงนนเมอคดแบบถวเฉลยแลวจะได O(log n) ตอหนงการดาเนนการ
การ splayตนไม splay อาศยขนตอนการยายตาแหนงของโหนดทสนใจใหสงขนโดยการหมน เชนเดยวกบตนไม AVL การหมนโหนดนนมสามรปแบบดงน zig, zig–zig และ zig–zag (ดรปท 7–1)
แบบ zig วธนใชกบโหนดทไมมป นนคอโหนดทเปนลกของรากเทานน เมอไป zig ทโหนด x โหนด x กจะเปนรากของตนไมหลง zig (วธนคลายกบ single rotation ของตนไม AVL)
แบบ zig–zig วธนใชกบโหนด x ทมพอ (โหนด p) และมป (โหนด g) ดวย โดยท x ตองเปนลกของ p ในทศทางเดยวกบท p เปนลกของ g หลงการ zig–zig ท x จะได x สงขนสองระดบและ g หลนลกลงไปสองระดบ
แบบ zig–zag คลายกบ zig–zig ตางกนตรงททศทางของความเปนพอลกของ x กบ p และของ p กบ g จะตองเปนคนละทศกน หลงการ zig–zag ท x จะได x สงขนสองระดบและ g หลนลกลงไปหนงระดบ (วธนคลายกบ double rotation ของตนไม AVL)
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 107
x
p
A
C
B
xp
B
A
C
zig ท x
zig-zig ท xp
g
x
BA
C
D
p
g
x
DC
B
A
zig-zag ท xp
g
D
p gx
BA
x
CB
A DC
รปท 7–1 การหมนแบบ zig, zig–zig และ zig–zag ของตนไม splay (ในแตละกรณจะมกรณสมมาตรทไมไดแสดงใหเหน อยากเหนกใหมองสองกระจกเอาเอง)
แลวจะหมนเมอใด ? สงทแปลกอยางหนงของตนไม splay กคอเมอใดทเขาถงโหนดๆ หนง เชนตองการคนโหนด x ในตนไม หลงจากทพบ x แลวจะหมนโหนด x ใหสงขนเรอยๆ จนกลายเปนรากแลวจงจะหยดหมน เราเรยกการลยหมนจนเปนรากนวาการ splay 1 รปท 7–2แสดงตวอยางการตนไมหลงการคนพบ 6 ในตนไม จะ splay ท 6 เกดการหมนแบบ zig–zig สองครง และ zig อกครง ทาให 6 เปนรากของตนไม
1 การหมนโหนด x จนกลายเปนรากใหมของตนไมนนเรยกวาเปนการ splay ทโหนด x หรอจะพดวาตนไมถก splay ทโหนด x คาวา splay นไมใชคาวา spray ทเราใชกนบอยๆ เชนฉดสเปรย คาวา splay แปลวา แผกาง ซงจะเหนไดจากการ splay ตนไมนนเหมอนการกางๆ หบๆ กงของตนไมทเรยงเปนแนวๆ
108 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
3
5
4 15
11
8
7
6
3 5
4 15
11
8
7
6
3 5
4 15
11
8
7
6
3
5
4
15
11
8
7
6
รปท 7–2 ตวอยางการปรบตนไมเมอไปคน 6
การคนการคนขอมลกเหมอนการคนตนไมคนแบบทวภาคตามปกต แตจะปดทายดวยการ splay โหนดทคนพบ ในกรณทคนไมพบ กมการปรบเหมอนกนโดย splay โหนดสดทายทผาน
การเพมการเพมขอมลกเชนเดยวกน กระทาเหมอนกบททากบตนไมคนแบบทวภาค เมอเพมเสรจกจะsplay โหนดใหมทเพงเพม รปท 7–3 แสดงตนไม splay ทสรางจากการเพมขอมล 1, 2, 3, และ 4 สงเกตวาหลงเพมกมการ splay เปนเชนนทกๆ ครง หลายคนเหนผลทไดจากการสรางกอาจรสกวาไมเหนมอะไรดเลย กยงคงไดตนไมเอยงขาง ประเดนทตองการชใหเหนคอวา สาหรบตนไม splay แลวตนไมทสงมาก จะแยกเฉพาะเมอเราไปสนใจใบทอยตาๆ แตเมอใดทใบเหลานถกแตะ ตนไมกจะปรบตว ขอมลใดทอยลกแตไมมใครสนใจ กไมเปนไรปลอยใหเขาอยลกๆ อยางนนไป แตพอมใครสนใจขอมลทลก (ทาใหเกดกรณเลว) กจะยายมาอยทราก กลายเปนด ไมเลวอกแลว (แตกอาจมโหนดอนทเลวลง) จากผลทไดในรปท 7–3 ใหนกเรยนลองไปแตะใบ 1 ด ตนไมกจะปรบจน 1 เปนรากใหม และไดรปรางใหม ใหลองทาด
1 1
2
2
1
2
1 3 2
1
32
1
34
2
1
34
รปท 7–3 ตนไม splay ทสรางจากการเพม 1,2,3, และ 4
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 109
การลบสาหรบการลบนนยงนดหนอย จะมการ splay อยสองครง เมอตองการลบ x กตองหา x ใหพบกอน เมอพบแลวให splay โหนด x เมอ x เปนรากแลวกลบ x ทงไดตนไมยอยสองตนสมมตใหเปน TL และ TR ไปหาตวมากสดของ TL จากนน splay โหนดทมคามากสดของ TL มาเปนราก แลวเอา TR ไปเปนลกทางขวาของรากใหมของ TL รปท 7–4 แสดงตวอยางการลบ 11 เราเรมการคน 11 พอพบก splay 11 เมอเปนรากแลวกลบทง ไปคนตวมากสดทตนไมยอยซาย ได คา 8 ก splay 8 แลวกนาตนไมยอยขวา ซงคอ 15 มาตอเปนลกขวาของ 8
5
15
11
8
7
6
5
6
8
7
15
11
5
6
8
7
15 8
7
6
5
15 8
7
6
5
15
splay ท 11 splay ท 8ลบ 11 ตอ 15 กบ 8รปท 7–4 ตวอยางการลบ 11 ออกจากตนไม splay
อานๆ มากคงยงเชอวาตนไม splay จะมดทใด เพราะถาเราตองการสรางกรณเลวสด เรากยงสามารถแกลง โดยการคนขอมลทเปนใบทลกสดไดเรอยๆ เสมอ ถงแมวาตนไมจะปรบและใบทลกสดจะเปลยนกตาม อยากจะลองสาธตใหดเพอใหเกดความรสกกอนวเคราะหจรงวา ตนไม splay นนเราแกลงมนไมคอยไดนาน มนกจะเขารปทรงไดสวยด สมมตวาเราเรมสรางตนไม splay ดวยการเพมขอมลทเรยงลาดบจาก 1 ถง 9 จะไดตนไม ในรปท 7–5 ซายสด จากนนคน 1 เกดการsplay ท 1 ตามดวยคน 3 เกดการ splay ท 3 ตามดวยการคน 9 เกดการ splay ท 9 ไดตนไมดงรปทางขวาสด ใหสงเกตการเปลยนแปลงของรปรางตนไม จากเดมแยมาก ถาเราแกลงไปแตะโหนดลางสด ขณะทตนไมสง กจะไดตนไมทเตยลงอยางฉบพลน แตพอตนไมเตยมากๆ แลวเกดการ splay แนนอนวาตนไมจะสงขน แตสงขนไมมาก ไดมการศกษาการเปลยนแปลงความลกของโหนดตางๆ พบวาโหนดสวนใหญทอยตามวถจากรากไปยงโหนดทถก splay จะมความลกลดลงประมาณครงหนง ในขณะทมบางโหนดในตนไมทลกมากขนอยางมากสองระดบ
110 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
9
8
7
6
5
4
3
2
1
1
8
96
74
52
3
13
64
58
7 92
9
31 8
2 6
4 7
5
รปท 7–5 ตวอยางการเปลยนแปลงรปรางของตนไม splay หลงการ splay
การวเคราะหกรณถวเฉลยคราวนเราจะมาวเคราะหกรณถวเฉลยกนอยางจรงจง โดยจะแสดงใหเหนวา ลาดบการดาเนนการใดๆ จานวน m ครงของตนไม splay จะใชเวลารวมทงสนเปน O( m log n ) กาหนดใหw(x) คอจานวนโหนดของตนไมยอยทม x เปนราก (รวม x ดวย) และ r(x) = lg w(x) ฟงกชนพลงงานศกยทเราจะใชเพอแสดงใหเวลาถวเฉลยเปน O(log n) ไดคอผลรวมของ r(x) สาหรบทกๆ โหนด x ในตนไม
��
��
TxxrT )()(
กาหนดให ri(x) และ wi(x) คอ คาของ r(x) และ w(x) ตามลาดบหลงการหมนครงท i ระหวางการ splay โหนด x เราจะมาคานวณกนกอนวา ตนทนถวเฉลยของการหมนแบบ zig, zig–zig , และ zig–zag เปนเทาไร กาหนดให p คอโหนดพอของ x และ g คอโหนดพอของ p (ถาม) และ i คอเลขครงทหมนระหวางการ splay
แบบ zig : แบบนเปนการหมนแบบ single rotation ใชตนทนจรงเทากบ 1 หนวย การหมนนจะทาให r(x) และ r(p) ของตนไมเทานนทเปลยนแปลง ดงนน ��i(T) = ( ri(x) – ri–1(x) ) + ( ri(p) – ri–1(p) ) ดงนนตนทนถวเฉลยของการหมนแบบ zig เปน
ci = ci + ��i
= 1 + ( ri(x) – ri–1(x) ) + ( ri(p) – ri–1(p) )< 1 + ( ri(x) – ri–1(x) )< 1 + 3( ri(x) – ri–1(x) )
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 111
บรรทดท 2 เปนบรรทดท 3 ไดมาจากการท ri(p) < ri–1(p) เพราะตนไมยอยทม p เปนรากมขนาดเลกลงหลงหมน และบรรทดท 3 เปลยนเปนบรรทดท 4 ไดกเพราะวา ri(v) > ri–1(v)
แบบ zig–zig : แบบนเปนการหมนแบบ double rotation ใชตนทนจรงเทากบ 2 หนวย การหมนนจะทาให r(x), r(p), และ r(g) ของตนไมเทานนทเปลยนแปลง ดงนน ดงนนตนทนถวเฉลยของการหมนแบบ zig–zig เปน
ci = ci + ��i
= 2 + ( ri(x) – ri–1(x) ) + ( ri(p) – ri–1(p) + ( ri(g) – ri–1(g) )= 2 + ri(g) + ri(p) – ri–1(p) – ri–1(x)< 2 + ri(g) + ri(x) – 2ri–1(x)< 3( ri(x) – ri–1(x) )
บรรทดท 2 เปลยนเปนบรรทดท 3 เพราะวา ri(x) = ri–1(g) บรรทดท3 เปลยนเปนบรรทดท 4 เพราะวา ri–1(p) > ri–1(x) และ ri(x) > ri(p) (ขอใหดรปท 7–1ประกอบ) สวนบรรทดท 4 เปลยนเปน 5 นนยงหนอย จากรปท 7–1 กรณ zig–zig จะได wi(g) + wi–1(x) < wi(x) ดงนน 2 lg wi(g) + lg wi–1(x) < 2lg wi(x) – 2 แสดงวา ri(g) + ri–1(x) < 2ri(x) –2 บวกอสมการนดวย 2 + ri(x) – 3ri–1(x) ตลอด ได 2 + ri(g) + ri(x) – 2ri–1(x) < 3ri(x) –3ri–1(x) เปนทมาของบรรทดสดทาย
แบบ zig–zag : แบบนเปนการหมนแบบ double rotation ใชตนทนจรงเทากบ 2 หนวย การหมนนจะทาให r(x), r(p), และ r(g) ของตนไมเทานนทเปลยนแปลง ดงนน ดงนนตนทนถวเฉลยของการหมนแบบ zig–zag เปน
ci = ci + ��i
= 2 + ( ri(x) – ri–1(x) ) + ( ri(p) – ri–1(p) + ( ri(g) – ri–1(g) )= 2 + ri(g) + ri(p) – 2ri–1(x)< 2( ri(x) – ri–1(x) )
< 3( ri(x) – ri–1(x) )
(ขอใหนกเรยนลองแจกแจงทมาของผลขางนเอง ใชวธคลายกบแบบ zig–zig)
2 ถา a+b < c จากอสมการของคาเฉลยเลขคณตและเรขาคณต ab � (a+b)/2 จะไดวา ab < c/2 ยกกาลงสองจะได ab < c2/4 หาคา lg จะได lg a + lg b < 2lg c – 2
112 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
สรปไดวาตนทนถวเฉลยของการหมนแบบ zig มคาไมเกน 3( ri(x) – ri–1(x) ) + 1 สวนของแบบ zig–zig และ zig–zag นนมคาไมเกน 3( ri(x) – ri–1(x) ) ถาการ splay หนงครงประกอบดวยการหมน k ครง ซงมการหมนแบบ zig ไดอยางมากแคหนงครงคอครงสดทาย (ครงท k ) ดงนนตนทนถวเฉลยของการ splay หนงครงใดๆ เทากบ
c < 3( r1(x) – r0(x) ) + 3( r2(x) – r1(x) ) + … + 3( rk–1(x) – rk–2(x) ) + 3( rk(x) – rk–1(x) ) + 1= 3( rk(x) – r0(x) ) + 1= 3 ( lg n – r0(x) ) + 1= O( log n )
บรรทดท 2 เปลยนเปน 3 เพราะวา การหมนครงท k เปนการหมนได x เปนรากของตนไม เนองจากตนไมทงม n โหนด จากนยามของ r(x) = lg w(x) จะไดวา rk(x) = lg w(ราก) = lg n
เนองจากการคน และการเพมในตนไม splay มการ splay หนงครง สวนการลบมการ splay สองครง ดงนนเวลาถวเฉลยของการดาเนนการทงสามจงเทากบเวลาถวเฉลยของการ splay ซงเทากบ O(log n) แสดงวาการดาเนนการ เปนจานวน m ครงยอมเสยเวลาเปน O( m log n )
ฮปทวนามเราไดเคยศกษาฮปทวภาค (binary heap) กนมาแลว พบวาเปนโครงสรางขอมลทรองรบ Priority queue ADT ทดตวหนง เพราะประหยดเนอท อกทงใชเวลาการทางานของการดาเนนการหลกๆ เปน O(log n) จะมกแตการรวมฮปทใชเวลาเปน O(n) คราวนเราจะมาศกษาฮปอกประเภทหนงชอวาฮปทวนาม (binomial heap) ซงมประสทธภาพการรวมฮปเปน O( log n ) โดยการดาเนนการอนๆ โดยสวนใหญจะอาศยการรวมฮปเปนหลกมประสทธภาพเปน O( log n) ดวย และทนาสนใจกคอการเพมขอมลจะใชเวลาถวเฉลยเปน O(1)
ตนไมทวนามกอนจะรจกฮปทวนาม ตองทาความเขาใจกบตนไมทวนาม (binomial tree) กนกอน ขอใหดตวอยางตนไมแบบนกนเลยในรปท 7–6 แตละตนมชอกากบ B0 , B1 , … ขนกบลกษณะของตนไม
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 113
B0 B1 B2 B3 B4
รปท 7–6 ตวอยางตนไมทวนามรปรางตางๆ
หลงจากสงเกตตนไมเหลานแลว พอจะสรปคณสมบตไดดงน� ตนไม Bk สง k� ตนไม Bk ม 2k โหนด� รากของตนไม Bk ม k ลก� ระดบท j ในตนไม Bk ม ��
�
����
�
jk โหนด (เปนทมาของชอตนไมทวนาม )
เราเรยก Bk วาเปนตนไมทวนามทมดกร (degree) เปน k เราสามารถสราง Bk ไดโดยการนารากของ Bk–1 ตนหนงมาเปนลกของรากของ Bk–1 อกตนหนง ดวยวธการสรางแบบนเราสามารถพสจนคณสมบต 4 ขอขางตนไดงายๆ (ขอละใหนกเรยนคดเอง)
คราวนกพรอมทจะนยามฮปทวนามแลว ฮปทวนามเปนโครงสรางขอมลทประกอบดวยรายการของตนไมทวนาม ทมคณสมบตสองขอดงน
� คยของโหนดพอในตนไมตองมคาไมมากกวาคยของลกๆ� ไมมตนไมขนาดเทากนในรายการ (คอมตนไม Bk สาหรบคา k ใดๆ ไดอยางมากตนเดยวในรายการ)
คณสมบตขอแรกกคลายกบฮปทวภาค เรยกวาขอมลถกจดอนดบแบบฮป (heap–ordered) ทาใหรากของตนไมเกบคยทนอยสดของตนไมตนนน สวนคณสมบตขอสองนนประกนวาฮปทวนามทมขอมล n ตว ประกอบดวยตนไมทวนามไมเกน 1 + �lg n� ตน ทาไมจงเปนเชนนน ขอใหดรปท 7–7 ซงแสดงฮปทวนามทมขอมล 11 ตว ประกอบดวยตนไม B0, B1 และ B3 (มขอมลรวมทงหมดเปน 20 + 21 + 23 = 11 ) เนองจากเราไมอนญาตใหม Bk ไดเกน 1 ตน สาหรบคา kใดๆ เปรยบเสมอนกบการเขยน 11 ฐานสบดวย 1011 ฐานสอง ซงตองใชสบต จากความรทวา
114 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
การแทนจานวนเตม n โดยท n > 0 ดวยเลขฐานสองนน ตองใช 1 + �lg n� บต 3 ดงนนถาเรา
เขยนจานวนฐานสองทแทน n ไดเปน (bk bk–1 …b1 b0)2 โดยท bi = 0 หรอ 1 และ ��
�
k
i
iibn
02
k = �lg n� จะไดวาฮปทวนามทมขอมล n ตวตองประกอบดวยตนไมทวนาม Bi เมอ bi = 1 สาหรบ i = 0, 1, … , k (และจะไมมตนไมทวนาม Bi เมอ bi= 0) ดงนนจงมจานวนตนไมทวนามไดมากสด 1 + �lg n� ตน
6 9
21
71
1
3
14
8
10 5
2
รปท 7–7 ตวอยางฮปทวนามทมขอมล 11 ตว
การหาคยทนอยสด (FindMin)จากคณสมบตทงสองขอขางตน สรปไดวาหากตองการหาคยทนอยสดในฮป กเพยงแตพจารณาเฉพาะรากของตนไมทวนามทงหลายของฮป เนองจากมตนไมทวนามมากสด 1 + �lg n� ตนดงนนการหาคยทนอยสดใชเวลาเปน O( log n ) แตถาเราเพมตวชรากตวนอยสดไวตลอด (ซงเพมภาระนดหนอยใหการดาเนนการอนๆ เลกนอยในการปรบเปลยนตวชรากนอยสดน) กจะทาใหการหาคยทนอยสด ใชเวลา �(1) เพราะวาไมตองเสยเวลาหาเลย ดทตวชรากนอยสดกไดคาตอบทนท
การเชอมตนไมทวนามขออธบายสนๆ ถงการดาเนนการพนฐานหนง ทเรยกวาการเชอมตนไม เราเชอมตนไมทวนามสองตนทมขนาดเทากนใหเปนตนทใหญขน โดยนารากของตนทมคาของคยมากกวาไปเชอมตอเปนลกใหมของรากของตนทมคาของคยนอยกวา รปท 7–8 แสดงตวอยางการเชอมตนไมทวนาม การเชอมตนไมกระทาไดโดยการเปลยนความสมพนธของพอ–ลกของรากทงสองซงใชเวลาคงตวเปน �(1)
3 ให 2k–1 � n < 2k ดงนน k–1 � lg n < k บวก 1 ตลอดได k � 1+lg n < 1+k สรปไดวา k = �1 + lg n� = 1
+ �lg n�
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 115
71
1
3
14
8
10 5
2
34
6
13
13
9
17 51
11
71
1
3
14
8
10 5
2
34
6
13
13
9
17 51
11
Link
รปท 7–8 ตวอยางการเชอมตนไมทวนาม
การแทนฮปทวนามในหนวยความจาหลายคนอาจสงสยมาหลายนาทแลววา แลวรายละเอยดการแทนฮปทวนามเปนอยางไร จากลกษณะของตนไมทวนามนนแตละโหนดนนมจานวนลกไมเทากน โดยโหนดทมจานวนลกมากสดจะมไดไมเกน lg n ลก (ลองพสจนด) แตดวยความทจานวนลกแปรตามจานวนขอมล ดงนนเราไมควรสรางโหนดแบบใชแถวลาดบเกบตาแหนงลกๆ เพราะมขอจากดของขนาดของแถวลาดบ (จองนอยไปอาจไมพอ จองมากไปกเปลอง)
6 9
21
1
3
5
2
21
02
13
05
19
021
06
ดกร
ขอมล
พอ
ลกซายสด
นองถดไป
รปท 7–9 ตวอยางการแทนฮปทวนามในหนวยความจา
วธการสรางวธหนงทสวยมากสาหรบฮปทวนามกคอ ใชวธการแทนแบบพคนโต–นองคนถดไป (left–child right–sibling) นนคอมตวชสองตวประจาแตละโหนด (ดรปท 7–9) ตวหนงชโหนดลกซายสด อกตวชโหนดนองถดไป (พดไดวาลกๆ นนเกบเปนรายการโยง) เนองจากฮปทวนามเปนรายการของตนไมทวนาม กนารากของตนไมทวนามทงหลายมาตอกนเปนพๆ นองๆ ซะเลย (โดยจะจดใหเรยงลาดบตามดกรของตนไม ดวยเหตผลทจะไดอธบายตอไป)
116 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
นอกจากนเรายงมตวชโหนดพอประจาแตละโหนด อกทงตองเกบจานวนลกของโหนดประจาโหนดอกดวย ขอมลพวกนมความจาเปนกบการดาเนนการทจะกลาวตอไป (ถงตรงนนาจะสบายใจไดวาทาไมการเชอมตนไมทอธบายในหวขอทแลวถงใชเวลา �(1) ได)
การผสานฮป (Merge)กอนจะไปอธบายการดาเนนการอนๆ จะขอนาเสนอวธการรวมฮปสองฮปใหเปนฮปเดยว เรยกวาการผสาน (merge) ฮป เพราะวาการดาเนนการอนๆ นนอาศยการผสานฮปเปนหลก ทเราใชคาวาผสานกเพราะวาฮปทวนามทประกอบดวยรายการของตนไมทวนามนน จะเปนรายการทเรยงลาดบตามดกรของตนไม ดงนนถาเปนฮปทมขอมล 11 ตว กจะเกบเปนรายการ <B0, B1, B3> การเกบเรยงลาดบเชนนจะทาใหการผสานฮปกระทาไดอยางมประสทธภาพ การผสานฮปสองฮปมหลกการทางานคลายๆ กบการบวกเลขฐานสอง 2 จานวนดวยวธการบวกแบบทด (carry–ripple adder) ททากนทวไป ขอยกตวอยางใหเหนกอนอธบายกรณทวไป สมมตวาเราตองการผสานฮป H1 กบ H2 ซงมขอมลจานวน 13 และ 5 ตวตามลาดบเขาดวยกน หลงจากผสานเสรจยอมไดเปนฮปใหม H ทมขอมล 18 ตว เลข 13, 5 และ 18 เขยนดวยฐานสองคอ (1101)2 , (0101)2 และ (10010)2 ตามลาดบ ดงนนฮป H1, H2 และ H ยอมประกอบดวยตนไมทวนาม (B3 , B2 , B0) , (B2 , B0) และ (B4 , B1) ตามลาดบ การผสาน H1 กบ H2 มลกษณะคลายการบวกเลข (1101)2 กบ (0101)2
ดงตารางท 7–1
การบวกเลขฐานสองแบบทดนน เรมบวกจากหลกนยสาคญนอยสดทางขวา แลวไลมาทางซายจนหมด โดยผลการบวกของหลกปจจบนอาจมตวทดไปบวกในหลกทางซายถดไปได การผสานฮปกดาเนนไปในทานองเดยวกน โดยผสานตนไมในรายการของทงสองฮปเรมตงแตตนทมขนาดเลกสดไปเรอยๆ จนถงตนทมขนาดใหญสด เมอใดทพบตนทมขนาดเทากนในทงสองฮป กจะเชอมตนไมทงสองไดตนไมทวนามทใหญขน ซงอาจถกเชอมกบตนไมขนาดเดยวกนในรายการของฮป หรอถกผลกไปเปนตนไมของฮปผลลพธ คลายกบเปนตวทดททดไปบวกในหลกถดไป รปท 7–10 แสดงตวอยางการผสานฮป
เนองจาก H1 และ H2 มจานวนตนไมทวนามอยางมากสด 1 + �lg n1� และ 1 + �lg n2� ตนตามลาดบ และการผสานฮปพจารณาตนไมทกๆ ตนในฮปไลจากตนเลกสด ไปถงตนใหญสด ตนละหนงครง แตละตนอาจถกเชอมกนกบตนทมขนาดเดยวกน หรอถกนาไปเปนตนไมของฮป
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 117
ผลลพธ ซงใชเวลาคงตวตอตน ดงนนการผสานฮป H1 และ H2 ซงมขอมลจานวน n1 และ n2 ตวตามลาดบเขาดวยกน โดยท n = n1+ n2 ยอมใชเวลาไมเกน
(1+ �lg n1� ) + (1+ �lg n2� ) = 2 + �lg n1� + �lg n2� < 2 + 2 �lg n� = O( log n )
ตารางท 7–1 ตวอยางการบวกเลขฐานสองและการผสานฮป 1 1 1 0 1 0 1 0 1 – – – 0
B0 ของ H1 เชอมกบ B0 ของ H2 ได B1
1 1 1 0 1 0 1 0 1 – – 1 0
เนองจาก H1 และ H2 ไมมตนแบบ B1 จงได B1 จากการเชอมในขนตอนทแลวเปนตนไมในฮปผลลพธ H
1 1 1 0 1 0 1 0 1 – 0 1 0
B2 ของ H1 เชอมกบ B2 ของ H2 ได B3
1 1 1 1 0 1 0 1 0 1 0 0 1 0
นา B3 ทไดจากการเชอมในขนตอนทแลว มาเชอมกบ B3 ของ H1 ได B4
1 1 1 1 0 1 0 1 0 11 0 0 1 0
เนองจากฮปทงสองไมมตนไมทใหญกวา B3 อกแลว B4 ทไดจากการเชอมในขนตอนทแลวจงเปนตนไมในฮปผลลพธ H
6
71
1
4
14
8
10 5
2
9
2219
21
16 3
2512
19
6
16
9
2219
21
3
2512
19 71
1
4
14
8
10 5
2
H1 H2
H
รปท 7–10 ตวอยางการผสานฮป
118 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
การเพม (Insert)การเพมขอมลหนงตวเขาไปในฮป H ทาไดงายๆ โดยการสรางฮปใหมทมขอมลตวใหมตวเดยว (ใชเวลาคงตว) จากนนนาฮปนผสานกบ H กจะไดฮปใหมทมขอมลใหมนนเพมใน H ดงนนการเพมใชเวลา O( log n ) ตามเวลาในการผสาน
ทวาการเพมใชเวลา O(log n) ตามเวลาในการผสานขอมลนน ถาเปนกรณเลวสดกเปน �(log n) ซงเปนกรณทฮปประกอบดวยตนไมทวนาม B0, B1, B2, …, Bk พอเพมขอมลอกตว กจะเกดการเชอมตนไม ไปเรอยๆ จนสดทายไดตนไมทวนาม Bk+1 แสดงวากรณเลวสดเกดขนเมอฮปมขอมล 1, 3, 7, 15, 31, 63, 127, … (ในรปแบบ 2m–1 ตว) เหนไดวานานๆ เกดครง และทวาการผสานฮปเปรยบไดกบการบวกเลขฐานสอง ดงนนการเพมขอมลในฮปจงเปรยบไดกบการเพมคาของเลขฐานสองไปอกหนง เราไดแสดงใหดมาแลววาการเพมคาของตวนบฐานสองไปอกหนงนนใชเวลากรณถวเฉลยเปน O(1) ดงนนสรปไดวาการเพมขอมลในฮปใชเวลากรณถวเฉลยเปน O(1) เชนกน
การลบคยทนอยสด (ExtractMin)กอนจะลบคยทนอยสดออกจากฮป H ได กตองหาคยทนอยสดกอน ซงจะตองอยรากใดรากหนงของตนไมในฮป จากนนกลบรากนนทง นาลกๆ ของรากทเพงถกลบนนมาสรางเปนฮปใหม (ทาไดงายๆ โดยการกลบลาดบรายการของลก ซงแตเดมเรมทลกซายสดคนโตไลไปจนถงลกคนเลกสด มาเปนรายการของตนไมเรยงตามลาดบจากตนเลกสดไปหาตนใหญสด ขอเนนวาเราเพยงแตกลบลาดบรายการ จะไดตามตองการ) จากนนนาฮป H ทถกตดตนไมทรากมคยทนอยสดมาผสานเขากบฮปใหมทสรางขนจากการกลบลาดบรายการของลกๆ ของรากทมคยทนอยสด กจะไดเปนฮปใหม รปท 7–11 แสดงตวอยางการลบคยทนอยสดออกจากฮป
การหาคยทนอยสดใชเวลา O( log n ) การกลบลาดบรายการของลกๆ ของคยทนอยสดใชเวลา O( log n ) เนองจากโหนดใดๆ ในฮปมจานวนลกไดอยางมาก lg n การผสานใชเวลา O( log n ) ดงนนการลบคยนอยสดใชเวลา O( log n )
การลดคาของคย (DecreaseKey)การลดคาของคยกทาแบบเดยวกบฮปทวภาค คอเมอลดคาของคยทโหนดทตองการแลว ขอมลในฮปอาจผดอนดบแบบฮป (คอพอมคาของคยมากกวาของลกซงผด) กแกไขความผดนไดโดย
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 119
การ “bubble up” ขอมลขนไป โดยการสลบขอมลระหวางโหนดพอกบลกทผดอนดบนขนไปเรอยๆ จนกวาจะไมผด หรอจนกวาจะถงรากของตนไม เนองจากตนไมทวนามทม n โหนดจะสง lg n ดงนนการลดคาของคยในฮปทม n ขอมลใชเวลา O( log n )
6
16
9
2219
21
3
2512
19 71
1
4
14
8
10 5
2
กอนลบ 1 ออก
6
16
71
14
8
10
4
5
2
9
2219
21
3
2512
19
2
6
16
71
14
8
10
4
5
9
2219
21
3
2512
19
หลงลบ 1 ออก
H1 H2
รปท 7–11 ตวอยางการลบคยทนอยสดออกจากฮป
การสรางฮป (BuildHeap)การสรางฮปกระทาไดงายๆ โดยเรมสรางฮปวาง จากนนคอยๆ เพมขอมลจนหมด เนองจากการเพมหนงครงใชเวลากรณถวเฉลย O(1) ดงนนการสรางฮปทมขนาด n จงใชเวลา O(n)
ฮปทวนามแบบขเกยจกลวธการออกแบบโครงสรางวธหนงทใชกนมากกคอ การผลกภาระการทางานระหวางการดาเนนการตางๆ เชนตอนจะเพมทาไดงายๆ แตพอจะลบกยงยากหนอย การทาเชนนตองระวง
120 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
ไมผลกภาระมากเกนไป คอตองพยายามใหเวลาการทางานกรณถวเฉลยของการดาเนนการทรบภาระหนกหนอย ยงคงอยในสภาพทยอมรบได
เราสามารถนากลวธนมาใชกบฮปทวนามได โดยการผสานฮปทาไดงายๆ เพยงนารายการของตนไมทวนามของฮปทงสองมาตอกนเทานนกเสรจ ทาอยางนแลวผสานฮปทงเรวทงงาย ซงแนนอนวาการเพมขอมลกทงเรวทงงายเชนกน นอกจากนกไมตองบงคบใหรายการของตนไมทวนามเรยงลาดบตามขนาดดวย เพราะวาเราผสานแบบตอดอๆ แตเหนไดชดวาการนารายการของตนไมสองรายการมาตอกน ทาใหอาจมตนไมทวนาม Bk สาหรบคา k หนงๆ อยในผลลพธไดมากกวาหนงตน ซงผดกฎของฮปทวนาม จงจะขอผลกภาระการ "สะสาง" นไปใหตอนทตองการลบคยทนอยสด เพอเชอมตนไมทมขนาดเทากนเขาดวยกนจนกวาจะไมม Bk ทม k ซากนในฮป ดวยกลวธนพบวาเวลากรณถวเฉลยของการลบคยทนอยสดยงคงเปน O( log n ) เราเรยกฮปแบบนวาฮปทวนามแบบขเกยจ (lazy binomial heap)
การแทนฮปทวนามแบบขเกยจในหนวยความจาดวยความขเกยจในการรกษากฎใหคงอยตลอดเวลา ดงนนจงมโอกาสทฮปขนาด n จะมตนไมทวนามจานวน �(n) ตน (เชนกรณทเราเพมขอมลจานวน n ตว เรมจากฮปวาง จะไดรายการของตนไมขนาดหนงโหนดจานวน n ตน) ดงนนการหาคยนอยสดจะมาใชการวงไลเปรยบเทยบรากของตนไมในรายการไมไดแนๆ เพราะตองใชเวลาเปน �(n) ในกรณเลวสด จงจาตองใชการจาตาแหนงของรากทมคยนอยสดไวตลอดเวลา (จะไดคนคาตอบไดในเวลา �(1)) แสดงวาตองเพมภาระเลกนอยในการปรบตวจาตาแหนงคยทนอยสด ในทกๆ การดาเนนการดวย
การลบโหนดออกจากรายการ (เมอตองการลบคยทนอยสดออก) และการตอรายการสองรายการ (เมอตองการผสานฮป) ตองทาไดรวดเรวในเวลาคงตว จงตองใหรายการของรากของตนไมทวนามทงหลาย (ซงมโครงสรางเดยวกบรายการของลกๆ ของโหนด) เปนรายการโยงค (doubly linked list) เพอใหการลบโหนดใดๆ ของรายการทาไดทนท และตองเปนรายการโยงแบบวงกลมดวย (circular list) เพราะจะทาใหการตอรายการสองรายการทาไดงาย (เนองจากแบบขเกยจน เราไมสนใจอนดบของตนไมวาตองเรยงจากขนาดเลกไปใหญเหมอนของฮปทวนาม) สรปวารายกายของราก และรายการของลกๆ ตองเปนรายการโยงแบบควงกลม รปท 7–12 แสดงโครงสรางของโหนดและตวอยางการแทนฮปทวนามแบบขเกยจในหนวยความจา
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 121
6 9
21
1
3
5
2
19
22
4 61
min
06
04
19
21
13
02
021
05
119
022
061
ดกร
ขอมล
พอ
ลกซายสด
พนองถดไป
พนองถดไป
รปท 7–12 ตวอยางการแทนฮปทวนามแบบขเกยจในหนวยความจา
การลบคยทนอยสดการลบคยทนอยสด ประกอบดวยขนตอนดงน1. หาคยทนอยสด2. ลบรากทเกบคยทนอยสดนนออก3. นารายการของลกๆ ของรากทเพงลบออก ตอเขากบรายการของตนไมของฮป4. รวบรวมตนไมตางๆ ในรายการโดยการเชอมตนไมทมดกรเทากนเขาดวยกน จนกวาจะไดรายการทไมมตนไมดกรเทากน
5. หารากทคยมคานอยสด เพอจาตาแหนงรากนไว
สามขนตอนแรกนนงายใชเวลาคงตวหมด จะยงยากหนอยกขนตอนท 4 (ขนตอนสดทายกไมยากใชเวลา O(log n) เพราะเมอผานขนตอนท 4 แลวจะเหลอตนไมจานวน O(log n) ตน) ขนตอนท 4 นอาศยแถวลาดบ A[0.. �lg n� ] ชวย ณ ขณะใดๆ A[i] จะเกบรากของตนไมทวนามในรายการทเปน Bi ทเคยพบ เรมตนเราใหทกๆ ชองของ A เปน null จากนนกเรมไลในรายการของตนไมทวนามไปทละตนๆ เชอมตนปจจบนกบตนไมดกรเดยวกนทพบกอนหนาน (ซงจาไวใน A) กระทาเชนนไปเรอยจนพจารณาครบทกๆ ตน จะไดรายการของตนไมทวนามททกๆ ตนมดกรไมเทากน ไดรหสเทยมของการรวบรวม (consolidate) ตนไมในรายการดงแสดงขางลางน
122 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
01: Consolidate( Heap H )02: {03: allocate A[0..lg n]04: for (i=0 to lg n ) A[i] = null05: for each node w in the root list of H {06: x = w07: d = x.degree08: while A[d] � null {09: y = A[d]10: x = Binomial_Link( x, y )11: A[d] = null12: d = d + 113: }14: A[d] = x15: }16: for (i=0 to lg n)17: if A[i] � null18: add A[i] to the root list of H19: }
6 9
21
1
3
5
2
19
22
4 61
min
6 9
21
3
5
2 19
22
4 61
6 9
21
3
5
2 19
22
4 61
22
6 9
21
3
5
2
19
4 61 6 9
21
3
5
2
19
22
4
61
6 9
21
3
5
2
19
22
4
61
9
21
2
61
6
43
519
22
9
21
2
61
6
43
519
22
6 9
21
3
5
2 19
22
4 61
0 1 2 3A
(ก) (ข) (ค)
(ง) (จ) (ฉ)
(ช) (ซ) (ฌ)
รปท 7–13 ตวอยางการลบคยทนอยสดของฮปทวนามแบบขเกยจ
รปท 7–13 แสดงตวอยางการลบคยทนอยสด (ก) คอฮปกอนลบ พบวา 1 คอคยทนอยสดกลบทงไป จากนนนารายการของลกๆ ของ 1 มาตอกบรายการของรากได (ข) แลวเรมขนตอนท 3 โดยการจองแถวลาดบ A[0..3] ทรวา 4 ชองกเพราะตอนนมขอมลอย 11 ตว ( 1 + �lg 11� = 4)
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 123
แลวเรมไลพจารณาทละตนไมในรายการ โดยเรมทราก 3 (เพราะวาเราเพงตอราก 3 กบ 2 เขาในรายการใหญ กนาจะจาตาแหนงของ 3 ไวไดงายๆ ) ราก 3 มดกรเปน 1 กเกบไวท A[1] (ค) ตอไป ราก 2 มดกร 0 กเกบไวท A[0] (ง) พอมาถงราก 19 มดกร 1 แต A[1] มอย กเชอมตนทเคยพบกบตนทเพงพบไดตนใหมมดกร 2 เกบใน A[2] (จ) ทานองเดยวกนพบ 61 ดกร 0 กเชอมกบราก 2 ทผานมาไดตนใหมดกร 1 เกบใน A[1] (ฉ) วนมาพบ 6 เกบไวท A[0] (ช) ถงตรงนจะยงหนอย พบ 4 ดกร 0 กเชอมกบ 6 ไดตนใหมดกร 1 กเชอมกบราก 2 ไดตนใหมดกร 2 กเชอมกบราก 3 ไดตนใหมดกร 3 จงพบวาไมมตนเกาทผานมาเปนดกร 3 กเกบใส A[3] (ซ) และสดทาย ราก 9 ดกร 1 กเกบใส A[1] (ฌ) เปนอนจบการสะสางความขเกยจทเคยกอไวในอดต ขนตอนสดทายกเพยงแตวงไลใน A เพอนาตนไมทงหลายเกบคนเปนรายการของตนไมทวนามของฮปหลงการลบ จบขนตอนท 3 แลวทาขนตอนท 4 ซงคอการวงหาตวทมคยทนอยสดเพอจาตาแหนงไว
แลวการลบคยทนอยสดนใชเวลาเทาไร ? กรณเลวสดกคอกรณทมจานวนตนไมเปน �(n) ทตองรวบรวม จงตองใชเวลา �(n) เรารสกไดวาเมอในอดตเคยขเกยจไวมากตอนเพมและผสานขอมล พอตอนลบคยทนอยสด กตองทางานมากหนอย ถานาความสบายทไดเคยรบมาถวเฉลยกบภาระทตองทาตอนรวบรวมตนไม กนาจะไมเลวอยางทเหนในกรณเลวสด
เราจะใชวธพลงงานศกยแสดงใหดวาเวลาถวเฉลยสาหรบการลบคยทนอยสดนนเปน O( log n ) กาหนดใหฟงกชนพลงงานศกยคอจานวนตนไมในรายการ (ฟงกชนนใชไดเพราะตอนเรมฮปไมมขอมล จานวนตนไมเปนศนย และจานวนตนไมไมเคยตดลบ) กาหนดให Ti คอจานวนตนไมหลงการดาเนนการท i ดงนน �i = Ti ถารากทมคยทนอยสดนนมดกรเปน k กแสดงวาม kลก ดงนนเมอลบรากนออก แลวนาลกๆ มาตอกบรายการเดมจะไดจานวนตนไมเปน Ti–1 –1 + kตนทนจรงประกอบดวยภาระในบรรทดท 3, 4 และ 16 ถง 18 (ของอลกอรทม Consolidate)ทตองพจารณาทกชองใน A (จานวน 1+�lg n� ชอง) และภาระในการพจารณาตนไมทกตนในรายการ ดงนนตนทนจรง ci = �lg n� + Ti–1 + k และเมอรวบรวมเสรจจะได Ti � 1 + �lg n� เกดการเปลยนพลงงานศกยเทากบ Ti – Ti–1 � 1 + �lg n� – Ti–1 ดงนนตนทนถวเฉลยคานวณไดดงน
ci = ci + ��i
� �lg n� + Ti–1 + k + 1 + �lg n� – Ti–1
= 2 �lg n� + k + 1
124 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
เนองจากตนไมตางๆ ในรายการเปนตนไมทวนาม ดงนนทกๆ โหนดมลกเปนจานวน O(log n) ดงนน k = O(log n) สรปไดวาตนทนถวเฉลยเปน O(log n)
ฮปฟโบนกชจากฮปทวนามแบบขเกยจทไดกลาวมานน การผสาน การเพม และการหาคยทนอยทสดใชเวลา O(1) ในขณะทการลบคยทนอยสดนนใชเวลากรณถวเฉลยเปน O( log n ) และการลดคาของคยนนยงเปน O( log n ) เหมอนฮปทวนาม (เนองจากใชการ bubble up คยเพอจดอนดบขอมลแบบฮปใหถกตองจงใชเวลาแปรตามความสงของตนไม) คราวนเราจะมาเพมการทางานบางอยางในฮปทวนามแบบขเกยจ เพอทาใหเวลาในการลดคาคยกรณถวเฉลยเปน O(1) โดยใชกลวธเดมกคอการผลกภาระการทางาน โดยการลดคาคยทาแบบอนทเรวกวาแบบ bubble up แตจะไปเพมภาระทการลบคยทนอยสดอก โดยการเพมภาระนยงคงทาใหเวลาการทางานกรณถวเฉลยเปน O(log n) อย เราเรยกฮปแบบใหมนวาฮปฟโบนกช (Fibonacci Heap)
จากฮปทวนามทมระเบยบมาก คอเปนรายการของตนไมทวนามทมดกรไมเหมอนกนเลย มาเปนฮปทวนามแบบขเกยจ ซงรายการของตนไมทวนามอาจมตนไมทมดกรเหมอนกนได สาหรบฮปฟโบนกชนนเปนรายการของตนไม ซงไมจาเปนตองเปนตนไมทวนาม และกเปนไมจาเปนวาตนไมทกตนตองมดกรไมเหมอนกน ฮปฟโบนกชจะเหมอนกบฮปทวนามแบบขเกยจทกประการถายงไมเคยลดคาคยเลย แตพอมการลดคาของคยทโหนดใด ตนไมทโหนดนนอยกจะเปลยนรปซงอาจไมใชตนไมทวนามอกตอไป อยางไรกตามคณสมบตขอหนงของตนไมทวนามทยงคงรกษาไวกคอโหนดตางๆ มจานวนลก (หรอเรยกวา degree หรอ rank ของโหนด) เปน O(log n) ดวยคณสมบตขอนทาใหเราสามารถรกษาเวลาถวเฉลยของการลบคยทนอยสดใหเปน O(log n) ได
การลดคาของคย (DecreaseKey)วธการลดคาคยทจะอธบายตอไปน จะมเวลาถวเฉลยเปน O(1) และรกษาคณสมบตของการททกๆ โหนดในฮปมจานวนลกเปน O(log n) การลดคาคยอาศยวธงายๆ คอเมอลดคาคยของโหนดนนแลว กจะตดตนไมยอยทโหนดนนเปนรากอยออกทงยวง แลวกไปตอเปนสวนหนง
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 125
ของรายการตนไมของฮป รปท 7–14 แสดงตวอยางการลดคาคย ในทนเราตองการลดคาของโหนดทชโดย x คาคยเดม 3 ใหเหลอ 1 กทางายๆ โดยการเปลยน 3 เปน 1 แลวตดตนไมยอยทม 1 เปนรากออก แลวยกมาผสานกบรายการของตนไมของฮป ซงกเพยงแตตอเฉยๆ (ในตวอยางนกตองเปลยนตวจาตาแหนงคยทนอยสดดวย เพราะตวมาใหมนอยกวาตวนอยสดตวเกา)
10 14
28
9
21
2
61
6
43
519
22
min
10 14
28
9
21
2
61
6
4
1
519
22
minx
DecreaseKey( H, x, 1 )
รปท 7–14 ตวอยางการลดคาคย
เหนชดๆ เลยวาวธตดดอๆ แบบนใชเวลาคงตว แตการตดแบบนจะไมสามารถรบประกนคณสมบตทเราตองการรกษา นนคอจานวนลกๆ ของโหนดในฮปตองเปน O(log n) เพราะเปนไปไดวาจากการตดทานองนเราอาจเหลอแตตนไมทรากมจานวนลกเปน O(n) (ลองยกตวอยางด) ดงนนตองตดอยางระมดระวงสกหนอย
วธตดทคงคณสมบตทตองการคอ "การตดซอนตด (cascading cut) ถาเสยลกครงทสอง" วธนจะมการจาวาโหนดใดเคยถกตดมาแลวหนงลกบาง ถาโหนดแบบนมลกถกตดอก (เปนลกคนทสองทถกตด) กจะตดโหนดนดวย พอโหนดใดถกยกขนไปอยเปนหนงในรายการของรากกจะลมเรองทลกเคยถกตด เพยงเทานจะรกษาคณสมบตเรองจานวนลกของโหนดตองเปน O(log n) ได และใชเวลาถวเฉลยสาหรบการลดคาเปน O(1) ดวย กอนลงรายละเอยดการวเคราะห เรามาดตวอยางในรปท 7–15 เรมทรป (ก) ตองการลดคาของคย 17 เปน 7 กตองเปลยนเปน 7 แลวตดตนไมยอยนไปผสานฮปไดดงรป (ข) ใหสงเกตวาเราแสดงโหนดทถกตดไปแลวหนงลก (ในทนคอ 13) ดวยสดา เรยกโหนดนวาถก marked ไว ถงตอนนขอลดคาของคย 16 เปน 11 กเชนกนเปลยน 16 เปน 11 ตดแลวผสานฮปไดดงรป (ค) เนองจากลกของ 12 โดนตดกจะ mark 12 ไว ถงตอนสาคญ เราตองการลดคาของคย 15 เปน 10 กเปลยนเปน 10 จากนนตดแลวผสานฮปตามขนตอนการตดแบบปกต ไดในรป (ง) แตเนองจาก 15 เปนลกของ 13 ซงถก marked ไว แสดงวาคราวนเสยลกครงทสอง จงตองตดซอนตด 13 แลวนาไปผสานฮป ไดดงรป (จ) เทานยงไมพอเนองจาก 13 เปนลกของ 12 ซงกถก marked ไวเชนกน กตองตดซอนตด 12 แลวนาไปผสานฮปตออก ไดดงรป (ฉ) การตดซอนตดกยตลง (ใหสงเกตวาความจรงเราควร mark โหนดทเกบ
126 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
คย 2 ในรป (ฉ) เนองจาก 12 ถกตดออก แตเราไมจาเปนตอง mark เพราะโหนดทเกบ 2 นเปนรากของตนไมอยแลว)
มสองประเดนทตองวเคราะห คอตองวเคราะหวาการลดคาของคยดวยวธตดซอนตดนใชเวลาถวเฉลยเปนคาคงตว และตองวเคราะหดวยวาวธการตดซอนตดนประกนไดวาโหนดใดๆ ในฮปมจานวนลกเปน O( log n )
2
61
6
43
519
22
min
12
16
60
1413
1517
33
2
61
6
43
519
22
min
12
16
60
1413
15
7
33
2
61
6
43
519
22
min
11
60
1413
15
7
3312
2
61
6
43
519
22
min
60
1413
1110 7
3312
2
61
6
43
519
22
min
60
14
1110 7
33
12 132
61
6
43
519
22
min
60
14
1110 7
3312
13
(ก) (ข)
(ค) (ง)
(ฉ)(จ)
รปท 7–15 ตวอยางการลดคาคยทมการตดซอนตด
จะขอใชวธพลงงานศกยในการวเคราะหตนทนถวเฉลยของการลดคาของคย กาหนดใหฟงกชนพลงงานศกย �i = Ti + 2mi โดยท Ti คอจานวนตนไมในรายการของตนไมของฮป และ mi คอจานวนโหนดในฮปทถก marked กาหนดใหการลดคาของคยเกดการตดซอนตดเปนจานวน qครง (ไมรวมการตดครงแรกเนองจากมาการลดคา) สรปความจรงตางๆ ไดดงน
� ตนทนจรงแปรตามจานวนการตดเทากบ 1 + q� การตดครงแรกสรางตนไมใหมอกหนงตน เปนการเพมพลงงานศกยขน 1
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 127
� การตดซอนตดหนงครงเพมตนไมหนงตนในรายการแตลดจานวนโหนดทถก marked ลงหนงดวย เปนการลดพลงงานศกยลง 1
� กรณทเพมพลงงานมากสดคอเมอการตดซอนตดครงสดทายไปทาใหเกดการ mark โหนดใหม (นนคอตดซอนตดไปเรอยๆ จนเปนการตดลกของโหนดทไมเคยถกตดลก และโหนดนนไมใชราก) จะเพมพลงงานศกยอก 2
สรปไดวา �� = 1 –q + 2 = 3 – q ดงนนตนทนถวเฉลยของการลดคาของคยci = ci + ��i
= 1 + q + 3 – q= 4
สรปไดวาใชเวลาถวเฉลยในการลดคาของคยเปน �(1)
การลบคยทนอยสด (ExtractMin)การลบคยทนอยสดใชวธการเดยวกบฮปทวนามแบบขเกยจ คอมการรวบรวม (consolidate) ตนไมโดยเชอมตนไมทมดกรเดยวกน จนไดรายการของตนไมทดกรไมเทากนเลย มขอสงเกตดงตอไปน
� กอนและหลงลบคยทนอยสดนไมมการ mark โหนดใดๆ เพมเตม จะมพเศษหนอยกเฉพาะกรณทโหนดทเกบคยทนอยสดนม mark ดงนน mi � mi–1
� กาหนดให D(n) คอดกรใหญสดของโหนดในฟโบนกชฮปทม n โหนด ดงนนโหนดทมคยทนอยสดยอมมจานวนลกไมเกน D(n)
� จานวนตนไมกอนลบเทากบ Ti–1 เมอลบรากทมคยทนอยสดออก กนาลกๆ ของรากนนมาตอรายการซงมอยางมาก D(n) ดงนนมจานวนตนไมไมเกน Ti–1 – 1 + D(n)
ตนทตองรวบรวม
� ตนทนจรงของการรวบรวมตนไมเทากบจานวนตนไมกอนรวบรวม (มไมเกน Ti–1 –1 + D(n) ตน) บวกกบภาระการสรางและพจารณาทกๆ ชองของแถวลาดบ A ซงมขนาด 1 + D(n) ดงนน ci � Ti–1 + 2D(n)
� หลงจากทรวบรวมตนไมเสรจแลว จะไดตนไมทกๆ ตนมดกรตางกน ตงแต 0 ถง D(n) ดงนน จงมจานวนตนไมไมเกน 1+D(n) ตน นนคอ Ti � 1+D(n)
128 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
� ใชฟงกชนพลงงานศกย �i= Ti + 2mi จะไดตนทนถวเฉลยของการลบคยทนอยสดci = ci + ��i
� Ti–1 + 2D(n) + (Ti + 2mi) – (Ti–1 + 2mi–1)� Ti–1 + 2D(n) + (1+D(n) + 2mi–1) – (Ti–1 + 2mi–1)= 3D(n) + 1= O( D(n) )
จะไดแสดงใหเหนจรงวา D(n) = O(log n) ดงตอไปน
กาหนดใหโหนด x มดกรเปน k นนคอม k ลก ให yi คอลกคนท i ของ x โดยท y1 คอลกคนโต (หมายความวา y1 ถกนามาเชอมกบ x กอนลกคนอนๆ ) และ yk คอลกคนสดทอง (หมายความวาเปนลกซงเพงถกเชอมกบ x ลาสด) แนนอนวาตอนท yi ถกเชอมกบ x นน x ตองม i–1 ลก กแสดงวา ขณะท yi ถกเชอมกบ x นน yi กมดกรเปน i–1 เชนกน (ตนไมสองตนถกเชอมเมอมดกรเทากน) หลงจากเชอมแลว yi อาจสญเสยลกไดหนงลก (เนองจากการตดลก) จะเสยเกนหนงลกไมไดเพราะถาเสยลกทสอง yi ตองโดยตดซอนตด สรปไดวาปจจบน yi ซงเปนลกท iของ x มดกรอยางนอย i–2 ทงนจะยกเวนกเฉพาะลกคนโตสดเทานน ทตองมดกรอยางนอย 0
กาหนดให Sk คอจานวนโหนดนอยสดของตนไมทรากมดกร k ในฮปฟโบนกช (S0 = 1, S1 = 2, S2 = 3 ลองคดดกนเอง) รากทมดกร k กหมายความวา k ลก จากดกรของลกๆ ทงหลายทสรปไดในยอหนาทแลว แสดงวา
��
����
k
iik SSS
2201
เลข 1 ตวแรกคอรากของตนไม สวนพจนอนคอจานวนโหนดของตนไมยอยทงหลายทเปนลกกอนจะหาผลเฉลยของความสมพนธเวยนเกดขางบนน ขอแสดงความสมพนธเวยนเกดของจานวนฟโบนกชทคนเคยกนใหดอกท
Fk+2 = Fk+1 + Fk
= Fk + Fk–1 + Fk
= Fk–1 + Fk–2 + Fk–1 + Fk
= F1 + F0 + F1 +…+ Fk–2 + Fk–1 + Fk
= ��
�
k
iiF
01
คราวนจะแสดงใหเหนวา Sk � Fk+2 โดยใชอปนยเชงคณตศาสตร
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 129
ขนตอนฐานหลก : S0 = 1 = F2 และ S1 = 2 = F3
ขนตอนอปนย :
2
0
2
22
220
1
2
2
1
�
�
�
�
�
�
�
�
��
��
��
���
�
�
�
�
k
k
ii
k
ii
k
ii
k
iik
F
F
F
S
SSS
ดงนน Sk � Fk+2 จากรปแบบปดของ Fk = 15 ��
��
�k - �k โดยท � = (1+ 5 )/2 ไดวา n � Sk � k
หรออกนยหนง k � �log� n� สรปไดวา D(n) ซงคอดกรใหญสดของโหนดในฟโบนกชฮปทม nโหนดมขนาดเปน O(log n)
ถงตรงนขอเปรยบเทยบประสทธภาพของการดาเนนการตางๆ ของฮปทง 4 ชนดทไดศกษากนมาดงตารางท 7–2ตารางท 7–2 เวลาการทางานของการดาเนนงานตางๆ ของฮป (ดอกจนเปนเวลาถวเฉลย)
BinaryHeap
BinomialHeap
Lazy BinomialHeap
FibonacciHeap
FindMin �(1) �(1) �(1) �(1)Insert O(log n) �(1) * �(1) �(1)ExtractMin O(log n) O(log n) O(log n) * O(log n) *DecreaseKey O(log n) O(log n) O(log n) �(1) *Merge O(n) O(log n) �(1) �(1)
เซตไมมสวนรวมลกษณะความตองการในการจดเ กบขอมลแบบหนง ซงใชมากสาหรบปญหาทมการทดสอบความสมมลกนของขอมล เชน "เปนโหนดทตอกนหรอไม" "เปนโหนดในตนไมเดยวกนหรอ
130 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
ไม" "เปนตวแปรทใชทเกบในหนวยความจาทเดยวกนหรอไม" เปนตน เราสามารถเปลยนคาถามเหลานมาเปนการทดสอบวา "เปนสมาชกในเซตเดยวกนหรอไม" ขอมลทถกทดสอบความสมมลเหลานสามารถนามาจดเกบไดในโครงสรางขอมลทเรยกวาเซตไมมสวนรวม (disjoint set) โดยทขอมลเปนจานวนเตมในชวง 1 ถง n ถกแบงเปนเซตหลายๆ เซต การดาเนนการกบเซตไมมสวนรวมนม 3 แบบคอ
� MakeSet(x) คอการสรางเซตใหมทม x เปนสมาชกเพยงตวเดยว� Union(s , t) คอการยเนยนเซต s กบเซต t� Find(x) คอการหาหมายเลขของเซตท x เปนสมาชกอย
วธการสรางเซตไมมสวนรวมทจะอธบายกนในหวขอน คอการแทนเซตหนงเซตดวยตนไมหนงตน สมาชกตางๆ ทอยในเซตเดยวกน กคอโหนดตางๆ ของตนไมตนเดยวกน ดงนนเซตทงหลายทไมมตวรวมจงเปนปาไม รปท 7–16 แสดงตวอยางปาไมทมตนไม 3 ตนแทนเซต 3 เซตคอ {1, 3, 5, 4, 9, 10} , {6}, และ {7, 2, 8, 11}
4
3 9 10
5
1
6 8
7 2
11
รปท 7–16 ตวอยางปาไมทแทนเซตไมมสวนรวม
เราใชหมายเลขสมาชกทรากของตนไมเปนตวแทนหมายเลขเซต ดงนนการถามวา x อยในเซตอะไร (Find(x)) สงทไดเปนคาตอบกคอหมายเลขสมาชกทรากของตนไมท x อย จากตวอยางในรปท 7–16 เซตทงสามมหมายเลขเซตคอ 4, 6, และ 8 ตามลาดบ
การ MakeSet(x) คอการสรางตนไมใหมมแตรากซงเกบ x ใชเวลา �(1)
การ Union( s , t ) คอการนารากของตนไมทแทนเซต s (หรอ t) ไปตอเปนลกของรากของตนไมทแทนอกเซต t (หรอ s) ใชเวลา �(1)
การ Find(x) เรมทโหนดทเกบ x แลววงขนไปยงโหนดพอเรอยๆ จนกวาจะพบราก ใชเวลาแปรตามความยาวของวถจาก x ถงรากของตนไม
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 131
ใหสงเกตวาเรามความตองการทจะพงเขาหาโหนดใดๆ ในตนไม และมความตองการทจะวงไปหาโหนดพอ (แตไมตองการลงมาทโหนดลก เหมอนกบตนไมทเคยพบมา) ดงนนสามารถสรางปาไมนไดดวยแถวลาดบ P มขนาดเทากบจานวนขอมล โดยทหนงชองแทนหนงโหนด P[x] เกบหมายเลขชองของ P ทแทนโหนดพอของ x ถา P[x] = x กแสดงวา x เปนราก รปท 7–17แสดงตวอยางการสรางปาไมในรปท 7–16 ดวยแถวลาดบ
1 2 3 4 5 6 7 8 9 10 11
P 5 8 4 4 3 6 8 8 4 4 2
รปท 7–17 แถวลาดบแทนปาไมในรปท 7–16
การยเนยนดวยความสงเรามสองทางเลอกในการตอตนไมเมอตองการ Union( s , t ) คอนาตนไมท s เปนรากไปตอเปนลกของ t (นนคอให P[s] = t ) หรอนาตนไมท t เปนรากไปตอเปนลกของ s (นนคอให P[t] = s ) ระหวางการทางานถาเราโชครายเลอกตอผดแบบ กมโอกาสทจะไดตนไมทสงเปน �(n) ได แตถาเราเลอกตออยางระมดระวงกจะสามารถรกษาไมใหตนไมแตละตนสงมากนกได วธหนงทชวยเราเลอกแลวไดผลดกคอการยเนยนดวยความสง (union–by–height) ซงคอการนาตนไมซงเตยกวาไปตอเปนลกของรากของตนไมทสงกวา (ถาสงเทากนกเลอกตอสกแบบ) union–by–height ประกนไดวาตนไมสงเปน O(log n) พสจนไดดงน
ให h(s) แทนความสงของตนไมยอยทม s เปนราก และ w(s) แทนจานวนโหนดของตนไมยอยทม s เปนราก (รวม s ดวย) พบวา w(s) � 2h(s) (จะพสจนใหด) เมอหาคา lg ทงสองขางจะสรปไดวา h(s) � lg w(s) ถา n เปนจานวนโหนดของตนไมแสดงวา h(s) � lg n = O(log n)
คราวนจะพสจนวา w(s) � 2h(s) โดยใชอปนยเชงคณตศาสตร กรณฐานหลก ตนไมเรมตนมหนงโหนด สง 0 นนคอ 1 � 20 ซงใชได มาดขนตอนอปนย สมมต Union( s, t ) ทาให t ถกตอเปนลกของ s ขอเขยน h' กบ w' แทน h และ w หลงการตอตนไม จะไดวา w'(s) = w(s) + w(t)
ถา h(s) > h(t) ความสงของ s จะไมเปลยน ( h'(s) = h(s) )w'(s) = w(s) + w(t)
� 2h(s) + 2h(t)
� 2h(s)
= 2h'(s)
132 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
ถา h(s) = h(t) จะไดวา h'(s) = h(s) + 1w'(s) = w(s) + w(t)
� 2h(s) + 2h(t)
= 2h(s) + 2h(s)
= 2h'(s)+1
= 2h'(s)
สรปไดวา w(s) � 2h(s)
ในเมอความสงของตนไมเปน O(log n) ดวยการ union–by–height ยอมแสดงวา Find(x) ซงใชเวลาในกรณเลวสดแปรตามความสงของตนไม จงใชเวลา O(log n)
รปท 7–18 แสดงตวอยางตนไมทไดเมอใช union–by–height จากลาดบการยเนยนดงน (เรมจากการม 8 เซตๆ ละหนงตว) Union(1,2), Union(3,4), Union(5,6), Union(7,8), Union(2,4), Union(6,8), Union(4,8) แสดงใหเหนกรณตนไมสงเทากบ lg n ซงเปนกรณสงสดเทาทเปนได
8
4 6 7
1
2 3 5
รปท 7–18 ตวอยางตนไมสงสดเมอใช Union–by–weight
ถาจะใช union–by–height กตองมการเกบความสงของตนไมไวดวย วธงายๆ กคอจองอกแถวลาดบ R ดงตวอยางในรปท 7–19
1 2 3 4 5 6 7 8 9 10 11
P 5 8 4 4 3 6 8 8 4 4 2
1 2 3 4 5 6 7 8 9 10 11
R 3 0 2
รปท 7–19 แถวลาดบแทนปาไมในรปท 7–16 ทรองรบการ union–by–height
การยเนยนดวยขนาดแทนทจะใชความสงของตนไมเปนตวตดสนวธการตอตนไมในการยเนยน เราสามารถใชขนาดของตนไมกได (union-by-size) โดยจะนารากของตนทเลกกวาไปตอเปนลกของรากของตนท
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 133
ใหญกวา เพยงเทานกสามารถพสจนไดอกเชนกนวา ความสงของตนไมไมเคยเกน lg n สงผลให Find(x) ใชเวลาเปน O(log n) (ขอละวธพสจนใหนกเรยนทาเอง)
การอดวถUnion–by–height หรอ union–by–size ประกนวาความสงของตนไมเปน O(log n) ในทางปฏบตนนสาหรบขอมลโดยทวไปแลวถอไดวาประสทธภาพการทางานนนดทเดยว นนคอการดาเนนการกบเซตจานวน m ครงใชเวลาเปน (m log n) แตถาเราตองการใหมประสทธภาพทดกวานอก กสามารถทาไดโดยการเพมกลวธการอดวถ (path compression) ท Find ซงทาใหตนไมเตยลงไปอก
การ Find(x) นนเราตองเรมทโหนดทเกบ x แลววงขนไปยงโหนดพอเชนนเรอยๆ จนกวาจะพบรากของตนไม สงท path compression ทากคอการยายทกๆ โหนดตามวถของการ Find(x) ใหไปเปนลกของรากของตนไม รปท 7–20 แสดงตวอยางการทา path compression
ab
cd
e e
dcba
Find( a )
รปท 7–20 Path compression ทเกดขนเมอมการ Find(a )
เหนไดชดเลยวา การ Find ทาใหตนไมเตยลง สงผลใหการ Find ครงหลงๆ เรวขน อกทง path compression กไมไดเพมภาระ (เชงเสนกากบ) แตอยางใดกบ Find
การยเนยนดวยลาดบชนเราสามารถใช path compression รวมกบ union–by–height หรอ union–by–size ได ซงใหผลทดมากๆ (ดจนเสมอนวาการ Find นนใชเวลาคงตว ซงจะแสดงใหดตอไป) แตถาคดดดๆ จะพบวาเมอทา path compression เสรจทงขนาดและความสงของตนไมอาจมการเปลยนแปลง สาหรบขนาดของตนไมนนเราปรบไดงายเมอทา path compression แตวาความสงนนจะปรบยงยาก วธแกไขปญหาการปรบความสงเมอตองการใช union–by–height กคอ ไมตองปรบ !!! นนคอถงแมตนไมจะเตยลงกไมตองไปปรบความสงทเกบไวใชเปรยบเทยบตอนยเนยน กลายเปน
134 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
วาเราเกบความสงของตนไมทสงสดเทาทผานมา (จงขอเปลยนชอเรยกวา rank) เรยกกลวธนวา การยเนยนดวยลาดบชน (union–by–rank) โดยท rank(x) เปนขอบเขตบนของความสงของตนไมทม x เปนราก เดยวเราจะแสดงใหเหนวาประสทธภาพการทางานเมอใช union–by–rank บวกกบ path compression กดเหมอนๆ กน
รหสเทยมของ MakeSet, Union และ Findขอสรปขนตอนการทางานของ MakeSet, Union (ทใช union–by–rank) และ Find (ทม path compression) ดวยรหสเทยมขางลางน
01: MakeSet( x )02: {03: P[x] = x04: R[x] = 005: }
01: Union( s, t )02: {03: if (R[s] > R[t])04: P[t] = s05: else {06: P[s] = t07: if (R[s] == R[t]) ++R[t]08: }09: }
01: Find( x )02: {03: if (P[x] � x)04: P[x] = Find( P[x] )05: return P[x]06: }
การวเคราะหในหวขอนเราจะแสดงใหเหนวาการใชกลวธทง union–by–rank และ path compression จะสงผลใหการดาเนนการกบเซตไมมสวนรวมทมขอมล n ตว เปนจานวน m ครง (m > n) ใชเวลาเปน O(m lg*n )
เราเรยก lg*n วา iterative logarithm function ซงนยามไดดงน
lg*n = min{i �0 | lg(i)n � 1} โดยท lg(i)n = lg(lg(lg(…(n)…)))
i ครง
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 135
ตวอยางเชน 52lg*,42lg*,32lg*,22lg*,12lg*222222 2222����� เปนตน ฟงกชน
lg* นโตชามากๆ เหนไดเลยวาในทางปฏบต จานวนขอมลทเราจะตองจดเกบในเซตไมมสวนรวมตางๆ คงไมเกนขนาดของหนวยความจา สมมตใหเทากบ 240 (= 210 giga = 1 tera) จะไดวา lg*240 = 5 สรปไดวาการดาเนนการตางๆ ของเซตไมมสวนรวมทใชทง union–by–rank และ path compression ใชเวลาถวเฉลยเกอบคงตวทเดยว
การวเคราะหออกจะยดยาวสกหนอย ขอใหตดตามดๆ เราอาศยการแบงโหนดตางๆ ออกเปนกลมๆ ตาม rank ของโหนด อาศยฟงกชน G(r) เพอคานวณหมายเลขกลมของโหนดทม rank เปน r และมอกฟงกชน F(g) ทระบ rank ทใหญสดในกลม g ดงนนกลม g ประกอบดวยโหนดทม rank ในชวงตงแต F(g–1)+1 ถง F(g)
ตารางท 7–3 แสดงตวอยางการจดกลมโหนดตาม rank สองวธ ถากาหนดให F(g) = g2 กแสดงวา G(r) = � r � แตถากาหนดให F(g) = 2F(g–1) สาหรบ g > 0, F(0) = 0 จะได G(r) = 1+ lg*r (เราจะจดกลมอยางไรกได กใหผลของการวเคราะหเปนขอบเขตบนของคาตอบทงสน แตเดยวชวงทายของการวเคราะหจะพบการจดกลมทไดขอบเขตบนทตา)
ตารางท 7–3 การจดกลมโหนดตาม rank
rank ของโหนดทอยในกลมกลมท(g) เมอ F(g) = g2 เมอ F(g) = 2F(g–1), F(0) = 00 0 01 1 12 2 ถง 4 23 5 ถง 9 3 ถง 44 10 ถง 16 5 ถง 165 17 ถง 25 17 ถง 655366 26 ถง 36 65537 ถง 265536
การวเคราะหจะอาศยขอสงเกตดงตอไปน
ขอสงเกตท 1 เมอใดทโหนด x มพอทอยคนละกลมกบ x โหนด x กจะมพอทอยคนละกลมไปตลอดกาล (ถงแมจะเปลยนพอใหม) ขอสงเกตนสรปไดมาจากการท rank ของโหนด x ใดๆ ตอนเรมตนเปนศนย จากนนจะเพมขนทละหนงหลง union ตราบ
136 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
เทาท x ไดเปนรากใหม (คอยงไมมพอ) แตเมอใดท x มพอเปนครงแรก (เพราะการ union) rank(x) จะคงตวหลงจากนนตลอดไป (เพราะ rank ของ x เปลยนไดเมอ x เปนราก และถก union อยางเดยว) และเนองจากวธ union–by–rank (ซงหลงการ union จะไดโหนด rank สงเปนพอของโหนด rank ตา) กบวธ path compression (ซงไมเปลยน rank) บอกเราวา rank(x) < rank(y) เมอ y เปนพอของ x ดงนนถา x เปลยนพอ (เพราะ path compression) กยอมไดพอใหมทม rank สงกวาเกา และถาพอปจจบนอยคนละกลม พอในอนาคต (ซงตองม rank สงกวา) กตองอยคนละกลมอกเชนกน
ขอสงเกตท 2 โหนดทม rank เปน r ตองมไมเกน �n/2r� โหนด ถาให T(r) คอเซตของตนไมยอยตางๆ ทรากม rank เปน r แตละตนใน T(r) ตองมไมนอยกวา 2r โหนด (นนคอ w(x) � 2rank(x) สามารถพสจนไดในทานองเดยวกบ w(x) � 2h(x) เพราะวา h(x) � rank(x)) ลกๆ หลานๆ ของรากของตนไมเหลาน กตองม rank นอยกวา r(จากความจรงของขอสงเกตทแลว) และตนไมแตละตนใน T(r) กไมมโหนดซากน (จากคณสมบตของตนไมทวไป) ถาปาๆ หนงม n โหนด กยอมมโหนดทม rank เปน r เปนจานวนไมเกน �n/2r� โหนด
สงทเราสนใจกคอการทางานของ Find (สาหรบ Union และ MakeSet เหนไดชดเจนวาใชตนทนเปน �(1)) ภาระการทางานของ Find ยอมแปรตามความยาวของวถจากโหนดทหาไปยงราก การนบภาระตรงนจะยงยากเพราะความยาวของวถจะหดสนลงจากการทา path compression กอนอนขอแบงโหนดในปาไมออกเปนสองประเภทดงน
1. โหนดทม rank มากสดในกลม กบโหนดทเปนลกของราก2. โหนดอนๆ ทไมใชโหนดประเภทท 1
จะขอใชวธการรวมกลมในการวเคราะหกรณถวเฉลย โดยนบตนทนการทางานดวยการเทยบเคยงกบการเกบคาธรรมเนยมผานโหนด (ในการ Find) ซงคดการผานโหนดๆ ละ 1 บาท เมอมการดาเนนการไปเปนจานวน m ครง คาธรรมเนยมผานโหนดทงหมดทเรยกเกบไดกจะเปนตวแทนเวลารวมในการดาเนนการ m ครงนน
เรามาเรมพจารณาคาธรรมเนยมผานโหนดประเภทท 1 (M1(n)) กนกอน เนองจากมอยางมาก 1+ G(rmax) กลม (โดยท rmax คอ rank ทใหญทสดในปา) ดงนนการ Find หนงครงตองผานโหนด
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 137
ประเภทท 1 ซงประกอบดวยโหนดทม rank มากสดในแตละกลม (กลมละตว) บวกกบโหนดทเปนลกของราก จงเสยคาธรรมเนยมรวมทงสนอยางมาก G(rmax) + 2 บาท สรปวาการดาเนนการ m ครงเสยคาธรรมเนยมผานโหนดประเภทท 1
M1(n) � m( G(rmax) + 2 )
วธหาคาธรรมเนยมผานโหนดประเภทท 2 (M2(n)) จะยงหนอย กอนอนขอคานวณจานวนโหนดในกลมกอน ซงหาไดจากผลบวกของจานวนโหนดทม rank ทอยในกลมนน เนองจากกลม g ประกอบดวย rank ตงแต F(g–1)+1 ถง F(g) ดงนนจานวนโหนดของกลม g มคาไมเกน
)1(0
1)1(
)(
1)1( 22
1
22 �
�
�
��
���
�� �� gFr
rgF
gF
gFrr
nnn
ใหสงเกตวาเมอ Find ผานโหนดใด path compression จะทาใหโหนดนน (ในกรณทไมเปนลกของราก) เปลยนพอใหมทม rank สงกวา rank ของพอเกา ถาคดแบบเปลยนชาๆ กใหไดพอใหมท rank สงขน 1 ดงนนถาโหนด x เปนโหนดท rank ตาสดในกลม g กรณชาสดกวา x จะไดพอใหมทอยนอกกลม g ตองเปลยนพอ F(g) – F(g–1) – 1 ครง ดงนนคาธรรมเนยมผานโหนดประเภทท 2 กคอการรวมเงนทไดของทกๆ กลม แตละกลมคดจากจานวนโหนดในกลมคณดวยจานวนเงนทแตละโหนดในกลมจะได กวาทมนจะมพอนอกกลม (แลวกลายเปนโหนดประเภทท 1) ดงน
� �
�
�
�
�
�
�
�
�
�
�
�
����
)(
1)1(
)(
1)1(
)(
1)1(2
max
max
max
2
)(
2)(
21)1()()(
rG
ggF
rG
ggF
rG
ggF
gFn
ngF
ngFgFnM
สรปวาเมอมการดาเนนการไป m ครง เสยคาธรรมเนยมผานโหนดรวมทงสน
��
�
����
)(
1)1(max21
max
2
)()2)(()()(rG
ggFgFnrGmnMnM
ซงมคาขนกบวธการจดกลมโหนดตาม rank นนคอขนกบฟงกชน G(r) และ F(g) ดจากพจนในผลบวก F(g) / 2F(g–1) กเหนไดวาถากาหนดให F(g) = 2F(g–1) จะจดการผลบวกตรงนไดงายมากๆ
138 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
จาก F(g) = 2F(g–1) จะได G(r) = 1 + lg*r (ซงเปนวธการจดกลมตาม rank ทปรากฏในสดมภขวาของตารางท 7–3) เนองจาก rmax = �lg n� (เพราะวา w(x) � 2rank(x) และ n � w(x) ดงนน n � 2rank(x) นนคอ rank(x) � �lg n� ) ดงนน G(rmax) = 1 + (lg*(lg n)) = lg*n จะไดคาธรรมเนยมผานโหนดรวมเปนเงนทงสน (เมอ m � n)
m(lg*n + 2) + nlg*n = O( (m+n) lg*n ) = O( m lg*n )
วาไปแลว M1(n) = O(m lg*n) กเปนตนทนทตองใชทกครงทมการ Find ซงแปรตาม m เสมอนกบวาตอครงเสย O( lg*n ) ในขณะท M2(n) = O(n lg*n) เปนตนทนในการ Find ครงแรกๆ ซงพอนานๆ ไปกใชนอยลงๆ เพราะ path compression หรอจะมองในแงมมบญชกได โดยเปรยบเสมอนวาตนทนถวเฉลย Union ใช 1 บาท (เพราะเปนแคการตอตนไม) Find ใช 2+lg*n บาทสาหรบคาธรรมเนยมผานโหนดประเภทท 1 และMakeSet ใช 1+lg*n บาท โดยทบาทแรกใชเปนตนทนจรงตอนสรางเซตทมสมาชกตวเดยวครงแรก และอก lg*n มไวจายคาธรรมเนยมผานโหนดประเภททสองในอนาคต
แบบฝกหด1. จงแสดงใหเหนวาถาเราคนขอมลในตนไม splay เรยงลาดบตามขอมลคานอยไปยงคามาก จะทาใหตนไมนปรบตวเองจนมลกษณะยาวเปนลกโซเอยงทางซายอยางเดยว (นนคอเปนตนไมทแตละโหนดมแตลกซาย ยกเวนโหนดลางสด) และตนทนรวมในการคนนจะเปน O(n)
2. จงอธบายทมาของแตละบรรทดในการวเคราะหตนทนถวเฉลยการหมนระหวางการ splay แบบ zig–zag ทไดนาเสนอในหนาท 111
3. นกเรยนคนหนงแนะนาวาเพอลดเวลาการทางานในทางปฏบต เราควร splay กบการดาเนนการแบบครงเวนครง อยากทราบวาดวยวธนตนทนถวเฉลยยงเหมอนเดมหรอไม
4. ถากาหนดใหพลงงานศกยของฮปทวนามมคาเทากบจานวนตนไมบวกกบ rank ของตนไมทใหญสดของฮป จงแสดงใหเหนจรงวาการผสานฮปทวนามสองฮปเขาดวยกนใชเวลาถวเฉลยเปน O(1)
Draft 1.0 : 30/10/00 5:09 : [email protected] บทท 7 โครงสรางขอมล (แบบยง) 139
5. กาหนดใหเรามฮปทวนามขนาด n = 2k – 1 โหนด จากนนเกดการ Insert ตามดวย ExtractMin ทาสลบกนไปเชนนเปนจานวน m คก) จงอธบายวาทาไม Insert ตามดวย ExtractMin ททาเปนจานวน m คนน ใชเวลาการทางานของแตละ operation เปน O(log n)
ข) ในเมอขอ ก) เปนจรง แสดงวา m operations เสยเวลา O(m log n) นนคอตนทนถวเฉลยของแตละการดาเนนการตองเปน O(log n) แลวทาไมถงไมขดกบความรทวาตนทนถวเฉลยของ Insert เปน O(1)
6. ในเรองของฮปทวนามนน เราจดเกบรายการของตนไมทวนามเรยงจากรากทมดกรนอยไปหามาก แตเราจดเกบรายการของลกของรากของตนไมในทางกลบกน ดงนนการ ExtractMin จงตองมการกลบลาดบรายการของลกของรากทมคยตวนอยสด กอนทจะนาไปผสานฮป ถาเราจดเกบรายการของลกนใหเรยงลาดบตามดกรของโหนดจากนอยไปหามาก กไมตองเสยเวลากลบลาดบ จงอธบายวาทาไมไมทาเชนนน มขอดขอเสยอยางไร หรอวาไมมขอแตกตาง
7. โหนดในฮปฟโบนกชจะมความลกทสดไดเทาใด อธบายดวยวาจะทาใหเกดกรณเชนนไดอยางไร ยกตวอยางประกอบดวย
8. มนกเรยนคนหนงแนะนาวาเรานาจะเพมการ Consolidate ใหทาหลงการ Merge ฮปฟโบนกชดวย จะไดลดภาระของ DecreaseKey ลง จงวจารณคาแนะนาดงกลาว
9. จงวเคราะหตนทนถวเฉลยของแตละการดาเนนการในฮปฟโบนกช โดยใชวธทางบญช
10. ในเรองของฮปฟโบนกช ถาเราเปลยนแนวคดการตดซอนตด (cascading cut) จากเดมทเกดขนเมอโหนดสญเสยลกทสอง ไปเปนเมอโหนดสญเสยลกท k อยากทราบวา k มคาอะไรไดบางทประกนไดวาดกรของโหนดตางๆ เปน O(log n) (ฮปฟโบนกชนน k = 2)
11. จงออกแบบการสรางเซตไมมสวนรวมตางๆ ดวยรายการโยง (linked list) อธบายการดาเนนการตางๆ และวเคราะหเวลาการทางานดวย
12. กาหนดให A คอลาดบของคาสง MakeSet, Union และ Find ทงหมดจานวน m คาสง ทคาสง Union ทงหมดเกดขนกอนคาสง Find จงแสดงใหเหนจรงวาเวลาทงหมดของ Aเปน O(m) เมอเราใช union by rank และ path compression และถาเราใช path compression อยางเดยว (union ดวยวธใดกไดทใชเวลาคงตว) จะยงคงมเวลารวมเปน O(m)
140 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:09 : [email protected]
13. จงพสจนถาเราใช union-by-size เพยงอยางเดยว (ไมม path compression) ตนไมตางๆ ในปาของเซตไมมสวนรวมตางๆ จะสงไดไมเกน O(log n)
14. เราใชแถวลาดบ P และ R ในการสรางเซตไมมสวนรวมตางๆ (ตามทแสดงไวในรปท 7–19หนาท 132) จงเสนอวธทใชเพยงแถวลาดบเดยวในการแทน และเขยนรหสเทยมของ MakeSet, Union และ Find สาหรบวธการแทนใหมนดวย
15. ถาเราตองการเพมการดาเนนการ Remove(x) เพอลบสมาชก x ออกจากเซตท x อยเดม เพอ MakeSet(x) ใหใหม จงออกแบบการทางานของ Remove(x) เพอใหตนทนรวมของการดาเนนการของ Union Find และ Remove จานวน m ครงเปน O( m lg* n)
Draft 1.0 : 25/10/00 23:20 : [email protected] 141
บทท 8
จะขอเรมนาเสนอกลวธการออกแบบอลกอรทมทเรยกวาการแบงแยกและเอาชนะ (divide and conquer) เปนกลวธแรก การแบงแยกและเอาชนะนนเปนกลวธในการจดการกบปญหาทใชกนมานานในหลายๆ วงการ ซงกสามารถนามาใชไดดทเดยวกบการออกแบบอลกอรทม เพอแกไขปญหาเชงคานวณ แนวคดของกลวธนกคอแทนทเราจะไปหาคาตอบของปญหาใหญปญหาหนงทเดยวเลย กอาจจะไมสะดวกนก สเราแบงปญหาใหญนนออกเปนปญหายอยๆ หลายๆปญหาทมขนาดเลกกวา หาคาตอบของแตละปญหายอย แลวนาคาตอบยอยๆ ทไดนมารวมกนเพอกลายเปนคาตอบของปญหาใหญ อาจจะซบซอนนอยกวา และใชเวลาโดยรวมทดกวากได อลกอรทมแบบแบงแยกและเอาชนะมโครงของการทางานแสดงไดดวยรหสเทยมดงน
01: SolveDQ( P )02: {03: if ( P is trivial ) return Solve(P)04: divide P into P1 , P2 , …, Pk05: for (i=1 to k)06: Si = SolveDQ( Pi )07: S = combine( S1 , S2 , …, Sk )08: return S09: }
ถงแมวาชอจะบอกวาเปนการแบงแยกและเอาชนะ แตตวอลกอรทม (หรอจากรหสเทยมขางบนน) จะประกอบดวยสามขนตอนหลกคอการแบงปญหา การหาคาตอบของปญหายอย และการรวมคาตอบยอย บางอลกอรทมแบงปญหางายแตรวมคาตอบยง ในขณะทบางอลกอรทมแบงปญหายงแตรวมคาตอบงาย บางอลกอรทมอาจแบงปญหาเหลอแคหนงปญหายอยเลยไมตองรวมคาตอบยอยเลยดวยซาไป
ขอใหสงเกตวาเราสามารถเขยนโปรแกรมททางานแบบการแบงแยกและเอาชนะ ไดอยางเปนธรรมชาตมากๆ เมอเขยนแบบเวยนเกด (recursive) เพราะขนตอนการแกปญหายอยนนกจะ
การแบงแยกและเอาชนะ
142 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
เรยกใชกระบวนวธเดม เมอถงกรณทปญหามขนาดเลกพอกไมจาเปนตองแบงตอ (ดงทเขยนในบรรทดท 3 ของรหสเทยมขางตน)
สาหรบการวเคราะหเวลาการทางานของอลกอรทมกจะเปนธรรมชาตอกเชนกน เมอบรรยายเวลาการทางานดวยความสมพนธเวยนเกด
t(n) = at(n/b) + f(n)
ซงเปนการแบงปญหาใหญเปนปญหายอยจานวน a ปญหา แตละปญหายอยมขนาดเลกลง bเทา และภาระการแบงปญหา และรวมคาตอบยอยนน (ทไมเกยวกบการเรยกเวยนเกด) ใชเวลาเปน f(n) ซงโดยทวไปสามารถใช master's method หาผลเฉลยไดอยางฉบพลน
นอกจากนถาเราตองการพสจนวาอลกอรทมทออกแบบนนทางานไดถกตองจรง กสามารถพสจนไดดวยอปนยเชงคณตศาสตร จงเหนไดวากลวธการแกไขปญหาแบบแบงแยกและเอาชนะน เขยนโปรแกรม วเคราะห และพสจนความถกตองไดไมยาก
ในบทนจะขอนาเสนอปญหา และอลกอรทมแบบแบงแยกและเอาชนะทแกไชปญหานนๆ พรอมทงการวเคราะหเวลาการทางานของอลกอรทม ปญหาเหลานไดแก การคน (search) การเรยงลาดบ (sorting) การเลอก (selection) การยกกาลงมอดลาร, การคณเมทรกซ การหาคจดใกลกนทสดบนระนาบ 2 มต และปญหาดารายอดนยม
การคนแบบทวภาคการคนขอมลในแถวลาดบทเรยงลาดบแลวนน กระทาไดรวดเรวมาก โดยคนแบบทวภาค (binary search) ซงอาศยความสามารถในการขจดขอมลในแถวลาดบทไมใชขอมลทตองการออกจากการพจารณาไดทละครง หลงจากมการพจารณาขอมลตวทอยตาแหนงตรงกลางของชวงทกาลงคน binary search สามารถลดขนาดของปญหาทตองหาคาตอบจากเดมไปครงหนง สมมตวาเราตองการคนวาขอมลในเลขดชนใดของแถวลาดบ A ตงแตเลขดชนท left ถง right ทมคาเทากบ x กเพยงแตเปรยบเทยบกบตวตรงกลางของชวง ถาเทากบ x กคอพบ x แลว ถานอยกวา x กแสดงวา x ควรอยทางครงขวาของชวง กไปคนตอในชวง left+1 ถง right ถามากกวา x กแสดงวา x ควรอยทางครงซายของชวง กไปคนตอในชวง left ถง right–1 เนองจาก
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 143
จานวนขอมลทตองพจารณาลดลงทละครง ดงนนเราสรปไดวาไมพบขอมลทมคาเทากบ x กเมอไมมขอมลเหลอใหเปรยบเทยบ เขยนเปนรหสเทยมไดดงน
01: BinarySearch( A[left..rght], x )02: {03: if ( left > rght ) return –1;04: m = (left + rght) / 2;05: if ( x == A[m] ) return m;06: if ( x < A[m] )07: return BinarySearch( A[left..m–1],x);08: else09: return BinarySearch( A[m+1..rght],x);10: }
กาหนดใหแถวลาดบ A มขอมล n ตว ในกรณเลวสด binary search ใชเวลาการทางานเปนt(n) = t(n/2) + �(1) = �(log n)
เราสามารถใชหลกการคนแบบทวภาคนไปประยกตกบการแกไขป ญหาเชงตวเลขได เชนการหาราก สมมตวาเราตองการคาของ x ซงเปนรากทสองของ n ( x = n ) กเพยงแตคนคา x ในชวงตงแต 0 ถง n ททาให n–� � x2 � n+� โดยท � เปนคาความคลาดเคลอน ตวอยางเชนอยากทราบคาของ 40 โดยท � = 0.1 หาไดดงตารางท 8–1 ได x = 6.31836 ใหสงเกตการเปลยนชวงการคนวาครงตอไปจะเปนครงซายหรอครงขวาของชวงนนกขนกบวา x2 มคามากกวาหรอนอยกวา n วธนในศาสตรการวเคราะหเชงตวเลข (numerical analysis) นนเรยกวาการแบงครง (bisection) แนนอนวามวธการหารากทสองทเรวกวานแน แตนเปนเพยงการแสดงใหเหนถงการประยกตการคนทวภาคกบปญหาทเราแทบไมไดใชความรทางทฤษฎเชงตวเลขใดๆ เลย
ตารางท 8–1 การหาคา 40 ดวยการคนแบบทวภาค (ท � = 0.1)
ชวงทคนa b
x = (a+b)/2 x2–n
0 40 20 3600 20 10 600 10 5 –155 10 7.5 16.255 7.5 6.25 –0.9375
6.25 7.5 6.875 7.2656256.25 6.875 6.5625 3.0664066.25 6.5625 6.40625 1.0400396.25 6.40625 6.328125 0.0451666.25 6.328125 6.289063 –0.44769
6.289063 6.328125 6.308594 –0.201646.308594 6.328125 6.31836 –0.07833
144 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
การเรยงลาดบแบบผสานการเรยงลาดบแบบผสาน (merge sort) นนใชกลวธการแบงแยกและเอาชนะทตรงไปตรงมาทสด (ดรปท 8–1) เราแบงครงแถวลาดบของขอมลทจะนามาเรยงลาดบออกเปนสองสวน คอสวนครงซายและครงขวา (จานวนขอมลพอๆ กน) จากนนไปเรยงลาดบชดขอมลครงซาย (ดวย merge sort) ไปเรยงลาดบชดขอมลครงขวา (ดวย merge sort) เมอทงสองครงเรยงลาดบเสรจ จงนารายการของขอมลทเรยงลาดบแลวทงสองชดมาผสาน (merge) กน ไดขอมลทเรยงลาดบทงชด เหนไดชดเลยวาการแบงปญหากระทาไดงายโดยการแบงครงขอมลเปนสองชด การแกปญหายอยกเพยงแตเรยกใช merge sort สวนการรวมคาตอบยอยกคอการผสานรายการทเรยงลาดบทงสองรายการ (ซงใชเวลาในการผสานรายการเปน �(n)) เราสามารถบรรยายเวลาการทางานของ merge sort ไดดวยความสมพนธเวยนเกด
t(n) = 2t(n/2) + �(n)ดวย master's method จะได t(n) = �( n log n )
Merge
MergesortMergesort
�(n)
2t(n/2)
t(n) = 2t(n/2) + �(n)
รปท 8–1 การเรยงลาดบแบบผสาน
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 145
การเรยงลาดบแบบเรวการเรยงลาดบแบบเรว (quick sort) เปนตวอยางการทางานแบบแบงแยกและเอาชนะทคอนขางซบซอน เนองจากโดยปกตเรามกเหนการแบงปญหาในกลวธนเปนแบบแบงครง หรอไมกแบงเปนหลายชด ทมขนาดพอๆ กน แตสาหรบ quick sort นปญหายอยมขนาดไมแนนอน จงทาใหการวเคราะหจะยงยากสกนดหนง
quick sort แบงขอมลออกเปนสองชด ชดซายกบชดขวา (ดรปท 8–2) โดยแบงใหขอมลทกๆ ตวในชดซายมคาไมมากกวาขอมลในชดขวา จากนนนาขอมลทงสองชดไปเรยงลาดบ (ดวย quick sort) เมอทงชดซายและชดขวาเรยงลาดบแลว จะไดขอมลทงชดเรยงลาดบทนท ไมตองทาอะไรเลย ทงนเพราะจากการแบงทไดขอมลทกๆ ตวในชดซายมคาไมมากกวาขอมลในชดขวานนเอง
Partition
QuickSort QuickSort
รปท 8–2 การเรยงลาดบแบบเรว
สงทตองทาความเขาใจสาหรบ quick sort กคอขนตอนการแบงสวน (partitioning) การแบงสวนอาศยการนาขอมลตวหนงในรายการเรยกวาตวหลก (pivot) มาเปนเกณฑในการแบงสวน โดยจะแบงใหขอมลชดซายมคาไมมากกวาตวหลก และขอมลในชดขวามคาไมนอยกวาตวหลก (กจะไดวาขอมลชดซายทกตวมคาไมมากกวาขอมลในชดขวา) ดงนนผลของการแบงสวนจงขนกบการเลอกขอมลในรายการทมาเปนตวหลก อกสกครเราคอยมาสนใจวาจะเลอกตวหลกอยางไร ตอนนจะขออธบายขนตอนการแบงสวนเมอรตวหลกแลวดวยรหสเทยมดงน
146 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
01: Partition( A, p, r )02: {03: c = A[p]04: i = p–1; j = r+105: while ( i < j ) {06: while ( A[––j] < c ) { }07: while ( A[++i] > c ) { }08: if (i < j) swap(A[i], A[j])09: }10: return j11: }
ฟงกชน Partition แบงขอมลในแถวลาดบ A ตงแตชองท p ถงชองท r โดยใช A[p] เปนตวหลกในการแบงสวนเกบไวในตวแปร c (บรรทดท 3) โดยจะคนผลเปนหมายเลขชองสดทายของชดซายหลงการแบงสวน เรามตวแปร i และ j ทคอยชตาแหนงของขอมลทางซายและทางขวาทกาลงพจารณาวาควรอยในชดซายหรอชดขวา โดยคาของ i และ j ตอนเรมตนนนใหชเลยขอบซายและขวาของ A ไปหนงตาแหนง จากนนเขาสวงวนแบบ while เพอกวาดหาและสลบขอมล โดยสภาพของลกษณะขอมลใน A ภายในวงวนแบบ while ทบรรทด 5 แสดงในรปท 8–3 การกวาดหาประกอบดวยวงวนยอยแบบ while อกสองวง จดประสงคของสองวงวนภายในนกคอ j กวาดหาขอมลทไมนอยกวาตวหลกจากขวามาซาย (บรรทดท 6) ในขณะท iกวาดหาขอมลทไมมากกวาตวหลกจากซายมาขวา (บรรทดท 7) เมอพบขอมลดงกลาว (บรรทดท 8) กสลบขอมลทงสอง ซง i และ j ชอย (บรรทดท 8) แลวกลบเขาสการกวาดหาและสลบตอไปจนกวาตวแปร i และ j จะชตาแหนงเดยวกนหรอสวนกน
Ai jp r
� c � c
รปท 8–3 ลกษณะของขอมลใน A ระหวางการแบง
รปท 8–4 แสดงลกษณะการกวาดหาและสลบขอมล (ขอใหดจากซายไปขวาและบนลงลาง) ทางดานซายเปนสภาพทไดทบรรทด 6 ในขณะททางดานขวาเปนสภาพทบรรทด 8 กอนสลบ
i j
4 2 5 9 4 3 7 0 8 6
i j
0 2 5 9 4 3 7 4 8 6i j
0 2 5 9 4 3 7 4 8 6
i j
0 2 3 9 4 5 7 4 8 6i j
0 2 3 9 4 5 7 4 8 6
i j
0 2 3 4 9 5 7 4 8 6ij
0 2 3 4 9 5 7 4 8 6
i j
4 2 5 9 4 3 7 0 8 6
รปท 8–4 การกวาดหาและสลบขอมลในการแบงสวน
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 147
ใหสงเกตจากตวอยางทแสดงในรปท 8–4 หลงจากทแบงเสรจแลว j จะชตาแหนงสดทายของขอมลชดซาย และขอมลทเทากบตวหลกอาจจะอยทชดซายหรอชดขวากได เนองจากผลการแบงสวนนนจะไดขอมลทกตวในชดซายมคาไมมากกวาขอมลในชดขวา (จะเทากไดแตกมเพยงกรณเดยวคอเทากบตวหลก)
คราวนเรากมาดรหสเทยมของ quick sort กนครบๆ เลยขางลางน เมอตองการเรยงลาดบขอมลทงแถวลาดบ กเรยกใช QuickSort( A, 1, n )
01: QuickSort( A, p, r )02: {03: if ( p < r ) {04: j = Partition( A, p, r )05: QuickSort( A, p, j )06: QuickSort( A, j+1, r )07: }08: }
กถงเวลาทตองมาวเคราะหเวลาการทางาน ตองขอวเคราะหเวลาการทางานของ partitionกอน พจารณาการเปลยนแปลงของคา (j–i) ภายในวงวนแบบ while (วงนอก) พบวามคาเรมทเทากบ n+1 (กาหนดใหขอมลในแถวลาดบทจะมาแบงม n ตว) (j–i) มคาลดลงทละหนง (ไมวาจะมาจาก ––j ทบรรทด 6 หรอ ++i ทบรรทด 7) จนในทสดหลดจากวงวนเมอ (j–i)� 0 ดงนนการ Partiton ใชเวลา �(n)
กาหนดให t(n) คอเวลาการทางานของ quick sort เพอเรยงลาดบขอมล n ตว จะไดวาt(n) = t(k) + t(n–k) + �(n)
กรณเลวสด เกดขนเมอ k = 1 (หรอ = n–1) (และจะตองเปนแบบนในทกๆ ระดบของการเรยกเวยนเกด) จะได tworst(n) = t(1) + tworst(n–1) + �(n) ใชวธคลความสมพนธเวยนเกดจะได tworst(n) = �(n2)
กรณดสด เกดขนเมอ k = n/2 (และจะตองเปนแบบนในทกๆ ระดบของการเรยกเวยนเกด) จะได tbest(n) = 2 tbest(n/2) + �(n) ใช master's method จะได tbest(n) = �(n log n)
กรณเฉลย จากสองกรณขางตนเหนไดวา เวลาการทางานนนขนกบผลของการแบงสวนวาจะได k มคาเทาไร สาหรบกรณเฉลยนน เราถอวาผลของการแบงสวนทมหลายๆ แบบนน แตละแบบมโอกาสเกดขนเทาๆ กน (และเปนเชนนในทกๆ ระดบของการเรยกเวยนเกด) เมอขอมลไมมตวซากน Partition จะแบงไดชดซายมจานวนขอมล k ตว กเมอ A[p] เปนขอมลอนดบท k+1 สาหรบ 1 � k � n–1
148 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
สาหรบกรณท A[p] เปนขอมลทนอยสด จะได k=1 (ขอใหนกเรยนลองทาด) สรปวาเมอมขอมล n ตว Partition นนแบงขอมลได n แบบคอ k = 1, 1, 2, 3, 4, 5 ,…, n–1 ดงนนเวลาการทางานของ QuickSortโดยเฉลยจะเทากบ
)()(2
)())1()1((1)(1)(1
)()()()1()1(1)(
1
1
1
1
1
1
1
1
nktn
nnttn
kntn
ktn
nkntktnttn
nt
n
k
n
k
n
k
n
k
���
��������
����
�
�
��
������
�
��
�
�
�
�
�
�
�
�
�
บรรทดท 2 ไดมาจากการคณ 1/n เขาในวงเลบ ใหสงเกตกรณพเศษ 1n(t(1)+t(n–1)) ถา t(n) หลงวเคราะหแลวพบวาเลวเทากบกรณเลวสด คอเปน �(n2) กรณพเศษน 1n(t(1)+t(n–1)) = 1n�(n2) = �(n) ดงนนจงสามารถตดกรณพเศษนออกไปได เพราะยงไงกมพจน �(n) อยแลวทางขวาสด จงเปนทมาของบรรทดท 3 สวนผลบวกตวทสองนนความจรงกเหมอนกบตวแรก เพยงแตเขยนคนละแบบ จงรวมกนไดเปนบรรทดท 3
เราสามารถหาผลเฉลยของความสมพนธเวยนเกดน ไดดงน
cnktn
ntn
k�� �
�
�
1
1)(2)( เขยนใหมโดยการแทน �(n) ดวย cn
21
1)(2)( cnktnnt
n
k�� �
�
�
คณ n ตลอด
22
1)1()(2)()1( ���� �
�
�
ncktntnn
k
เปลยน n เปน n–1
nt(n) = (n+1)t(n–1) + c'n นาสองความสมพนธขางตนมาลบกนt(n)n+1 =
t(n–1)n +
c'(n+1)
= t(1)2 +c'�
���1
3 +14 +…+
1n+1
หาร n(n+1) ตลอด จากนนคลความสมพนธเวยนเกด ผลบวกทปรากฎในวงเลบคลายจานวนฮารมอนก Hn+1
t(n) < c'(n+1)Hn+1 = O(n log n) จากความร Hn = O(log n)
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 149
กรณเฉลยของ quicksort ทไดวเคราะหมานบอกเราวา เมอนาขอมลขาเขาทเปนไปไดมาเฉลยๆ กนแลวโดยทโอกาสทแตละแบบจะเกดขนเหมอนกน quicksort จะทางานในเวลาคาดหวงเปน O(n log n) ปญหามนอยตรงทวาถาเรายงโชครายเจอขอมลขาเขาททาใหเกดกรณเลวสด quicksort กทางานไมตางอะไรกบ bubble sort หรอ insertion sort ทงนเพราะวาขนตอนการแบงสวนขอมลทไดนาเสนอมานน เลอกตวหลกทเปนรปแบบแนนอน (อยาลมวา Partitionเลอก A[p] ซงเปนตวซายสดในแถวลาดบเปนตวหลก) จงมบางลกษณะของขอมลขาเขาททาใหเกดกรณเลวสดได
วธหนงในการแกปญหานกคอหลกเลยงการเลอกตวหลกทเปนรปแบบตายตว โดยเลอกตวหลกแบบสมจากชดขอมลเพอทาการแบงสวน (เรยกขนตอนนวา RandomizedPartition) ทาใหไดอลกอรทมการเรยงลาดบ RandomizedQuickSort แสดงไดดวยรหสเทยมดงน
01: RandomizedQuickSort( A, p, r )02: {03: if ( p < r ) {04: j = RandomizedPartition( A, p, r )05: RandomizedQuickSort( A, p, j )06: RandomizedQuickSort( A, j+1, r )07: }08: }09:10: RandomizedPartition( A, p, r )11: {12: i = Random( p, r )13: Swap( A[i], A[p] )14: Partition( A, p, r )15: }
การแบงสวนเชงสมขางบนนอาศยฟงกชน Partition ทอธบายกอนหนาน เพยงแตสมเลอกตาแหนงของขอมลในชวงมาหนงตาแหนง (บรรทดท 12) แลวสลบกบตวซายสดในชด (บรรทดท 13) แลวคอยไปแบงสวนตามปกตดวย Partition
ดงนนผลของการแบงสวนกจะไดชดซายซงมขนาดแบบสมเชนกน หมายความวาไมวาลกษณะขอมลขาเขาจะเปนเชนใด RandomizedQuickSort ใชเวลาเปน O(n log n) ดวยความนาจะเปนทสงมาก แนนอนวาเราจะยงมโอกาสทจะโชคราย ททกๆ ครงทสมเลอกตวหลก แลวโชครายไปสมเอาตวทเกดกรณเลวสด ถามขอมล n ตว กมโอกาส 3/n ทจะพบตวหลกเลวสดตอนสมเลอกครงแรก (ทเปน 3 เพราะ Partition ทไดนาเสนอมานน ถาตวหลกคอตวนอยสด และนอยสดอนดบสองจะแบงไดชดซายมหนงตว ถาตวหลกคอตวมากสดจะไดชดขวาหนงตว สามกรณนเลวสดๆ) การแบงครงทสองกมโอกาส 3/(n–1) ครงทสามกมโอกาส 3/(n–2) เปน
150 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
เชนนไปเรอยๆ จนครงสดทายมโอกาส 2/2 ดงนนกรณเลวสดของ RandomizedPartitionจะเกดขนดวยความนาจะเปน
3n �
3n–1 �
3n–2 �…�
33 �
22 <
3n–1
n!
ถา n = 40 จะไดวา 339/40! < 5�10–30 !!! และปกตเราคงไมใช quick sort สาหรบเรยงลาดบขอมล 40 ตวหรอก (มนนอยไปไมสมศกดศร !) ถาเปนกรณ n = 1000 แลวแทบไมตองกลวเลยวาจะโชครายเลย
ปญหาการเลอกปญหาการเลอก (selection) คอการเลอกขอมลตวทเลกทสดเปนอนดบท m ในแถวลาดบ A[1..n] วธงายๆ กคอนาแถวลาดบไปเรยงใหเรยบรอยจากนอยไปมาก จากนนกเลอกหยบตวนอยทสดอนดบท m ไดตามสะดวก (ซงกคอ A[m] นนเอง) เหนชดวาวธนใชเวลาตามเวลาการเรยงลาดบ ซงดสดกคอ O( n log n )
วธการเรยงลาดบนนรสกวา จะทางานมากไป เพราะเราแคตองการตวทเลกทสดอนดบ m แตสงทเราไดคอนอยทสดอนดบ 1 อนดบ 2 ,… .จนถงมากสด มาลองใชฮปกนดกวา โดยนาขอมลทงหมดมาสรางฮป (แบบทรองรบการหาคานอยไดรวดเรวทเรยกวา min–heap) จากนนกเพยงแต ExtractMin เปนจานวน m ครง ครงท m กยอมไดตวนอยสดอนดบท m ไมวาจะใชฮปใดทไดศกษามา การสรางฮปขนาด n กตองใช O(n) ExtractMin เปนจานวน m ครง ก O(m log n) ดงนนเสยเวลารวมเปน O(n + mlog n) เนองจาก m = O(n) ดงนนวธนในเชงเสนกากบกเหมอนกบการเรยงลาดบนนเอง
ในหวขอนเราจะนาเสนออกวธหนงในการหาขอมลตวนอยสดอนดบท m ในแถวลาดบ เรยกวา QuickSelect ซงมหลกการทางานคลายๆ กบ quick sort (ดรปท 8–5) QuickSelectแบงขอมลออกเปนสองชด ชดซายและชดขวาโดยใชอลกอรทม RandomizedPartition(เราคงไมใช Partition เฉยๆ เพราะกเหนมาแลวใน quick sort วาไมคอยด) จากนนตรวจสอบวาถาชดซายมขอมล k ตว ซงมคามากกวาหรอเทากบ m กแสดงวาขอมลทตองการตองอยทางชดซาย จงดาเนนการ QuickSelect ตวนอยสดอนดบท m ตอในชดซาย (รปท 8–5 (ก))
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 151
ถาชดซายมจานวนขอมล k < m กยอมแสดงวาขอมลตวทตองการตองอยทชดขวา จงไป QuickSelect ตอเพอหาขอมลตวนอยสดอนดบท m–k ตอในชดขวา (รปท 8–5 (ข))
Partition
QuickSelect
m
m
k ตว
Partitionk ตว
QuickSelect
m-k
m
(ก) เมอ m � k (ข) เมอ m > kรปท 8–5 การทางานของ QuickSelect
อลกอรทม QuickSelect เขยนไดเปนรหสเทยมดงน01: QuickSelect( A, p, r, m )02: {03: if ( p == r ) return A[p]04: j = RandomizedPartition( A, p, r )05: k = j–p+106: if ( m � k )07: return QuickSelect( A, m, p, j )08: else09: return QuickSelect( A, m–k, j+1, r )10: }
กาหนดให t(n) คอเวลาการทางานของ QuickSelect กบขอมล n ตว จะไดวา
t(n) � t( max( k, n–k ) ) + �(n)
t( max( k, n–k) ) กคอเวลาการทางานของบรรทดท 6 ถง 9 ซงกคอการเรยกใช QuickSelectอกครง เนองจากเปนคาสง if กเลยเลอกตวมากกวา (ไดเปนขอบเขตบน)
กรณเลวสดเกดขนไดเมอทกๆ ครงทมการแบงสวน จะแบงไดชดใดชดหนงมขนาดเปน 1 ตลอด จะไดเวลาการทางานเปน t(n) = t(n–1) + �(n) = �(n2) ซงแยมากๆ (แยกวาวธเรยงลาดบ
152 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
แลวหยบเสยอก) แตอยางไรกตามคงไมลมวาดวย RandomizedPartition โอกาสทจะเกดเหตการณเลวรายมากๆ แบบน มนอยมากๆๆๆๆ (ตามทไดแสดงใหดกอนหนาน)
สาหรบคาคาดหวงของเวลาการทางาน QuickSelect นนสามารถวเคราะหไดดงน
� �
� �
)()(2
)()(21)1(1
)()),(max())1,1(max(1)(
1
2/
1
2/
1
1
nktn
nktn
ntn
nknktntn
nt
n
nk
n
nk
n
k
���
�����
�
�
���
�
��
����
�
�
��
�
��
�
�
�
�
�
�
�
�
�
บรรทดแรกมาจากผลของการแบงสวนโดย RandomizedPartition มได n กรณ โดยมกรณทชดซายม 1 ตวเกดขนได 2 กรณ จงเขยนแยกเปนกรณพเศษดวย t(max(1,n–1)) บรรทดท 2 ไดโดยการคณ 1/n เขาในวงเลบ สงเกตไดวา max(k, n–k) = n–k เมอ 1 � k < �n/2� และ max(k, n–k) = k เมอ �n/2� � k � n–1 ดงนนผลบวกในบรรทดท 1 กคอ
t(n–1) + t(n–2) + … + t(n– �n/2�–1) + t(�n/2�) + t(�n/2�+1)+…+ t(n–2) + t(n–1)
ซงมคาไมเกน 2 (t(�n/2�) + t(�n/2�+1)+…+ t(n–2) + t(n–1) ) ไดเปนผลบวกในบรรทดท 2 จากนนเราตดพจน t(n–1)/n ทงได เพราะผลของพจนนกรณเลวสดกถกกลนดวย �(n) อยด
จะขอแกความสมพนธเวยนเกดนดวยวธเดาและพสจน โดยคาดวา t(n) � cn สาหรบคาคงตว cคาหนงททาใหกรณฐานหลกใชได จากนนพสจนโดยใชอปนยเชงคณตศาสตรไดดงน
� �
)(2)(1
2/nck
nnt
n
nk��� �
�
�
� �
)(212/
1
1
1nkk
nc
n
k
n
k��
���
�
�
���
�
� ��
�
�
�
�
= 2cn ��
��1
2 (n–1)n – 12 (�n/2�–1) �n/2� + �(n)
� 2cn ��
��1
2 (n–1)n – 12 ��
��n
2 –1 n2 + �(n)
= c��
��3n–2
4 + �(n)
ถาแทนพจน �(n) ดวย dn จะได c�� ��3n–2
4 + dn � cn กเมอ c � 4d
(1+2/n) แสดงวามคา c ททาให t(n) � cn = O(n)
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 153
มธยฐานของมธยฐานของหาอยางไรกตามเราสามารถเปลยนวธการเลอกตวหลก (ทแตเดมใชการเลอกแบบสม) ทประกนไดวาจะไดเวลาการทางานของ QuickSelect แมในกรณเลวสดเปน O(n) วธการเลอกตวหลกทวานมชอวามธยฐานของมธยฐานของหา (median–of–median–of–five – mm5) มขนตอนดงน
1. แบงชดขอมล (อยางไรกได) ออกเปน �n/5� ชดๆ ละ 5 ตว (อาจมไดหนงชดทมไมถง 5 ตว)
2. หาขอมลทเปนมธยฐานของแตละชด จะได median ทงสนเปน �n/5� ตว
3. หามธยฐานของขอมลทไดในขนตอนทแลว เรยกขอมลตวนวา mm5 ซงนาไปใชเปนตวหลกในการแบงสวน
มาดตวอยาง สมมตชดขอมล (จานวน 23 ตว) ทเราจะหา mm5 คอ
1, 11, 2, 33, 4, 23, 12, 34, 16, 71, 30, 15, 18, 20, 39, 25, 29, 19, 9, 8, 4, 7, 99
เรมดวยการแบงขอมลทงหมดเปนชดยอยๆ ชดละ 5 ตว ดงน
(1, 11, 2, 33, 4), (23, 12, 34, 16, 71), (30, 15, 18, 20, 39), (25, 29, 19, 9, 8), (4, 7, 99)
หามธยฐานของแตละชดยอย ได (4, 23, 20, 19, 7) แลวหามธยฐานอกทได 19 เปน mm5
ถาจะขอเขยนขอมล 5 ตวในแตละชดวางเรยงเปนสดมภ (ดรปท 8–6) โดยเขยนเรยงจากคานอยลงมามาก ดงนนมธยฐานของแตละชดกตองอยแถวทสาม และจดเรยงแตละสดมภใหมธยฐานของแตละสดมภเรยงจากนอยไปมาก ดงนน mm5 กคอมธยฐานของขอมลในแถวทสาม (ซงคอ 19 นนเอง)
1 8 15 12
2 4 9 18 16
4 7 19 20 23
11 99 25 30 34
33 29 39 71
รปท 8–6 การแสดงความสมพนธของ mm5 กบขอมลทเหลอ
ดวยการเขยนแผนภาพในลกษณะน เราจะแสดงใหเหนจรงวา ถาใช mm5 เปนตวหลกในการแบงสวนจะประกนไดวามขอมลอยางนอย 30% ทมคานอยกวา mm5 และมอยางนอย 30% เชน
154 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
กนทมคามากกวา mm5 นนหมายความวา สดสวนของจานวนขอมลของชดเลกกบจานวนขอมลของชดใหญทไดจาก Partition เปน 30:70 ในกรณเลวสด (ดสดกคอ 50:50)
ถามขอมล n ตวทแตกตางกนหมด เราเขยนแผนภาพในทานองเดยวกบรปท 8–6 ไดดงแสดงในรปท 8–7
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
� mm5
รปท 8–7 การแสดงกลมขอมลทไมมากกวา mm5 และกลมทไมนอยกวา mm5
จากรปสงเกตไดวากลมขอมลทระบายดวยสเทาทางดานซายบนมคานอยกวาหรอเทากบ mm5 กลมเทานมทงสน ��n/5� /2� สดมภ ขอตดสดมภตรงกลางทง (จะไดมนใจวาขอมลในกลมหลงการตดนนนอยกวา mm5 แนๆ ) และขอตดสดมภในกลมทอาจเปนสดมภทมไมครบ 5 ตวออกดวยอกหนงสดมภ (ถงแมจะไมมสดมภแบบน กจะขอตดออกสกอกหนงสดมภอยดแหละ) จะไดสบายใจวาทกสดมภทพจารณาในกลมนนมขอมล 3 ตวตอสดมภในกลม ดงนนจะเหลอขอมลในกลมทมนใจแนๆ วามคานอยกวา mm5 อยางนอยก 3(��n/5� /2� – 2) ตว ซงมคามากกวา 3n/10 – 6 (เพราะเปนการตดเพดานทง) ถงตรงนสรปไดวา มขอมลอยางนอยก 3n/10 – 6 (หรอประมาณ 30%) ทมคานอยกวา mm5
สาหรบจานวนขอมลทมคามากกวา mm5 กหาไดในทานองเดยวกน (กลมขวาลางในรปท 8–6) สรปไดเชนกนวา มขอมลอยางนอยก 3n/10 – 6 (หรอประมาณ 30%) ทมคามากกวา mm5
ถงตรงนเราทราบแลววาการใช mm5 ในการแบงสวนจะแบงขอมลเปนสองชด ชดหนงตองมขนาดอยางนอย 3n/10 – 6 และอกชดหนงกมขนาดอยางมาก 7n/10 + 6 กรณเลวสดจะเกดขนเมอ Partition ทกๆ ครง ไดชดใหญเปน 7n/10 + 6 และตองไป QuickSelect ตอทชดใหญในลกษณะนทกๆ ครงไป เวลาการทางานของ QuickSelect ทใช mm5 จะบรรยายดวยความสมพนธเวยนเกดดงน
t(n) � t( 7n/10 + 6 ) + (เวลาในการหา mm5) + (เวลาในการแบงสวน)
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 155
เวลาในการแบงสวนกคอ �(n) สวนเวลาในการหา mm5 นนวเคราะหไดจาก 3 ขนตอนของการหา mm5 ดงน
1. การแบงขอมลออกเปน �n/5� ชดๆ ละ 5 ตว ใชเวลา �(n)
2. หาขอมลทเปนมธยฐานของแตละชด (หนงชดใชเวลา �(1) เพราะมขอมลอยางมาก 5 ตวตอชด) เนองจากมทงสน �n/5� ชด จงใชเวลา �(n)
3. หามธยฐานของขอมลทไดในขนตอนทแลว ถาเราใชวธเรยงลาดบแลวหยบตวตรงกลาง กคงไมดแนเพราะเสยเวลา �(�n/5� log �n/5�) = �(n log n) ตองหามธยฐานของขอมล �n/5� ตวนดวยวธอน ขาวดคอเรากใช QuickSelect เพอหาตวนอยสดอนดบตรงกลางนนเอง ซงตองใชเวลา t( �n/5� )
สรปวาเวลาการทางานของ QuickSelect คอ
t(n) � t( 7n/10 + 6 ) + (�(n) + �(n) + t( �n/5� ) )+ �(n)= t( 7n/10 + 6 ) + t( �n/5� ) + �(n)� t( 7n/10 + 6) + t( n/5 + 1) + �(n)� t( 7.6n/10 ) + t( 2.1n/10) + �(n) เมอ n � 100= �(n)
เมอ n � 100 จะไดวา 7n/10 + 6 � 7.1n/10 และ n/5 + 1 � 2.1n/10 จงเปนทมาของบรรทดท 4 สวนบรรทดท 5 นนมาจากผลทไดเคยแสดงในบทท 4 วา t(n) = t(an) + t(bn) + �(n) = �(n) เมอ (a+b) < 1 ในทน a = 0.76 b = 0.21 จงสรปไดวา QuickSelect เมอใช mm5 เปนตวหลกในการแบงสวนใชเวลาเปน �(n)
บางคนอาจบอกวาเปนเชงเสนนกเมอ n � 100 แลวกรณท n < 100 เลาจะใชเวลาเทาไร แนนอนวาถา n < 100 กแสดงวาขนาดของปญหาถกจากดไวดวยคาคงตว กยอมแสดงวาใชเวลาเปนคาคงตวดวย และบางคนอาจถามวา QuickSelect ใชไดดเมอ n � 100 หรอ ? ตรงนตองขอใหเขาใจดวยวาททามานเปนการวเคราะหเชงเสนกากบ ทได 100 นเปนความตงใจของผวเคราะหเพราะเหนวาสวยด เราจะพยายามทาใหเกณฑตากวานเชน 85 กได (ลองคดด) แตนนไมใชประเดน ประเดนมนอยทวาเมอขนาดของขอมลเกน n0 ไปแลวพฤตกรรมของเวลาการทางานของอลกอรทมแมในกรณเลวสดเปนเชงเสน
156 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
การยกกาลงมอดลารถาเราอยากจะหาคาของ 2370 mod 371 เพอใชทฤษฎบทเลกของแฟรมาต (Fermat's Little Theorem) 1 ในการทดสอบวา 371 เปนจานวนประกอบหรอไม นนคอเมอ 2370 mod 371 1 จะสรปไดทนทวา 371 เปนจานวนประกอบ 2 แลวเราจะคานวณคาของ 2370 mod 371 อยางไร ?
วธดอๆ และทอๆ กคอลยคณแลว mod คณแลว mod ไปเรอยๆ โดยใชความรวา
ถา ak–1 c (mod m) แลว ak ac (mod m)
นนคอ ak mod m = a�(ak–1 mod m) mod m วธนมการคณแลว mod เปนจานวน �(k) ครง หรอในแงของ size(k) ซงคอขนาดของ k วดดวยจานวนบตทตองใชแทนคา k แลว วธนมการลยคณแลว mod เปนจานวน �(2size(k) ) ครงซงยอมรบกนไมได
แตถาเราใชความรวา
ถา ak � c (mod m) แลว a2k � c2 (mod m)
จะไดวา ak mod m = (ak/2 mod m)2 mod m เมอ k เปนเลขค และ ak mod m = a(a�k/2� mod m)2
mod m เมอ a เปนเลขค ซงใชแนวคดของการแบงแยกและเอาชนะ จากตวอยางอยากทราบคาของ 2370 mod 371 กทาดวยขนตอนดงน
2370 mod 371 = (2185 mod 371)2 mod 371 = (151)2 mod 371 = 170
2185 mod 371 = 2� (292 mod 371)2 mod 371 = 2� (46)2 mod 371 = 151
292 mod 371 = (246 mod 371)2 mod 371 = (135)2 mod 371 = 46
246 mod 371 = (223 mod 371)2 mod 371 = (298)2 mod 371 = 135
223 mod 371 = 2� (211 mod 371)2 mod 371 = 2� (193)2 mod 371 = 298
211 mod 371 = 2� (25 mod 371)2 mod 371 = 2� (32)2 mod 371 = 193
25 mod 371 = 32
เขยนเปนอลกอรทมไดดงน
1 ถา n เปนจานวนเฉพาะแลว an–1 � 1 (mod n) สาหรบทกๆ a > 0 ทเฉพาะสมพทธกบ n2 แตถาเทากบ 1 กอาจเปนจานวนประกอบไดเหมอนกน
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 157
01: ModularExpo( a, k, m )02: {03: if ( k == 0 ) return 104: c = ModularExpo( a, k/2, m )05: x = (c*c) mod m06: if ( k is odd ) x = (a*x) mod m07: return x08: }
ให g(k) คอจานวนครงในการคณแลว mod เพอหาคาของ ak mod m จะไดวา g(k) � g(k/2) + 2 = O( log k ) = O( log 2size(k) ) = O( size(k) )
ใหสงเกตวาทวเคราะหมาทงหมดนนเปนจานวนครงของการคณแลว mod ถา a, k, และ m มขนาด O( b ) บต การคณและการ mod ใชเวลาเปน O(b2) (ใชวธการคณและ mod แบบงายๆ) ดงนนวธการหาคา ak mod m ดวยการลยคณแลว mod แบบแรก กบการแบงแยกและเอาชนะนนจะใชเวลาเปน O(2bb2) กบ O(b3) ตามลาดบ
การคณเมทรกซกาหนดให A และ B เปนเมทรกซขนาด n�n เราสามารถหาผลลพธของ C = AB ไดโดยการคานวณหา cij ไดดงน
��
�
n
kkjikij bac
1
คานวณ cij แตละตวใชเวลา �(n) ตองคานวณทงสน n2 ตว ดงนนการคณเมทรกซขนาด n�nสองตวดวยวธงายๆ นใชเวลา �(n3)
คราวนมาลองใชวธการแบงแยกและเอาชนะ โดยการแบงเมทรกซ A ขนาด n�n เปนเมทรกซขนาด (n/2)�(n/2) จานวน 4 เมทรกซ (A11 , A12 , A21 , และ A22) ดงรปท 8–8
A11 A12
A21 A22
A
รปท 8–8 การแบงเมทรกซขนาด n�n ออกเปน 4 เมทรกซยอย
158 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
และแบงเมทรกซ B และ C ในทานองเดยวกน เราสามารถหาเมทรกซยอยของ C ไดจากเมทรกซยอยของ A และ B ไดดงน
C11 = A11B11 + A12B21
C12 = A11B12 + A12B22
C21 = A21B11 + A22B21
C22 = A21B12 + A22B22
เราไดเปลยนการคณเมทรกซขนาด n�n หนงครง ไปเปนการคณเมตกซขนาด (n/2)�(n/2) 8 ครง และการบวกเมทรกซ (n/2)�(n/2) อก 4 ครง กาหนดให t(n) คอเวลาในการคณเมทรกซขนาด n�n ของวธการแบงแยกและเอาชนะ จะไดวา
t(n) = 8t(n/2) + �(n2)
(พจน �(n2) มาจากภาระการบวกเมตกซขนาด (n/2)�(n/2) สครง) ใช master’s method จะไดวา t(n) = �(n3) ซงไมตางอะไรกบการคณแบบธรรมดาทนาเสนอในตอนแรก
แตในป ค.ศ. 1968 Strassen ไดพบวธการหาเมทรกซยอยของ C ไดจากเมทรกซยอยของ A และ B ในอกรปแบบหนง (ทดยงๆ) ดงน
M1 = ( A12 – A22 ) ( B21 + B22 )M2 = ( A11 + A22 ) ( B11 + B22 )M3 = ( A11 – A21 ) ( B11 + B12 )M4 = ( A11 + A12 ) B22M5 = A11 ( B12 – B22 )M6 = A22 ( B21 – B11 )M7 = ( A21 + A22 ) B11
C11 = M1 + M2 – M4 + M6C12 = M4 + M5C21 = M8 + M7C22 = M2 – M3 + M5 – M7
วธนเปลยนการคณเมทรกซขนาด n�n หนงครง ไปเปนการคณเมตกซขนาด (n/2)�(n/2) 7 ครง และการบวก (ลบ) เมตกซขนาด (n/2)�(n/2) อก 18 ครง บรรยายเวลาการทางานไดดงน
t(n) = 7t(n/2) + �(n2)
ดวย master’s method ได t(n) = )( 7log2n� = O( n2.81 ) ซงถอไดเปนครงแรกทสามารถคณเมทรกซขนาด n�n ซงใชเวลาเชงเสนกากบดกวา �(n3) ตอมากมการพฒนาวธคณเมทรกซอกหลากหลายรปแบบทใหผลเชงเสนกากบดขนเรอยมา (ป ค.ศ. 1978 หาได O( n2.796 ), 1979 หาได O( n2.521813 ), 1980 หาได O( n2.521801 ) และ 1986 หาได O( n2.376 ) ) อยางไรกตามวธดงกลาวใชไมคอยไดในทางปฏบต (เพราะความยงยากซบซอน และกบคาคงทมขนาดใหญทคณอย ซงสญ
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 159
กรณเชงเสนกากบไมไดแสดงใหเหน รวมถงจานวนการบวกทไมนบกนอยางละเอยด) จงเปนเพยงเรองนาสนใจในทางทฤษฎเทานน
คจดใกลกนทสดกาหนดใหมจดจานวน n จดบนระนาบสองมต สงทอยากทราบกคอวาคจดใดอยใกลกนทสด ใหจด i อยทพกด (xi , yi) ดงนน dij ซงคอระยะระหวางจด i และ j หาไดดงน
dij = (xi – xj)2+(yi – yj)2
ถาใชวธลยเปรยบเทยบทกคจด กคงไดคาตอบไมยากนก มอย n จด กตองม n(n–1)/2 ค คานวณระยะของคจดหนงคใชเวลาคงตว ตองคานวณทกค กใชเวลาเปน �(n2)
ถาเราคดจะแกปญหานดวยกลวธการแบงแยกและเอาชนะ กอาจทาตามขนตอนตอไปน
1. แบงจดออกเปนสองฝง (ฝงซายและฝงซาย) ขนาดพอๆ กน2. ไปหาคจดใกลกนทสดในฝงซาย3. ไปหาคจดใกลกนทสดในฝงขวา4. ไปหาคจดใกลกนทสดทขามฝง (หมายความวาจดหนงอยฝงซายอกจดอยฝงขวา)5. เปรยบเทยบสามคทได จากขนตอนท 2 3 และ 4 กจะไดคจดใกลกนทสดในระนาบ
ขนตอนท 1 งายใชเวลา O(n) ขนตอนท 2 และ 3 กอาศยการแกปญหาดวยวธเดยวกนทนาเสนออยนแบบเวยนเกด ขนตอนท 5 งายทสดใชเวลาคงตว ทจะตองใชความคดกอยทขนตอนท 4
ถา t(n) คอเวลาในการหาคจดใกลกนทสดของจด n จดบนระนาบดวยวธขางตน จะไดวา
t(n) = 2t(n/2) + O(n) + (เวลาของขนตอนท 4)
กอนทจะมาคดในรายละเอยดวาจะหาคจดขามฝงกนอยางไร เราควรตงเปาการออกแบบกนกอนวาจะไดเวลาโดยรวมเปนเทาไร
� ถาเวลาของขนตอนท 4 เปน O(n2) เหนจะไมดแน เพราะได t(n) = 2t(n/2) + O(n2) ซง master’s method บอกเราวาจะได t(n) = O(n2) ซงกไมตางอะไรกบลยทกคจด
160 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
� ถาเวลาของขนตอนท 4 เปน O(n log n) กดขน เพราะได t(n) = 2t(n/2) + O(n log n) = O(n log2 n) ซงกนบวาดมาก
� ถาเวลาของขนตอนท 4 เปน O(n) กถอไดวาดสดๆ เพราะได t(n) = 2t(n/2) + O(n) = O(n log n)
คราวนกมาลองคดวธหาคจดขามฝงกน เราคงใชวธลยทกคจดทขามฝงไมไดแนๆ เพราะมฝงละ n/2 จด กม (n/2)(n/2–1)/2 = �(n2) ค กไดเวลารวมเปน �(n2) ซงเราไมอยากได
dL
dR
d d
รปท 8–9 การพจารณาคจดฝงขามเฉพาะจดในแถบสเทา ( d = min(dL , dR) )
สมมตให dL คอระยะระหวางคจดทใกลสดทพบแลวฝงซาย dR คอระยะระหวางคจดทใกลสดทพบแลวฝงขวา และ d = min( dL , dR ) ถาคดใหละเอยดนด จะพบวามหลายจดมากมายทเราไมควรพจารณาเลยเชนจดทหางจากเสนแบงฝงเปนระยะเกน d เพราะจดเหลานยอมหางจากจดของอกฝงเกน d แน ดงนนจงควรพจารณาเฉพาะจดทอยในบรเวณทหางจากเสนแบงฝงไมเกน d (แสดงเปนตวอยางดวยแถบสเทาในรปท 8–9)
หากเรามสมมตฐานวาจดจานวน n จดนกระจายเปนอยางดบนระนาบ จะไดวามอย O( n ) จดทอยในแถบเทาน (ลองคดดซวาทาไม ?) ดงนนมอย O( n ( n –1)/2) = O(n) คทตองพจารณาในแถบเทาน สรปไดวาการหาคจดใกลสดใชเวลา t(n) = 2t(n/2) + O(n) = O(n log n) ในกรณทจดกระจายเปนอยางดบนระนาบ
อยางไรกตามถาจดไมกระจายดงทคด กมโอกาสทจดเปนจานวน O(n) จะเกาะเปนแนวตามแถบเทาทงหมดได ดงตวอยางในรปท 8–10 ซงถาเปนเชนนเวลาการทางานกจะเปน O(n2) อยด
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 161
dL
dR
d d
รปท 8–10 ตวอยางกรณทม O(n) จดอยในแถบเทา
ถาสงเกตตอจะพบวาเรากไมจาเปนตองตรวจสอบทกๆ คจดในแถบเทากได จดใดทหางกนตามแนวดงเกน d กไมตองไปสนใจ ซงสามารถตรวจสอบสภาพเชนนได โดยการเรยงลาดบรายการของจดในแถบเทาตามแนวดงจากบนลงลาง จากนนวงไลตามจดตางๆ เรมจากดานบนลงมา ถงจดใด กวดระยะจากจดนนถงจดถดไป (ในรายการ) ทไมตาเกนกวา d สงทนาสนใจกคอวาเราสามารถประกนไดวาจานวนจดอนๆ ทตาไมเกนกวา d นนมอยางมากเพยง 7 จดเทานน (ซงจะพสจนในยอหนาถดไป) ดงนนตอหนงจดทวงจากบนลงลาง ใชเวลาคงตวในการวดระยะกบจดอน (เพราะมไมเกน 7 จด) ในแถบเทามไดไมเกน n จด ดงนนใชเวลาหาคจดใกลกนทสดขามฝงเปน O(n) สรปไดวาใชเวลาในการหาคจดใกลสดบนระนาบคอ t(n) = 2t(n/2) + O(n) = O(n log n)
แลวทาไมถงมนใจนกวา ตอหนงจดทวงจากบนลงลางในแถบเทานน มอยไมเกน 7 จดทอยตากวาแตตาไมเกน d จะขอพจารณาจดๆ หนงในแถบเทา สมมตวาคอจด p1 ทอยฝงซาย (ดรปท 8–11 (ก)) เมอเรากาลงพจารณาจด p1 เรากสนใจเฉพาะจดทอยภายในพนทของแถบเทาจากจด p1 ลงไปเปนระยะ d (แสดงดวยสเหลยมทมพนท 2d�d ในรป โดย p1 อยทขอบบนของสเหลยม) ใหสงเกตวาหากเราวาดวงกลมวงหนงซงมจดศนยกลางอยท p1 และมรศม d จะตองไมพบจดใดในฝงซายทอยภายในวงกลม (อยบนเสนรอบวงได) ทงนเพราะ d คอระยะใกลสดของคจดทพบแลวทอยทางฝงซายหรอฝงขวาทงค จะเหนไดวาวงกลมนกนพนทตองหามไมใหมจดอนในสเหลยมครงซายไปมาก ถาจะใหกนพนทนอยสด กเหนจะตองให p1 อยทมมบนซายของสเหลยม (รปท 8–11 (ข)) เราสามารถวางจดอนๆ ในสเหลยมครงซายไดอกอยางมาก 3 จดทมระยะหางไมตากวา d ได ดงรป แสดงวามไดเพยงอยางมาก 4 จดในสเหลยม d�d ครงซาย
162 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
dd
dp1
d
dd
d
p1 p2
p3p4
(ก) (ข)รปท 8–11 การพสจนวามเพยง 8 จดเทานนในพนท 2d � d ของแถบเทา
และในทานองเดยวกน กมไดอยางมาก 4 จดในสเหลยม d�d ครงขวา สรปไดวามไดอยางมาก 8 จดภายในสเหลยม 2d�d (มโอกาสทมจด p2 และ p3 ในรปท 8–11 (ข) จะทบกบอกสองจดในตาแหนงเดยวกนทฝงขวา เพราะตอนแบงจดตางๆ ออกเปนสองฝงนน p2 และ p3 ถกแบงไปอยฝงซาย และอกสองจดถกแบงไปอยฝงขวา) ดงนน p1 ซงเปน 1 ใน 8 ทเปนไปได กตองถกพจารณาเพอวดระยะกบอกอยางมาก 7 จดทเหลอ
ทเขยนๆ มานกเพลนไปหนอย และบางคนอาจจบผดวา แตอยาลมวากอนทวงไลจากบนลงลางไดนน กตองเรยงลาดบขอมลกอน ดงนนกตองเสยเวลาเปน O(n log n) ในการเรยงลาดบ ซงมากกวาการพจารณาคจดใกลสดขามฝงเสยอก ดงนนกยอมไดเวลาการทางานทงหมดเปน t(n) = 2t(n/2) + O(n log n) = O( n log2 n)
ทวเคราะหมากถกตอง ถาเราเลนเรยงลาดบทกครงในทกๆ ระดบของการเรยกเวยนเกด แตในความเปนจรงแลว เราเรยงลาดบไวกอนลวงหนาตงแตตอนแรกเลยกได แลวในชวงการตรวจสอบวาจดใดอยในแถบเทา กเพยงแตไลดงจากรายการทเรยงลาดบตามแนวดงเทานน ซงเสยเวลาเพยง O(n) เวลาการทางานทงหมดจงประกอบดวยการเรยงลาดบจดตางๆ ตามแนวนอน และตามแนวดง (การเรยงลาดบทงสองนทาครงเดยวตอนเรมตน ใชเวลา O(n log n) ) และเรมการแบงแยกและเอาชนะเพอหาคจดใกลกนทสด (ใชเวลา t(n) = 2t(n/2) + O(n) = O(n log n) ) ดงนนรวมเวลาทงสนเปน O(n log n)
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 163
ดารายอดนยมในงานสงคมแหงหนง จะขอเรยกคนทใครๆ ในงานกรจก แตวาเจาตวไมรจกคนอนเลยวาเปน "ดารายอดนยม" (ขอเรยกสนๆ วาดารากแลวกน) ของงานนน ปญหามอยวาถาในงานนมคน nคน แลวเราอยากรวาใครคอดาราของงานน จะตองเทยวเดนถามคนในงานวา "รจกคนนนไหม" อยางไรจงจะไดคาตอบเรวๆ วาใครคอดารา (หรอวาไมมดาราในงาน)
ลองวธลยถามเอาเลย ม n คน กถามทกๆ เลยวารจกคนท 1 ไหม ถาทกคนตอบวารจก กแสดงวาคนท 1 เปนดารา ถาไมใช กลยถามทกคนอกวารจกคนท 2 ไหม ถาทกคนรจก กแสดงวาคนนแหละ ถาไมใช กตงคาถามในทานองสาหรบคนถดไป เชนนไปเรอยๆ จนกวาจะพบดารา หรอจนกวาจะถามจนหมดทกกรณ แลวสรปวางานนไมดารา เหนไดวาเปนวธทเหนอยนาด ม n คน กตองถาม n(n–1) ครง
ทาอยางไรจงลดจานวนคาถามลงได มาลองใชอลกอรทมแบงแยกและเอาชนะด ดงน
เราแบงคนในงานออกเปนสองกลมขนาดพอๆ กน เรยกวากลม A กบกลม B สมมตให sA และ sB คอดาราของกลม A และ B ตามลาดบ (ถาม) เราจะสรปไดวา sA เปนดาราของงาน กเมอ sA
ไมรจกใครใน B แตทกคนใน B รจก sA ซงอาศยการถามเปนจานวน O(n) กรผล ในกรณทไมม sA หรอมแตสรปวาไมใชดาราของงาน กไปหา sB ในทานองเดยวกนถาม sB แลวเราจะสรปไดวา sB เปนดาราของงาน กเมอ sB ไมรจกใครใน A แตทกคนใน A รจก sB เนองจากมการหาดาราในกลมเลกอยางมาก 2 ครง และการถามหลงไดดาราของกลมยอยใชเวลา O(n) ดงนน อลกอรทมนใชเวลาเปน
t(n) � 2t(n/2) + O(n)
จาก master's method ได t(n) = O(n log n) ดกวาแบบลย
เราพอใจเพยงแคนไหม ความจรงแลวเรวสดๆ กตองถามเปน �(n) เพราะวาดาราคอคนททกๆ คนรจก กแสดงวาอยางนอยกตองถามทกคน เราจะมาพยายามหาวธทถามแค �(n) จากแนวคดการแบงแยกและเอาชนะททามาขางตน เราแบงเปนสองกลม หลงจากรดาราของกลม A กตองมาตรวจสอบกบกลม B เนองจากมคนจานวน �(n) ในกลม B กตองใชเวลา �(n) ในการตรวจสอบ และเรากอาจตองทาในทานองเดยวกนอกครงกบดาราของกลม B ถาเราลดขนาดของกลมB เหลอแคหนงคน กลม A กม n–1 คน ดงนนพอได sA การตรวจสอบกบ B กใชเวลาคงตว
164 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
และไมตองไปหา sB ใหเสยเวลาเพราะ B มแคคนเดยว แตทจะแยกคอตอนตรวจสอบ sB กบ A กตองใชเวลา �(n) เชนกนได เวลารวมทงหมดเปน t(n) = t(n–1) + O(n) = O(n2) แยเทาแบบลย
แตถามาคดสกนด เราสามารถแบงกลมแบบ 1 กบ n–1 ในลกษณะทกลาวมา โดยประกนวาคนทอยใน B ซงมเพยงคนเดยวคนนตองไมใชดาราแนๆ ได โดยอาศยการเลอกคนสองคน (ใครกได) แลวถาม สมมตวาเปน i กบ j ถาถามแลวพบวา i รจก j กจบ i ไปไวเปนคนเดยวใน B เลย เพราะ i ไปรจกคนอนจงไมใชดาราแนๆ แตถาถามแลว i ไมรจก j กสรปไดวามบางคนไมรจก j ดงนน j ไมใชดารา กจบ j ไปไวใน B คราวนเรากมนใจวาไมตองตรวจสอบ sB กบกลม A อก ใชเวลาทงสน t(n) = t(n–1) + �(1) = �(n) สรปไดเปนอลกอรทมดงน (ใหแถวลาดบ P[1..n] เกบคนทมางาน)
01: Celebrity( P[b..t] )02: {03: if ( b == t ) return P[b]04: if ( P[b] knows P[j] ) {05: sa = Celebrity( P[b+1..t] )06: c = P[b]07: } else {08: sa = Celebrity( P[b..t–1] )09: c = P[t]10: }11: if ( sa > 0 AND c knows sa
AND sa doesn't know c )12: return sa13: else14: return 015: }
ตวอยางนชใหเหนวาบางทการแบงแยกและเอาชนะกไมจาเปนตองแบงเปนครงๆ เสมอไป หากเราสามารถแบงครง แลวยงลดจานวนการแกปญหายอยๆ ลงไดกเปนเรองดมาก (เชน binary search ทแบงครง แลวยงขจดออกครง) การแบงปญหาเพอใหไดปญหายอยทมสดสวนทแนนอน (เชน 50%–50%, 30%–70% เปนตน) นนเปนเรองด (เพราะจะทาใหมโอกาสไดพจน log n แทนทจะเปน n ในคาตอบของเวลาการทางาน) แตถาแบงเปนสดสวนไมไดคอแบงแลวเปนกลมหนงทมจานวนคงตว (อยางเชนททาขางบนน) เวลาการทางานจะเปนภาระการแบงและรวมคาตอบคณดวย n ซงเราตองระวงมาก โดยตองพยายามลดใหภาระการแบงและการรวมคาตอบนนตาทสดเทาทจะทาได (อลกอรทมขางบนนตาเปนคาคงตว) จงจะไดผลด
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 165
แบบฝกหด1. จงแสดงใหเหนวาเราสามารถหามธยฐานของขอมล 5 ตวดวยการเปรยบเทยบขอมลเพยง 6 ครง
2. Randomized_Quicksort จะใชเวลาเทาใด ถาขอมลทกตวในแถวลาดบมคาเทากนหมด
3. จงแสดงใหเหนจรงวาอลกอรทมขางลางนเรยงลาดบขอมลไดจรง พรอมทงวเคราะหเวลาการทางานดวย
01: StoogeSort( A[i..j] )02: {03: if A[i] > A[j] then exchange A[i]�A[j]04: if i+1 � j then return05: k �(j–i+1)/3�06: StoogeSort( A[i..j–k] ) /* first two–third */07: StoogeSort( A[i+k..j] ) /* last two–third */08: StoogeSort( A[i..j–k] ) /* first two–third again */09: }
4. จงวเคราะหเวลาการทางานทงกรณเลวสด และกรณเฉลยของ merge sort ถาเราเลอกจดแบงแถวลาดบแบบสม (จากทเคยเลอกแบบแบงตรงกลาง)
5. จงวเคราะหเวลาการทางานของ QuickSelect เมอเราเลอกตวหลกในการแบงสวนดงน
ก) median–of–median–threeข) median–of–median–sevenค) median–of–median–nine
6. กาหนดให X[1..n] และ Y[1..n] เปนแถวลาดบซงเกบจานวนทเรยงลาดบจากนอยไปมาก
ก) จงออกแบบอลกอรทมทใชเวลาเปน O( log n ) เพอหามธยฐานของขอมลทง 2n ตวจากแถวลาดบ X และ Y
ข) จงออกแบบอลกอรทมทใชเวลาเปน O( log(max(m, n)) ) เพอหาขอมลตวทนอยทสดอนดบท k ของขอมลทง 2n ตวจากแถวลาดบ X และ Y
7. กาหนดให A คอแถวลาดบทมขอมลแตกตางกนทงหมด n ตว จงออกแบบอลกอรทมซงใชเวลา O(n) ในการหาขอมลใน A จานวน k ตว k � n ทมคาใกลเคยงกบมธยฐานของขอมลเหลาน
166 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
8. ถากาหนดใหระยะขจดระหวางจด i และ j ระนาบคอ dij = |xi – xj| + |yi – yj| เรยกระยะขจดแบบนวาแบบ L1 หรอบางทเรยกวาแบบแมนฮตตน (Manhattan distance) จะตองปรบปรงอลกอรทมการหาคจดใกลกนทสด หรอไม อยางไร
9. ถากาหนดใหระยะขจดระหวางจด i และ j ระนาบคอ dij = max( |xi – xj|, |yi – yj| ) เรยกระยะขจดแบบนวาแบบ L
� จะตองปรบปรงอลกอรทมการหาคจดใกลกนทสด หรอไม
อยางไร
10. กาหนดให x1, x2, ..., xm เปนลาดบของจานวนเตม (มคาตางกนหมด) ซงมขอมลทตาแหนง kมคานอยทสด ( k เปนคาทเราไมร) โดยท xk < xk+1 < ... < xm < x1 < ... < xk–1 จงออกแบบอลกอรทมทหาคา k ไดในเวลา o( m )
11. จงออกแบบอลกอรทมแบบการแบงแยกและเอาชนะเพอหา majority ของขอมลในแถวลาดบ โดยใชเวลา O(n)
12. กาหนดให A[1..n] เปนอาเรยของตวเลขตางๆกน n ตว เราเรยกคลาดบ (i, j) วาเปนคกลบลาดบ (inversion) ของ A ถา i < j และ A[i] > A[j] จงออกแบบอลกอรทมทใชเวลาการทางานเปน O(n log n) เพอหาจานวคกลบลาดบทงหมดของ A ( ตวอยางเชน < 2, 3, 5, 4, 1> มทงหมด 3 inversions )
13. Multiset คอเซตทมตวซากนได ฐานนยม (mode) ของ multiset คอสมาชกใน multiset ทปรากฏเปนจานวนมากสด (ขอเนนตรงนวาฐานนยมไมใช majority แต majority เปน ฐานนยม) กาหนดให n คอขนาดของ multiset
ก) จงออกแบบอลกอรทมทหาฐานนยมไดในเวลา O(n log n) (ในกรณท multiset ทไดรบมฐานนยมมากกวาหนงตวกหามาตวเดยวพอ)
ข) ถาเรารมากอนวาฐานนยมของ multiset ทจะหานมปรากฎใน multiset เกน 20% ของขนาดของ multiset แนๆ จงออกแบบอลกอรทมทหาคาของฐานนยมในเงอนไขขางตนภายในเวลา O(n)
14. กาหนดให A[1..n] เปนแถวลาดบทเกบขอมลเปนจานวนเตมทเรยงลาดบจากนอยไปมากแลวถกหมนไปทางขวา k ตาแหนง ตวอยางเชน (35, 42, 5, 15, 27, 29) เปนแถวลาดบของ
Draft 1.0 : 25/10/00 23:20 : [email protected] บทท 8 การแบงแยกและเอาชนะ 167
ขอมลทเรยงลาดบทถกหมนไป 2 ตาแหนง ในขณะท (27, 29, 35, 42, 5, 15) เปนแถวลาดบทเรยงลาดบทถกหมนไป 4 ตาแหนงก) ถาเราทราบคา k จงเขยนอลกอรทมทหาคาทมากทสดใน A ในเวลา O(1)ข) ถาเราไมทราบคา k จงเขยนอลกอรทมทหาคาทมากทสดใน A ในเวลา O(lg n)
15. กาหนดให S คอรายการของจานวนจรงจานวน n ตว และ k เปนตวเลขจานวนจรง จงออกแบบอลกอรทมทใชเวลา O(n log n) เพอหาวามตวเลข 2 ตวใดใน A ทมผลรวมเทากบ k
16. กาหนดให S1 และ S2 เปนรายการของจานวนเตม (แตละรายการมจานวนเตม n ตว) และจานวนเตมอกหนงตวคอ k จงออกแบบอลกอรทมทใชเวลา O(n log n) ในการหาจานวนเตมสองตว ตวหนงเลอกมาจาก S1 อกตวเลอกมาจาก S2 ทผลรวมมคาเทากบ k
17. กาหนดให A[1..n] คอแถวลาดบซงเกบจานวนเตม (แตกตางกนหมด) ทเรยงลาดบแลวจากนอยไปมาก จงออกแบบอลกอรทมซงหาตาแหนงของชองใน A ท A[i] = i (ถาม) ในเวลา O(log n)
18. กาหนดให A[1..n] คอแถวลาดบของขอมลทแตกตางกน n ตว และใหลาดบยอยเพมขน(increasing subsequence) ของ A คอรายการของขอมล A[i1], A[i1], ..., A[ik] โดยท 1� i1< i2
<…< ik � n และ A[i1] � A[i1] � ... � A[ik] จงออกแบบอลกอรทมซงหาความยาวของลาดบยอยเพมขนยาวทสดของ A ซงใชเวลาเปน O(n2) เชน ลาดบยอยเพมขนทยาวสดของ ( 2, 5, 1, 0, 7, 3, 4, 6, 99, 10, 8 ) คอ (2, 3, 4, 6, 99) ซงยาว 5 (มลาดบยอยทเพมขนอนอกทยาว 5)
19. กาหนดให A[1..n] คอแถวลาดบของจานวนจรงจานวน n ตว (เปนเลขลบกได) นยามใหลาดบยอยทตดกน (consecutive subsequence) ของ A คอรายการของขอมล A[i], A[i+1], ..., A[i+k] จงออกแบบอลกอรทมแบบแบงแยกและเอาชนะเพอหาคาของ ลาดบยอยทตดกนทมผลรวมมากสด ในเวลา O(n log n) ตวอยางเชนลาดบยอยทตดกนทมผลรวมมากสดของ (31, –41, 59, 26, –53, 58, 97, –93, –23, 84) คอ (59, 26, –53, 58, 97) ซงมผลรวมเทากบ 187
20. กาหนดให X คอสตรง และ Xk คอสตรงซงไดจากการแทนตวอกษรใน X แตละตว ดวยตวอกษรตวนนเปนจานวน k ครง เรยก Xk วาเปน “สตรงตดอาง” ของ X ตวอยางเชน “CCHHAAII” เปนสตรงตดอางของ “CHAI” ดวย k=2 กาหนดให X และ Y เปนสตรงความยาว m และ n ตามลาดบ โดยท m � n เราเรยก Xk วาเปนลาดบยอยของ Y กเมอม 1�
168 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 25/10/00 23:20 : [email protected]
i1< i2<…< im � n ททาใหสาหรบ j = 1, 2, ..., m จะไดวา Xk[j] = Y[ij] จงออกแบบอลกอรทมซงใชเวลา O(n log (n/m)) เพอหาคา k ทมากสดททาให Xk เปนลาดบยอยของ Y
Draft 1.0 : 30/10/00 5:25 : [email protected] 169
บทท 9
กาหนดการพลวต (dynamic programming) เปนกลวธการแกไขปญหาทมลกษณะคลายกบการแบงแยกและเอาชนะ จะตางกนกเรองของกรรมวธในการไดมาซงคาตอบ สาหรบปญหาในบางลกษณะ อลกอรทมแบบแบงแยกและเอาชนะจะใชเวลาเปนเลขชกาลง (exponential) แตพอใชกาหนดพลวตกลบทาใหใชเวลาเหลอแคแบบพหนาม (polynomial) อยางไรกตามกาหนดพลวตเปนวธทเขาใจยากหนอย (นกเรยนหลายคนบนอยางนน) แตพอเขยนเปนโปรแกรมแลวโดยทวไปใชวงวนแบบงาย ไมตองเขยนแบบเวยนเกดอะไรเลย
โดยทวไปเราใชกาหนดการพลวตเพอแกไขปญหาทเรยกกนวา ปญหาการหาคาเหมาะทสด(optimization problems) จงจะขอเรมดวยการอธบายถงลกษณะของปญหาประเภทน จากนนจะนาเสนอลกษณะเฉพาะของปญหาการหาคาเหมาะทสด ทจะใชกาหนดการพลวตหาผลเฉลยเหมาะทสดได และไดอยางมประสทธภาพ จากนนจงคอยนาเสนอตวอยางของปญหาและวธหาคาตอบดวยกาหนดการพลวต
ปญหาการหาคาเหมาะทสดปญหาการหาคาเหมาะทสดทนกเรยนคงคนเคยกนมาแลว มอาทเชน การหาตนไมแบบทอดขามเลกสด (minimum sapnning tree) การหาวถสนสดในกราฟ (shortest path) ปญหาการเดนทางของพนกงานขาย (traveling salesperson problem) เปนตน ผลลพธทตองการจากปญหาเหลานมกมตวประเมนคณภาพวาตองดสด นอยสด หรอมากสดเปนตน ซงเราเรยกรวมวาเปนคาทเหมาะทสด (optimal) โดยคณภาพของผลเฉลยนนวดจากคาของฟงกชนจดประสงค
กาหนดการพลวต
170 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
(objective function) นอกจากนสงทกาหนดไวในปญหาการหาคาเหมาะทสดกคอเซตของเงอนไขบงคบ (constraints) ตางๆ เราเรยกผลเฉลยใดทอยภายใตเงอนไขบงคบทกาหนดวาเปนผลเฉลยทเปนไปได (feasible solution) และเรยกผลเฉลยทเปนไปไดตวทไดคาของฟงกชนจดประสงคเหมาะทสดวาผลเฉลยเหมาะทสด (optimal solution)
จะขอนาเสนอตวอยางของปญหาการหาคาเหมาะทสดอกสกจานวนหนง (แตยงไมบอกวธหาผลเฉลยเหมาะทสด)
ตวอยางท 9-1 0/1 Knapsack : สมมตวาคณเปนผโชคดของหางสรรพสนคาแหงหนง ซงทางหางฯ เปดโอกาสในคณหยบสนคาชนใดๆ กชนกไดใสรถเขนทจของไดไมเกน W กโล (ถาเกนกจะไมไดอะไรเลย) คณจะเลอกหยบสนคาอะไรด เพอใหไดมลคารวมสงสด (ไมมขอจากดเรองเวลา สนคาทกชนในหางฯ ตดราคาไวเรยบรอย แถมยงมตาชงใหคณอกดวย)
สนคาในหางฯ นม n ชน แตละชนมหมายเลขกากบ (1, 2, …, n) ให wi คอนาหนกของสนคาชนท i และ vi คอราคาของสนคนชนท i ผลเฉลยของปญหานสามารถเขยนในรปของ n สงอนดบ (n–tuple) (x1, x2, …, xn) โดยท xi = 0 หมายความวาไมเลอกสนคาชนท i แตถา xi = 1 แสดงวาเลอก ดงนนผลเฉลยทเปนไปไดคอผลเฉลยท
Wwxn
iii ��
�1 และ xi = 0 หรอ 1
เปนเงอนไขบงคบ สวนผลเฉลยเหมาะทสดคอผลเฉลยทเปนไปได ซงใหคาของฟงกชนจดประสงค
��
n
iii xv
1ทมากสด
ตวอยางท 9-2 Linear Partition : สมชายมทดน n แปลงตดกนไปเปนแนวยาว (ฝนไปหรอเปลา) เขาคดไดวาถงเวลาแลวทตองแบงทดนเหลานใหลก k คน (k � n) มขอแมวา ทดนแตละแปลงหามแบงโฉนด และถาแบงใหลกคนใดมากกวาหนงแปลง ตองเปนแปลงทตดกนดวย และเพอไมใหหาวาเปนคนลาเอยง (ยงจรงๆ) จะตองแบงใหลกคนทไดทดนรวมเปนพนทมากสดนน มขนาดนอยสดเทาทจะนอยได (แตยงมากสดอย) (ปวดหว ! กลวเขาทะเลาะกน) จะแบงอยางไรด
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 171
เชนม 9 แปลงตดกนซงมขนาดดงน (10, 20, 30, 40, 50, 60, 70, 80, 90) อยากแบงให 3 คน กแบงไดเปน (10, 20, 30, 40, 50), (60, 70), และ (80, 90) ซงเหมาะทสด เพราะคนทสามไดพนทรวมมากสดเปน 170 ซงนอยสดเทาทจะนอยได (อยาลมวาเราแบง (20, 30, 40, 50), (60, 80, 10), (70, 90) ไมได เพราะคนทสองไดทดนทไมตดกน)
ถาเขยนใหเปนทางการหนอย กาหนดให S คอลาดบของตวเลข (s1, s2, …, sn) และ จานวนเตม k � n si กคอขนาดของทดนแปลงท i และ k คอจานวนลก ผลเฉลยของการแบงสามารถเขยนไดในรปแบบ (x1, x2, …, xk , xk+1) เพอบอกวาลกคนท i ไดทดนแปลงท xi ถง xi+1 – 1 (โดยท xk+1 = n+1) ดงนนผลเฉลยทเปนไปไดตองเปนไปตามเงอนไขบงคบ
0 = x1 < x2 < …< xk � n
สวนผลเฉลยเหมาะทสดทตองการคอผลเฉลยทเปนไปไดซงมคาของฟงกชนจดประสงค
��
��
�
��
��
�
��
���
1
1max
i
i
x
xjj
kis ทนอยสด
ตวอยางท 9-3 Printing Neatly : ในสมยโบราณนานมาแลวทยงตองใชเครองพมพดดในการจดพมพเอกสารนน ตวอกษรแตละตวทพมพมความกวางเทากนหมด (ไมวาจะเปน เ ณ W ) ขณะทผพมพ พมพไปเรอยๆ ใกลไปทางขวาของกระดาษ ผพมพทชานาญจะรไดวาเมอไรควรกดแปนขนบรรทดใหม โดยทเมอพมพเสรจแลวจะไดเนอทวางทางขวาของกระดาษทดแลวสบายตา (สมยน word processor คดและทาใหหมด) กาหนดใหยอหนาหนงของเอกสารภาษาองกฤษทตองพมพนนประกอบดวยคาเปนจานวน n คา คาท i ม wi ตวอกษร เราอยากพมพยอหนานบนกระดาษทกาหนดใหพมพไดมากสด M ตวอกษรตอหนงบรรทด จะตองพมพอยางไรถงดสวย
ถาบรรทดหนงประกอบดวยคาท i ถง j บรรทดนนจะกนทไป j–i +��
jik kw (พจน j–i กคอ
ชองวางทตองคนระหวางคาในภาษาองกฤษ) ทวางทเหลอปลายบรรทดกคอM – ( j–i +�
�
jik kw )
กาหนดใหผลเฉลยอยในรปของ (x0, x1, x2, …, xm) โดยท xi แทนหมายเลขคาสดทายของบรรทดท i (กาหนดให x0 = 0) ดงนนบรรทดท i กยอมมทวางปลายบรรทดเปน
172 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
���
���
�
����� �
��
�
�
i
i
x
xkkiii wxxMs
11
1
)1(
ผลเฉลยทเปนไปไดตองเปนไปตามเงอนไขบงคบ
1 � x1 < x2 < … < xm � n และ si � 0 สาหรบ i = 1, 2, …, m (m คอจานวนบรรทดทตองใช)
แลวเราจะนยามความสวยของการพมพไดอยางไร แนนอนวาความสวยทวานคงตองขนกบ si
(ยกเวนบรรทดสดทายของยอหนา (sm) เพราะถงแมมทวางเยอะกแลดไมนาเกลยด) เหนไดเลยวาถา si = 0 หมดสาหรบ i = 1, 2, …, m–1 หมายความวาไมมทวางปลายบรรทดเลย อนนสวยสดแนๆ แลวกรณอนละ กตองลองดวาเราจะแปลงความสวยมาเปนฟงกชนจดประสงคกนอยางไรด จงจะสะทอนวาถามคานอยแสดงวาสวยมาก (0 แสดงวาสวยสด) มคามากกสวยนอย ถาใหเปน � �
�
11
mi is กอาจจะไมคอยดเพราะถาบรรทดหนงวาง 10 อกบรรทดวาง 0 จะสวย
เหมอนบรรทดหนงวาง 5 อกบรรทดกวาง 5 (ซงแบบหลงนาจะสวยกวา) กแสดงวาเราไมชอบทวางเยอะ จะขอทาโทษบรรทดทมทวาง 10 ใหมากกวา 5 เทาของบรรทดทมทวาง 2 อนนทาไดเชนใหทาโทษเปนยกกาลงสองของทวาง ไดฟงกชนจดประสงคเปน � �
�
11
2mi is หรอแม
กระทงใหเปน � �
�
11
3mi is กจะสะใจมากขน โอเค ขอเปนยกกาลงสามกแลวกน (ไมมเหนผลใด
นอกจากความสะใจ แตถาจะทดลองเปรยบเทยบดกดเหมอนกน) ดงนนผลเฉลยเหมาะทสดกคอผลเฉลยทเปนไปไดทมคาฟงกชนจดประสงค
��
m
iis
1
3 ทนอยสด
ลกษณะเฉพาะของปญหาปญหาการหาคาเหมาะทสดทจะใชกาหนดการพลวตหาผลเฉลยเหมาะทสดได และไดอยางมประสทธภาพนน จะตองมลกษณะเฉพาะของปญหาดงตอไปน
� ผลเฉลยเหมาะทสดของปญหาใหญ ประกอบดวยผลเฉลยเหมาะทสดของปญหายอยๆ คณสมบตนเรยกวาโครงสรางยอยเหมาะทสด (optimal substructure) คณสมบตขอนประกนวาผลเฉลยทหาไดดวยกาหนดการพลวตจะเปนผลเฉลยเหมาะทสด
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 173
� ปญหายอยๆ ทตองหาผลเฉลยนนมการซอนเหลอมกน (overlapping subproblems) และมจานวนปญหายอยๆ ทงหมดไมมาก คณสมบตขอนประกนวากาหนดพลวตจะหาผลเฉลยไดอยางมประสทธภาพ
โครงสรางยอยเหมาะทสดโครงสรางยอยเหมาะทสดเปนลกษณะเฉพาะของปญหาการหาคาเหมาะทสด ซงผลเฉลยเหมาะทสดประกอบดวยผลเฉลยเหมาะทสดของปญหายอยๆ ดวยลกษณะเฉพาะน ประกนวาเราสามารถใชกาหนดการพลวตเพอหาผลเฉลยเหมาะทสดได เราสามารถแสดงวาปญหาหนงมโครงสรางยอยเหมาะทสดไดโดยพสจนวา ผลเฉลยเหมาะทสดของปญหานประกอบดวยผลเฉลยเหมาะทสดของปญหายอยๆ ของปญหานน
หรอจะแสดงการมโครงสรางยอมเหมาะทสดของปญหา ดวยการเขยนความสมพนธเวยนเกดของคาของผลเฉลยเหมาะทสด ในรปของคาของผลเฉลยเหมาะทสดของปญหายอย สงทตองคดกอนเขยนความสมพนธเวยนเกดกคอ
� อะไรคอคาของผลเฉลยเหมาะทสด ตรงนกคอคาของฟงกชนจดประสงคของปญหา
� อะไรคอปญหายอย มพารามเตอรอะไรบางทตองใชเพอกาหนดขนาดของปญหาเชนถาเขยน M(n,k) แลว n คออะไร k คออะไร จาเปนตองมหรอไม ตองมตวอนอกหรอเปลา โดยทวไปคาเลกสดของพารามเตอร จะบงถงกรณของปญหาทมขนาดเลกสด ซงรคาตอบทนท (เปนกรณเรมตนของความสมพนธเวยนเกด)
ถาเราตปญหาออกมาเปนความสมพนธเวยนเกดของคาของผลเฉลยเหมาะทสดไดแลว กแสดงวาออกแบบอลกอรทมเสรจไปเกนครงแลว ขอยกตวอยางตอไปนประกอบ
ตวอยางท 9-4 Optimal Binary Search Tree : โดยทวไปเมอพดถงการเกบขอมลดวยตนไมคนแบบทวภาค (binary search tree) นน เรามกกลาววาตนไมคนแบบทวภาคทไดดล จะเปนตนไมททาใหการคนกระทาไดในเวลา O( log n ) เนองจากตนไมไดดลนนเตยสด คากลาวนเปนจรงกเมอความถในการคนแตละขอมลในตนไมนนมพอๆ กน แตถาความถของการอางองขอมลในตนไมไมเทากน รปแบบของตนไมในลกษณะอนทไมไดดลอาจดกวากได โดยวดไดจากตนทนการคน
174 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
ซงคอคาคาดหวงของจานวนโหนดทตองนามาพจารณาระหวางการคน ตวอยางเชน ตารางท 9–1 แสดงความนาจะเปนในการอางองขอมลจานวนหนง
ตารางท 9–1 ตวอยางขอมลกบความนาจะเปนในการอางองขมล
ขอมล ความนาจะเปนพ 0.25ชนจง 0.22ทกเกอร 0.20ดบซ 0.18ลาลา 0.08ทงกวงก 0.05โพ 0.02
ชนจง
ดบซ
ทกเกอร
ทงกวงก
พ
โพ
ลาลา
ทกเกอร
ชนจง
ดบซ
พ
ทงกวงก ลาลา
โพ
(ก) (ข)รปท 9–1 การจดเกบขอมลชดเดยวกนในตนไมคนแบบทวภาคสองลกษณะ
ถาจดเกบในตนไมคนแบบทวภาคไดดลดงรปท 9–1 (ก) จะมตนทนการคนเปน
0.05�1 + (0.18+0.02)�2 + (0.22+0.20+0.25+0.08)�3 = 2.70
ในขณะทจดเกบในตนไมดงรปท 9–1 (ข) จะมตนทนการคนเปน
0.20�1 + (0.22+0.25)�2 + (0.18+0.05+0.08)�3 + 0.02�4 = 2.15
เหนไดวาแบบหลงดกวาแบบไดดล
ปญหาทเราสนใจในทนกคอ จะตองจดเกบขอมลในตนไมคนแบบทวภาคใหมรปรางอยางไร จงจะมตนทนการคนทนอยสด
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 175
จากลกษณะการจดเกบขอมลในตนไมคนแบบทวภาค ตนไมยอยใดๆ ทม x เปนราก ขอมลทกตวทมคานอยกวา x ตองอยในตนไมยอยทางซายของ x และขอมลทกตวทมคามากกวา x ตองอยในตนไมยอยทางขวาของ x กาหนดให (x1 ,x2 , …, xn ) คอลาดบของขอมล n ตวทเกบในตนไมคนแบบทวภาค โดยท x1 < x2 <…< xn ดงนนถา xi และ xj คอขอมลทมคานอยสดและมากสดตามลาดบของตนไมยอยตนหนง ขอมลทงหมดในตนไมยอยนตองเปน (xi ,xi+1 , …, xj ) 1 �i � j � n
เราสามารถบรรยายขอมลทงหมดในตนไมดวยชวงของขอมล กาหนดให T(i, j) คอเซตของตนไมยอยตางๆ ทเกบขอมล (xi ,xi+1 , …, xj ) ขอมลทกตวใน (xi ,xi+1 , …, xj ) นมสทธเปนรากไดทงสน ถา xm เปนราก (i � m � j) เซตของตนไมยอยทางซายของ xm กตองเปน T(i, m–1) และเซตของตนไมยอยทางขวากตองเปน T(m+1, j)
xm
tL tR
รปท 9–2 ตนไมคนแบบทวภาค
กาหนดให tmin(i, j) คอตนไมใน T(i, j) ทมตนทนการคนทนอยสด ถา tmin(i, j) ม xm เปนราก (ดรปท 9–2) โดยท tL � T(i, m–1) และ tR � T(m+1, j) คอตนไมยอยทางซายและขวาของ tmin(i, j) ตามลาดบ ให pi คอความนาจะเปนในการอางอง xi ตนทนการคนของ tmin(i, j) ยอมเทากบ
pm + ตนทนการคนของ tL + ตนทนการคนของ tR
ซงจะมคานอยสดไดกตอเมอตนทนการคนของ tR และของ tL นอยสด (เพราะวาตนไมยอยทงสองไมมโหนดทรวมกนเลย) แสดงวา tL กคอ tmin(i, m–1) และ tR กคอ tmin(m+1, j) ดงนนตนไมคนแบบทวภาคทมตนทนการคนทนอยสด ยอมประกอบดวยตนไมยอยทางซายและขวาทมตนทนการคนทนอยสดทงสองตนดวย จงมโครงสรางยอยเหมาะทสด
ตวอยางท 9-5 Longest Increasing Subsequence (LIS) : กาหนดให S = (z1, s2, …, sn) เปนลาดบของจานวนเตมทแตกตางกน n ตว จงหาลาดบยอย ),...,,(
21 kiii sss ทยาวสด โดยท 1� i1< i2<…< ik � n
176 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
และ kiii sss ��� ...
21 เชน ลาดบยอยเพมขนทยาวสดของ ( 2, 5, 1, 0, 7, 3, 4, 6, 99, 10, 8 )
คอ (2, 3, 4, 6, 99) ซงยาว 5 (มลาดบยอยทเพมขนอนอกทยาว 5)
กาหนดให LIS(j) = ),...,,(21 jii sss โดยท 1 � i1< i2<…< j คอลาดบยอยเพมขนทยาวสดทตอง
จบลงดวย sj ให L(j) คอความยาวของ LIS(j) เมอเรากาลงพจาณา sk อย กตองตงคาถามวา sk จะมสทธเพมความยาวของ LIS(j), j < k ในอดตทผานมาลาดบใดไดบาง (sk จะไปเพม LIS(j) ใหยาวขนอกหนงไดกตอเมอ sj < sk) และเนองจากเราสนใจลาดบยอยเพมขนทยาวสด ดงนนจงตองเลอกเฉพาะ LIS(j) ทยาวสดท sk มสทธจะตอทายได กาหนดให LT(sj, sk) มคาเทา 1 เมอ sj
< sk มฉะนนมคาเทากบ 0 ดงนน� � 1),()(max)(
1���
��kj
kjssLTjLkL
แสดงใหเหนถงโครงสรางยอยเหมาะทสด เพราะวา L(k) เลอกมาจากคามากทสดของ L(j) ตางๆ ซงตองมากทสดดวย
ตวอยางท 9-6 Shortest Path : ปญหาทางกราฟนเปนทรจกกนด คอเราตองการหาวถสนสดจากจดหนงไปยงอกจดหนงในกราฟ G (G เปนกราฟระบทศทาง และเสนเชอมมนาหนกกากบ)
กาหนดให Pij คอวถสนสดจาก i ถง j ให u และ v คอสองจดใดๆ บน Pij ท u อยกอน v ในลาดบของจดบน Pij เราสามารถแสดงวาปญหานมโครงสรางยอยเหมาะทสดได โดยแสดงใหเหนจรงวา วถยอยจาก u ถง v ของ Pij ตองเปนวถสนสดดวย (ดรปท 9–4)
i jv
u
รปท 9–4 วถจาก s ถง v บนวถสนสดจาก s ถง t ตองสนสดดวย
เราแบง Pij ออกเปนสามวถยอยคอ Piu Puv และ Pvj ซงคอวถจาก i ถง u จาก u ถง v และ จาก vถง j บน Pij ตามลาดบ ถามวถ P'uv อนจาก u ถง v ทสนกวาความยาวของ Puv เรากสามารถสราง
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 177
วถใหมจาก i ถง j ซงประกอบดวย Piu P'uv และ Pvj ทสนกวาของ Pij ซงขดกบขอกาหนดทให Pij เปนวถสนสดจาก i ถง j แสดงวา Puv ตองเปนวถสนสดจาก u ถง v ปญหาวถสนสดจงมโครงสรางยอยเหมาะทสด
การซอนเหลอมของปญหายอยขอนาเสนอตวอยางเลกๆ เพอแสดงลกษณะของการซอนเหลอมของปญหายอย (overlapping subproblems) วาคออะไร ทกคนคงรจกความสมพนธเวยนเกดของจานวนฟโบนกชกนมาแลว
fn = fn–1 + fn–2 สาหรบ n � 2, f0 = 0, f1 = 1
ถาเราจะเขยนโปรแกรมเวยนเกดเพอหาคาของจานวนฟโบนกชตวท n ตามความสมพนธเวยนเกดขางบนน กจะได
01: Fib( n )02: {03: if n < 2 then return n04: fn1 = Fib( n–1 )05: fn2 = Fib( n–2 )06: fn = fn1 + fn207: return fn08: }
สมมตวาตองการหาคาของ f5 กเรยก Fib(5) ซงกอใหเกดลาดบการเรยก Fib แสดงไดดวยตนไมจาลองการเวยนเกดดงรปท 9–5 ลาดบการเรยก Fib กเปนลาดบการแวะผานตนไมแบบกอนลาดบ (pre–order traversal) ในตนไมน
Fib(3)
Fib(1)Fib(2)
Fib(1) Fib(0)
Fib(4)
Fib(3)
Fib(1)Fib(2)
Fib(1) Fib(0)
Fib(2)
Fib(1) Fib(0)
Fib(5)
รปท 9–5 ตนมแทนการเรยก recursion ของ Fib(5)
178 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
การเรยก Fib ซาๆ เปนเรองปกตเพราะเราเขยนแบบโปรแกรมเวยนเกด แตสงทผดปกตกคอเรยก Fib(n) ทมคาของ n เหมอนกบทเคยเรยกซาแลวซาอก เชนเรยก Fib(3) ซา 2 ครง เรยก Fib(2) ซา 3 ครง เปนตน กาหนดให t(n) แทนเวลาการทางานของ Fib จะไดวา
t(n) = t(n–1) + t(n–2) + �(1)
เปนแบบเชงเสน ไมเอกพนธ ทสมประสทธมคาคงตว (Inhomongeneous linear recurrence with constant coefficient) ประกอบดวยผลเฉลยเฉพาะคอ �(1) และผลเฉลยเอกพนธคอ �(�n) โดยท � = 1+ 5
2 หามาจากรากลกษณะตวใหญของสมการ r2–r–1 = 0 สรปไดวา t(n) = �(�n) มเวลาการทางานทโตแบบเลขชกาลง เหนไดชดวาคงจะใช Fib(n) ทเขยนนเพอหา n ขนาดใหญ กคงจะรอคาตอบไมไหว
เหตการณเชนนเกดขนกเนองมาจากการซอนเหลอมของปญหายอย เมอมการแบงปญหาใหญเปนปญหายอยๆ แตในตวปญหายอยๆ นนเมอถกแบงตอจะประกอบดวยปญหายอยๆ ทเหมอนกน สงผลใหตองแกปญหายอยๆ ทซอนเหลอมกนนซาแลวซาอก
ใหสงเกตวาเหตการณเชนนไมไดเกดกบตวอยางของปญหาทนาเสนอในบททแลว ซงเราใชการแบงแยกและเอาชนะ เชนการเรยงลาดบผสานกแบงแถวลาดบเปนครงซายกบครงขวา ซงแตละครงไมมขอมลซอนเหลอมกนเลย เหมอนกบการหาคจดใกลสดทเราแบงเปนสองครงไมซอนเหลอมกน หรอปญหาการคณเมทรกซทตองแบงเมทรกซออกเปนสเมทรกซยอย แตละเมทรกซยอยกไมซอนเหลอมกน เปนตน
วธแกปญหาการซอนเหลอมกนของปญหายอยนนมสองแนวทางคอ
� ใชกลวธแบงแยกและเอาชนะตามปกต แตมการจาคาตอบของปญหายอยทเคยแกไขมาแลว เมอพบปญหาทรคาตอบแลวจากผลในอดต กคนคาตอบไดเลยไมตองหาใหม ลกษณะเชนนจะเปนการทางานแบบบนลงลาง (top–down) เนองจากถาเราตองการแกปญหาใหญใด กแบงเปนปญหาเลกทจาเปนตองหาคาตอบ เมอไดคาตอบของปญหาเลกตางๆ ทตองการกคอยรวมคาตอบเหลานนเปนคาตอบของปญหาใหญนน
� ใชการจาคาตอบเหมอนกน แตจะใชวธการหาและจาคาตอบของปญหาเลกๆ ทงหมดทม จากนนหาคาตอบของปญหาทใหญขนทงหมด โดยนาคาตอบของปญหาทรและจามาใชสรางคาตอบของปญหาทใหญขน กระทาเชนนกบปญหาทใหญขนอกทงหมด จนกระทง
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 179
พบคาตอบของปญหาทตองการแกไข ลกษณะเชนนเปนการทางานแบบลางขนบน (bottom–up) วธนแหละทเรยกวากาหนดการพลวต
สองวธขางตนนแตกตางกนในแนวคดของการไดมาซงคาตอบของปญหา (จากบนลงลาง และจากลางขนบน) และขอใหสงเกตตรงทผมขดเสนใตไว กคอแบบแรกนนเราจะหาคาตอบของปญหาทเลกกวาทจาเปนเทานน ในขณะทแบบลางขนบนนนเราหาคาตอบของปญหาเลกๆ ทงหมด เพราะเราไมทราบกอนวาปญหาทใหญกวานนจะใชคาตอบของปญหาเลกตวใด (กเลยหามนใหหมดไปเลย)
มาดวาเราจะใชสองแนวคดนกบปญหาการหาจานวนฟโบนกชตวท n ไดอยางไร แบบแรกกจองตารางขนาดเทากบ n เพอจาคาของ fn ทเลกกวา เรมตนใส –1 ใหหมดเพอแสดงวายงไมรคาตอบของ fn ใดๆ เลย จากนนกเพมการตรวจสอบวารคาตอบหรอยง ตอนจะเรมหา ถารแลวกคนคาตอบเลย ถาไมรกหาไปตามปกตทเคยทามา เขยนเปนรหสเทยมไดดงน
01: FibMem( n )02: {03: allocate F[0..n–1]04: for (i=0 to n–1) F[i] = –105: return FibLookUp( n )06: }07:08: FibLookUp( n )09: {10: if n < 2 then return n11: if ( F[n] == –1 ) {12: fn1 = FibLookup( n–1 )13: fn2 = FibLookup( n–2 )14: F[n] = fn1 + fn215: }16: return F[n]17: }
วธนวเคราะหการทางานอาจดไมคอยชดเจนนกจากตวรหสเทยม แตจะเหนไดวาการหา fn = fn–1
+ fn–2 นนตอนหา fn–2 ตวหลงนนใชเวลาคงตว (เพราะเราหา fn–1 กอน ถารคาของ fn–1 กแสดงวาตองรคาของ fn–2 แลวแน) ดงนนเวลาการทางานเปน t(n) = t(n–1) + �(1) = �(n) บวกกบเวลาการจองและลางแถวลาดบ F ทไวจาคาตอบซงกเปน �(n) เชนกนรวมเวลาทงหมดเปน �(n)
ถาใชกาหนดการพลวตนนจะเหมอนกบ การเขยนจานวนฟโบนกชเรมตงแตตวท 0 ไปเรอยๆ ( 0, 1, 1, 2, 3, 5, 8, 13, 21, …) จนกวาจะพบตวทตองการ วธหาตวท k กเพยงนาสองตวกอนหนา (ทรคาแลวเนองจากเขยนไวแลว) มาบวกกน การเขยนกคอการจาคาตอบของปญหาทเลก
180 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
กวานนเอง แตสาหรบจานวนฟโบนกชนนความจรงแลวเราจาแคสองตวลาสดกพอ เขยนเปนรหสเทยมไดดงน
01: FibDP( n )02: {03: fn2 = 0; fn1 = 104: for (k=2 to n) {05: fn = fn1 + fn206: fn2 = fn107: fn1 = fn08: }09: return fn10: }
เหนไดชดจากรหสเทยมวาเวลาการทางานแปรตามจานวนวงวนทหมนอยในวงวนแบบ for จงใชเวลาทงสนเปน �(n)
ทงสองวธใชเวลาเทากน วธหลงงายกวามาก เปนวงวนธรรมดา ไมมการเรยกแบบเวยนเกด ไมตองจองแถวลาดบใหยงยาก จงเรวกวาในทางปฏบต แตอยางไรกตามสองวธนเรวกวา Fib(n)ทเขยนใหดครงแรกมหาศาล (อยาลมวาแบบนนใชเวลาเปน �(�n) แตสองแบบหลงเปนเชงเสน แลวยงมแบบอนทเรวกวานไหม ? ลองคดด บอกใหกอนวาม !!)
ใหสงเกตวาจากลกษณะเฉพาะในประเดนโครงสรางยอยเหมาะทสดนน มกนาไปสการเขยนความสมพนธเวยนเกดของคาของผลเฉลยเหมาะทสด โดยการแบงปญหาใหญเปนปญหายอยในลกษณะลยแบงทกแบบ ซงการแบงทกแบบนเองนาไปสการซอนเหลอมของปญหายอยทตองหาคาตอบ จงเปนปญหาทเหมาะมากกบการใชกาหนดการพลวต เนองจากเราประกนวาจะไดผลเฉลยเหมาะทสด (จากโครงสรางยอยเหมาะทสดของปญหา) อกทงเปนการแกปญหาไมซาแลวซาเลา เพราะใชวธจาคาตอบ จงเหนอกวาแบบแบงแยกและเอาชนะแบบปกต (จากการซอนเหลอมของปญหายอย) สงทจะประกนไดวากาหนดการพลวตจะทางานอยางมประสทธภาพ กเมอปญหายอยทตองหาคาตอบเตรยมไวมจานวนไมมาก (หรอจะพดวาจานวนทวานเปนฟงกชนพหนามของขนาดของปญหา) โดยทวไปเราจาคาตอบในตาราง (ถาทาได) เพราะสามารถเขยนอางองคาตอบไดงาย อกทงเวลาเขยนโปรแกรมแลวจะเปนวงวนแบบ for ทมดชนของวงวนเปนตวกาหนดชองในตาราง
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 181
ขนตอนการออกแบบดวยกาหนดการพลวตตามทไดอธบายมาแลววา โดยทวไปเราใชกาหนดการพลวตเพอแกไขปญหาการหาคาเหมาะทสดซงมโครงสรางยอยเหมาะทสด มการซอนเหลอมของปญหายอย และมจานวนปญหายอยทตองหาคาตอบไมมาก ดงนนเมอเราพบปญหาทคดวานาจะใชกาหนดการพลวตแลวไดผลนน มขนตอนการออกแบบดงน
� จาแนกโครงสรางยอยเหมาะทสดของปญหาในรายละเอยด วาจะนาผลเฉลยเหมาะทสดของปญหายอยมาประกอบกนอยางไรกน จงไดผลเฉลยเหมาะทสดของปญหาทใหญขน
� เขยนความสมพนธเวยนเกดของคาของผลเฉลยเหมาะทสดจากโครงสรางยอยเหมาะทสดทไดในขนตอนท 1
� หาวธจาคาตอบ (จะใชตารางกมต หรอตองใชโครงสรางขอมลแบบอน) เขยนอลกอรทมทใชคาตอบทจามา คานวณ และเตมคาตอบใหม โดยไลหาจากปญหาขนาดเลกๆ ไปสปญหาขนาดใหญทตองการ ตรงนใหระวงเรองกรณพเศษตอนอางองคาตอบเกาทจาไว เชนการอางองชองทออกนอกตาราง เปนตน อยาลมวาทเราหาไดในขนตอนนคอคาของผลเฉลยเหมาะทสด แตยงไมรผลเฉลยเหมาะทสด (เชนปญหา optimal binary search tree กรแคตนทนการคนทนอยสด แตยงไมรวาตนไมมลกษณะอยางไร)
� หาวธสรางผลเฉลยเหมาะทสด จากสงทไดคานวณกนมาในขนตอนท 3 โดยทวไปเราตองกลบไปเพมเตมขอมลบางอยางในอลกอรทมทเขยนไวในขนตอนท 3 เพอจาการตดสนใจ (นอกเหนอจากการจาคาตอบ) ระหวางการทางานในขนตอนท 3 เพอจะไดใชเปนขอมลในการสรางผลเฉลยเหมาะทสดได (เชนปญหา optimal binary search tree กคงตองจาดวยวา ทไดตนทนการคนทนอยสดนนเปนเพราะขอมลใดเปนรากของตนไมยอย เปนตน)
หวใจของกาหนดพลวตอยทขนตอนท 1 และ 2 สวนขนตอนท 3 และ 4 นนเปนเพยงการใชทกษะการเขยนโปรแกรมเทานน หวขอตอไปนจะนาเสนอตวอยางของปญหาทใชกาหนดการพลวตแกไขไดเปนอยางด (โดยใชตวเลข ��� และ� กากบขนตอนทกลาวไวขางตน)
182 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
ตนไมคนแบบทวภาคเหมาะทสดขอทวนเลกนอยวามขอมล { x1, x2, …, xn } ซง x1 < x2 < … < xn โดยท pi คอความนาจะเปนในการคน xi สงทตองการคอวธการจดเกบขอมลเหลานในตนไมคนแบบทวภาคซงมตนทนการคนนอยทสด เราไดแสดงใหเหนมาแลวในตวอยางท 9-4 วา ปญหาตนไมคนแบบทวภาคเหมาะทสดนมโครงสรางยอยเหมาะทสด คราวนเราจะมาหาตนไมคนแบบทวภาคเหมาะทสดกนจรงๆ กาหนดให C(i, j) คอตนทนการคนของตนไมคนแบบทวภาคเหมาะทสดซงเกบขอมล xi, xi+1, …, xj
ถาเรารมากอนวาตนทเหมาะทสดซงเกบขอมล xi, xi+1, …, xj ม xm เปนราก ดงนนตนไมยอยทางซายและทางขวากตองเกบขอมล xi, xi+1, …, xm–1 และ xm+1, xm+2, …, xj ตามลาดบ และมตนทนการคนนอยสดเปน C(i, m–1) และ C(m+1, j) ตามลาดบดวย ตนทนการคนของทงตนจงเทากบ
�
��
��
������
�����
���
�
�
���
�
���
��
�
�
��
�
���
jkik
jkmk
mkikm
pjmCmiC
pjmCpmiCp
),1()1,(
),1()1,(11
แตถาเราไมรวาตนทเหมาะทสดมขอมลตวใดเปนราก กไมยาก เพยงแตลยทดลองให xi, xi+1, ..., xj เปนรากแลวเลอกตวทไดตนทนการคนนอยสด ไดความสมพนธเวยนเกดของ C(i, j) ดงน
� � ���
��
�����
jkik
jmipjmCmiCjiC ),1()1,(min),( สาหรบ i � j
ใหสงเกตวาขนาดของปญหาในทนสามารถตความไดจากคาของ j – i + 1 ไดเลย เพราะสะทอนถงจานวนขอมลทเกบในตนไม ความสมพนธเวยนเกดขางบนนแสดงใหเหนวามการซอนเหลอมของปญหา รปท 9–6 แสดงตวอยางบางสวนของตนไมแทนการหาคา C(3, 6) จะมการเรยก C(5, 6) ซา (และมทอนอก) การคานวณคา C(i, j) โดยอาศยโปรแกรมเวยนเกดทเขยนตามความสมพนธเวยนเกดขางบนนแบบตรงๆ เลยจะใชเวลาเปน
� � )1()11()11()1( ������������ ��
j
immjtimtijt
�
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 183
(ใหสงเกตวาเราสามารถคานวณคาของ ��
jik kp สาหรบ 1 � i � j � n เกบไวในตารางกอน
ในเวลา �(n2) เพอจะทสามารถหยบใชไดในเวลาคงตว จงเปนทมาของพจน �(1) ทางขวาสดของความสมพนธเวยนเกดของ t ขางบนน)
C(3, 6)
C(3, 2) C(4, 6) C(3, 3) C(5, 6) C(3, 4) C(6, 6)
C(4, 3) C(5, 6) C(4, 4) C(6, 6)
C(3, 5) C(7, 6). . . . . . . . .
. . . . . . . . .
รปท 9–6 การซอนเหลอมของปญหาตนไมคนแบบทวภาคเหมาะทสด
ให i = 1, j = n จะได � � )1()()1()(1
������ ��
n
mmntmtnt ซงเทากบ �(3n) (อยากใหนกเรยน
ลงรายละเอยดการแก t(n) นกนเอง) ซงเปนเวลาการทางานทยอมรบไมได
ขาวดคอวาปญหายอยตางๆ มจานวนทงหมดแค �(n2) เทานน (เพราะตองการหาคา C(i, j)สาหรบ 1 � i � j � n) ดงนนสามารถใชกาหนดการพลวตหาคาของ C(1,n) โดยหาคาตอบของปญหาเลกๆ ไปยงคาตอบของปญหาใหญๆ ไดดงน
เรมดวยการหาคาตอบของปญหาทมขนาดเปน 1 ซงคอ C(1,1), C(2,2), …C(n,n) จากนนกหาคาตอบของปญหาทมขนาดเปน 2 ซงคอ C(1,2), C(2,3), …, C(n–1, n) หาและเตมคาตอบของปญหาทมขนาดใหญ ขนเรอยๆ จนในทสดไดคาตอบของ C(1,n) (รปท 9–7 แสดงลาดบในการเตมคาตอบในตาราง) การคานวณกอาศยความสมพนธเวยนเกดของ C(i, j) ทเขยนไวกอนหนาน เขยนเปนรหสเทยมไดดงน (จะมกรณจกจกทตองระวงกกรณท i > j ซงใหคาของ C(i, j) = 0 เราจะเขยนโปรแกรมไดสวยขนโดยไมตองไปกงวลกบกรณพเศษน ถาเราเตม C(i, i–1) สาหรบ i = 1, 2, …, n+1 ใหมคาเปนศนยกอนลวงหนา และใชตารางเสรมในการจาคาของ
��
jik kp สาหรบทกๆ i � j )
�
184 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
j
i
C(1,n)
รปท 9–7 ลาดบการเตมคาตอบในตาราง01: OptimalBST_DP( p[1..n] )02: {03: for (i=1 to n) PP[i,i] = p[i]04: for (i=1 to n–1)05: for (j=i+1 to n)06: PP[i,j] = PP[i,j–1] + p[j]07:08: for (i=1 to n) C[i,i–1] = 009: for (k=1 to n) {10: for (i=1 to n–k+1) {11: j = i+k–112: C[i,j] = �13: for (m = i to j) {14: newCost = C[i,m–1]+C[m+1,j] + PP[i,j]15: if ( newCost < C[i,j] ) C[i,j] = newCost16: }17: }18: }19: return C[1,n]20: }
OptimalBST_DP รบขอมลขาเขาคอรายการของความนาจะเปน (p[1],p[2],…,p[n]) ของขอมล n ตว (x1, x2, …, xn ) โดยท x1< x2< …<xn (เราไมตองสงรายการของขอมลมาให สงความนาจะเปนมากพอ แตตองสงลาดบตามทกาหนด) เมอ OptimalBST_DP ทางานเสรจจะคนคาของ C(1, n) มาใหทราบถงตนทนของการคนนอยทสด (แตไมไดคนลกษณะของตนไมคนแบบทวภาคเหมาะทสดมาให เดยวคอยนาเสนอวาจะตองทาอยางไร)
บรรทดท 3 ถง 6 จดเตรยมตาราง PP โดยท PP[i,j] = ��
jik kp บรรทดท 8 เตรยมกรณการ
อาง C(i, i–1) ใหมคาเปน 0ใหหมด (ใหสงเกตวาเราตองจอง C[1..n, 0..n] เพอการน) บรรทดท 9 ถง 18 เปนการเตมตาราง C โดยวงวนนอกสด k เปนตวแปรบอกขนาดของปญหา วงวนในตวแปร i และ j คอ i และ j ตวเดยวกบทเขยนใน C(i, j) วงวนในสดหมนวนหาตวนอยสดตามทกาหนดใหความสมพนธเวยนเกด หลงจากหมนจนพบตวนอยสดแลวกตองบวกเขาไปอก PP[i,j] = �
�
jik kp ตามสตร
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 185
แลวถาเราอยากรลกษณะของตนไมคนแบบทวภาคเหมาะทสดดวยละ จะทาอยางไร ใหสงเกตวาถาเรากาลงพจารณาหาคา C(i, j) สาหรบตนไมยอยทมขอมลตงแตตวท i ถง j C(i, j) หาไดจากการลองทกกรณทมรากเปน xi , xi+1 , …, xj ดวาแบบใดไดตนทนการคนทนอยสด ดงนนเรากตองจาไวดวยวาขอมลตวใดทเมอเปนรากแลวไดคาตนทนนอยสดน การจารากของตนไมยอยทกตน กทาใหสามารถสรางตนไมเหมาะทสดขนมาไดหลงจากหาคาของ C(1, n) ได เปนรหสเทยมในการสรางตนไมคนแบบทวภาคเหมาะทสดไดดงน
01: OptimalBST( x[1..n], p[1..n] )02: {03: r = OptimalBST_DP( p[1..n] )04: t = CreateTree( r[1..n, 1..n], x[1..n] )05: return t;06: }
01: OptimalBST_DP( p[1..n] )02: {03: for (i=1 to n) PP[i,i] = p[i]04: for (i=1 to n–1)05: for (j=i+1 to n)06: PP[i,j] = PP[i,j–1] + p[j]07:08: for (i=1 to n) C[i,i–1] = 009: for (k=1 to n) {10: for (i=1 to n–k+1) {11: j = i+k–112: C[i,j] = �13: for (m = i to j) {14: newCost = C[i,m–1]+C[m+1,j] + PP[i,j]15: if ( newCost < C[i,j] ) {16: C[i,j] = newCost17: r[i,j] = m18: }19: }20: }21: }22: return r23: }
01: CreateBST( r[1..n, 1..n], x[i, j] )02: {03: if ( i > j ) return null04: m = r[i,j]05: left = CreateBST( r[1..n, 1..n], x[i,m–1] );06: right = CreateBST( r[1..n, 1..n], x[m+1,j] );07: t = new BSTNode( x[m], left, right );08: return t;09: }
เราใชตาราง r ซงชองท r[i,j] จาขอมลทรากของตนไมยอยเหมาะทสดทเกบขอมล xi , xi+1 , …, xj ขนตอนการสรางตนไมคนแบบทวภาคเหมาะทสดประกอบดวยสองขนตอนยอย คอการ
�
186 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
ใชกาหนดการพลวตคานวณตนทนการคนทนอยสด (เหมอนททามา) แตคราวนมการจารากของตนไมยอยเหมาะทสดดวย ตามดวยการสรางตวตนไมเหมาะทสดจรงๆ การจารากของตนไมยอยเหมาะทสดกเพยงแตแทรกคาสง r[i,j] = m (บรรทดท 17 ของ OptimalBST_DP) ระหวางการคานวณหาคานอยสด และเนองจากคราวนเราตองการสรางตนไม กเลยคนตาราง rกลบไปแทน สวนขนตอนการสรางตนไมนน (CreateBST) กจะเปนโปรแกรมเวยนเกดรบตาราง r พรอมทงแถวลาดบของขอมลชวงทตองการสรางตนไมยอย (เวลาเรยกครงแรกใน OptimalBST กตองสง x[1..n] เพราะตองการสรางทงตน) บรรทดท 3 จดการกบกรณเลกสด คอไมมขอมลเลย กคนตนไมวางกลบไป แตถามขอมล กหยบรากจาก r[i,j] ทเคยจาไวใน OptimalBST_DP ซงเปนรากของตนไมยอยเหมาะทสดของขอมลในชวง xi , xi+1 , …, xj
มาสราง โดยการเรยกโปรแกรมเวยนเกดไปสรางตนไมยอยเหมาะทสดทางซาย (บรรทดท 5) ไปสรางตนไมยอยเหมาะทสดทางขวา (บรรทดท 6) จากนนนาตนไมยอยทงสองมาตอเปนลกของรากไดตนไมใหมเหมาะทสด (บรรทดท 7)
OptimalBST_DP มบรรทดท 15 เปนคาสงมาตรเวลา ถกใชงานเปนจานวนเทากบ
� �
� �
� �3
233
1
2
1
1
)1(
11
)1(
1
)1(
)(32
6)12)(1(
2)1)(1(
)1(
)1(
)()1(
n
nnn
nnnnnn
knk
knk
k
n
k
n
k
n
k
kn
i
n
k
kn
i
ki
im
��
��
�
�
��
�
����
��
���
�
��
��
�
�
��
�
���
���
���
�
�
� �� � �
�
�
�
��
��
��
�
��
�
CreateBST มบรรทดท 7 เปนคาสงมาตรเวลา ดใหดคาสงนกคอการตอกงของตนไมนนเอง เนองจากมขอมล n ตวแสดงวามโหนดภายใน n โหนดบวกกบ null ซงเปนโหนดภายนอกอก n+1 โหนด จากคณสมบตของตนไม ม 2n+1 โหนด กตองม (2n+1) – 1 = 2n กง จงเสยเวลาเปน �(n)
สรปวาการสรางตนไมคนแบบทวภาคเหมาะทสดใชเวลาเปน �(n3)
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 187
PP
C
r
คราวนมาดตวอยางกนดกวา ขอใชตวอยางจากตารางท 9–1 (ทเคยเขยนใหดในตวอยางท 9-4ในหนาท 173) ถาเราเรยงขอมลตามคาของขอมลจะไดแถวลาดบ x และ p ดงน
1 2 3 4 5 6 7x ชนจง ดบซ ทกเกอร ทงกวงก พ โพ ลาลา
p 0.22 0.18 0.20 0.05 0.25 0.02 0.08
ตาราง PP, C และ r ทไดจาก OptimalBST_DP แสดงดงน1 2 3 4 5 6 7
1 0.22 0.40 0.60 0.65 0.90 0.92 1.002 0.18 0.38 0.43 0.68 0.70 0.783 0.20 0.25 0.50 0.52 0.604 0.05 0.30 0.32 0.405 0.25 0.27 0.356 0.02 0.107 0.08
0 1 2 3 4 5 6 71 0 0.22 0.58 1.02 1.17 1.83 1.89 2.152 0 0.18 0.56 0.66 1.21 1.27 1.533 0 0.20 0.30 0.80 0.84 1.024 0 0.05 0.35 0.39 0.575 0 0.25 0.29 0.476 0 0.02 0.127 0 0.08
1 2 3 4 5 6 71 1 1 2 2 3 3 32 2 3 3 3 3 33 3 3 5 5 54 4 5 5 55 5 5 56 6 77 7
CreateBST สรางตนไมคนบบทวภาคเหมาะทสดไดดงรปรปท 9–8
ทกเกอร
ชนจง
ดบซ
พ
ทงกวงก ลาลา
โพ
รปท 9–8 ตนไมคนแบบทวภาคเหมาะทสด
188 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
ลาดบยอยเพมขนทยาวสดกาหนดให S = (z1, s2, …, sn) เปนลาดบของจานวนเตมทแตกตางกน n ตว จงหาลาดบยอย
),...,,(21 kiii sss ทยาวสด โดยท 1� i1< i2<…< ik � n และ
kiii sss ��� ...21
ในตวอยางท 9-5เราไดแสดงใหเหนวาปญหานมโครงสรางยอยเหมาะทสด ซงสามารถเขยนความสมพนธเวยนเกดของความยาวของลาดบยอยเพมขนยาวสดทจบดวย sk ไดดงน
� � 1),()(max)(1
���
��kj
kjssLTjLkL
โดยท LT(sj , sk) มคาเทา 1 เมอ sj < sk มฉะนนมคาเทากบ 0 จะไดวาความยาวของลาดบยอยเพมขนทยาวสดกคอลาดบทม L(k) มากสด
จากความสมพนธเวยนเกดขางบนนพบวา มการซอนเหลอมของปญหายอย โดยดไดจากตวอยางตนไมจาลองการเวยนเกด L(5) ในรปท 9–9 (กรณเลวสด) แตถาคดดดๆ ปญหายอยทแตกตางกนทงหมดนนมเพยง n ปญหายอยเทานน คอ L(1), L(2), …, L(n) จงเหนไดวาปญหาลาดบยอยเพมขนทยาวสดนนมโครงสรางยอยเหมาะทสด มการซอนเหลอมของปญหายอย และมจานวนปญหายอยทงหมดไมมาก จงเหมาะอยางยงทจะใชกาหนดการพลวตเพอหาผลเฉลยเหมาะทสด
L(4)
L(1) L(2) L(3)
L(1) L(1) L(2)
L(1)
L(1) L(2) L(3)
L(1) L(1) L(2)
L(1)
L(5)
รปท 9–9 ตนไมแสดงการซอนเหลอมกนของปญหายอยสาหรบปญหา L(5) กรณเลวสด
เราสามารถหาคาของ L(1), L(2), …, L(n) ไดดวยกาหนดการพลวต โดยการจาคาของ L ในตารางจานวน n ชอง โดยเรมหาคาตอบของ L(1) ตามดวย L(2), … ไปเรอยจนถง L(n) โดยอาศยความสมพนธเวยนเกด � � 1),()(max)(
1���
��kj
kjssLTjLkL เมอหาครบทกชองแลว ตวมาก
สดในตารางกคอความยาวของลาดบยอยเพมขนทยาวสดทตองการ (แตยงไมรนะวาลาดบยอยทวานคออะไร รแตความยาว) เขยนเปนรหสเทยมไดดงน
�
�
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 189
01: LIS_DP( s[1..n] )02: {03: for (k=1 to n) {04: L[k] = 005: for (j=1 to k–1)06: if ( s[j] < s[k] AND L[k] < L[j] ) L[k] = L[j]07: L[k] = L[k] + 108: }09: for (k=1 to n)10: m = max( m, L[k] )11: return m;12: }
แลวลาดบยอยเพมขนทยาวสดคออะไร ถาอยากรกตองจาคาของ j ระหวางการหามากสดในบรรทดท 6 ดวย แลวจาไวในอกตารางหนง จากนนสามารถสรางผลเฉลยเหมาะทสดไดจากคาทเกบในตารางน เขยนเปนรหสเทยมไดดงน
01: LIS_DP( s[1..n] )02: {03: for (k=1 to n) {04: L[k] = 005: prev[k] = 006: for (j=1 to k–1)07: if ( s[j] < s[k] AND L[k] < L[j] ) {08: L[k] = L[j]09: prev[k] = j10: }11: L[k] = L[k] + 112: }13: for (k=1 to n)14: m = max( m, L[k] )15: i = 016: while( m � 0 ) {17: tmp[++i] = s[m]18: m = prev[m]19: }20: return Reverse( tmp[1..i] )21: }
บรรทดท 3 ถง 14 คลายกบทไดเขยนมา ตางกนตรงทเราเพมบรรทดท 9 เพอจาตาแหนงทไดคามากสดไวในตาราง prev ตความไดวา prev[k] คอตาแหนงกอนหนาตวท k ในลาดบยอยเพมขนทยาวสดทไดพบมา ถา prev[k] มคาเปน 0 หมายความวาไมมตวกอนหนา บรรทดท 15 ถง 20 ทาหนาทวงถอยหลงในตาราง s เพอสรางลาดบยอยเพมขนทยาวสด (แบบกลบลาดบ) โดยวงถอยหลงตามคาในตาราง prev เรมทชอง m หยบ s[m] ไปตอทายแถวลาดบ tmp จากนนเปลยนคา m = prev[m] กระทาเชนนไปเรอยๆ จนกระทงพบตาแหนง m=0 เปนอนสนสดลาดบยอย นาขอมลใน tmp ไปกลบลาดบขอมลไดเปนลาดบยอยเพมขนทยาวสดทตองการ
บรรทดท 7 เปนคาสงมาตรเวลาของอลกอรทมขางบนน ดงนนใชเวลาการทางานเปน
�
190 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
� �2
11
1
1)1()1( nk
n
k
n
k
k
i����� ���
��
�
�
มาดตวอยางการหาลาดบยอยเพมขนทยาวสดของ ( 2, 5 1, 0, 7, 3, 4, 6, 99, 10, 8 ) จะไดตาราง L และ prev ดงน (ไดลาดบยอยเพมขนทยาวสดเปน 2, 3, 4, 6, 99 )
1 2 3 4 5 6 7 8 9 10 11s 2 5 1 0 7 3 4 6 99 10 8
L 1 2 1 1 3 2 3 4 5 5 5
prev 0 1 0 0 2 1 6 7 8 8 8
วถสนสดแบบแหลงตนทางเดยวเราไดนาเสนอในตวอยางท 9-6 มาแลววาปญหาวถสนสดในกราฟนนมโครงสรางยอยเหมาะทสด นนคอวถยอยใดๆ บนวถสนสดยอมตองสนสดดวย จากความรตรงนเราจะมาเขยนความสมพนธเวยนเกดของความยาวของวถสนสดใหดกน
สมมตวาเราตองการหาวถสนสดจาก s ถง t ในกราฟ G กาหนดให du คอความยาวของวถสนสดในกราฟ G จากจด s ถง u (หมายความวาวถสนสดทตองการจาก s ถง t มความยาว dt ) ดวยโครงสรางยอยเหมาะทสดบอกเราวา
� �kukuadjk
u wdd ��
� )(min
(โดยท wku คอความยาวของเสนเชอม (k, u)) จากความสมพนธเวยนเกดขางบนน ขอใหนกเรยนลองคดสกครซวาจะเปลยนเปนรหสเทยมหรอโปรแกรมไดอยางไร
ปญหาของความสมพนธเวยนเกดขางบนนอยตรงทวา การดท du หรอ dk บอกเราไมไดเลยวาขนาดของปญหาเปนเทาไร เรารโดยนยวา k นาจะใกลจด s มากกวา u เพราะตองอาศยเสนเชอม (k, u) อกเสนจาก k ถง u แตสงทเขยนนนไมไดสะทอนถงขนาด จงเกดปญหาถาใชกาหนดการพลวตเปนเครอมอแกไข (อยางไรกตามความสมพนธเวยนเกดนกยงมประโยชนเมอเราใชกลวธแกไขปญหาแบบอนทจะกลาวในบทตอไป)
กาหนดให du(m) คอความยาวของวถสนสดจาก s ถง u ทใชเสนเชอมเปนจานวนไมเกน m เสน การกาหนดในลกษณะนจะเหนไดวา เมอ m=0 นนเราทราบคาตอบทนท นนคอถา u = s แลว
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 191
du(0) = 0 มฉะนน du(0) = � และคาตอบทเราตองการกคอ du(v–1) เพราะวาวถระหวางคจดใดๆ ในกราฟซงม v จด ยอมใชเสนเชอมไมเกน v–1 เสน ดวยการกาหนดนยามของความยาวของวถสนสดในลกษณะน ทาใหเราเหนขนาดของปญหา และสามารถหาคาตอบของปญหาใหญไดจากคาตอบของปญหายอยดงความสมพนธเวยนเกดขางลางน
� �
� �kukvk
kukvk
uu
wmd
wmdmdmd
���
��
���
����
��
��
)1(min
)1(min),1(min)(
1
1
หมายความวาวถสนสดจาก s ถง u ทใชไมเกน m เสน อาจมาจากวถสนสดจาก s ถง u ทใชไมเกน m–1 หรอมาจากวถสนสดจาก s ถงจด k อนทตอกบ u ทใชไมเกน m–1 เสน บวกกบอกเสนคอเสน (k, u) (เรายบเปนบรรทดลางไดเพราะ wuu = 0)
เราสามารถเกบคาของ dij(m) ตางๆ ทงหมดไวในเวกเตอรขนาด 1�n ตงชอใหวา Lm[] กาหนดการพลวตบอกเราวาใหเรมหาจาก L0[], L1[], … จนถง Lm–1[] เนองจากการหาคาของ Lm[] นนอางองเฉพาะ Lm–1[] เทานน ดงนนเรามทเกบแคสองเวกเตอรกพอ แสดงไดดวยรหสเทยมขางลางน (โดยท L'[] แทน Lm[] และ L[] แทน Lm–1[] )
01: ShortestPath_DP( G=(V,E,w), s )02: {03: for (k=1 to v) L[k] = �04: L[s] = 005: for (m=1 to v–1) {06: for (u=1 to v) {07: L'[u] = L[u]08: for (k=1 to v)09: L'[u] = min( L'[u], L[k] + w(k,u) )10: }11: for (u=1 to v) L[u] = L'[u]12: }13: return L[1..n]14: }
ตวแปร m, u, และ k ทใชในรหสเทยมเปนชอเดยวกบทเขยนบรรยายความสมพนธเวยนเกดของ � �kuk
vku wmdmd ���
��
)1(min)(1
บรรทดท 8 ถง 9 นนเขยนตรงๆ จากตวความสมพนธ
เวยนเกด วงวนทบรรทดท 6 เปนการคานวณสาหรบทกๆ ตว (ทกๆ จด)ในเวกเตอร และวงวนนอกสดทบรรทด 5 เปนการคานวณสาหรบทกๆ ขนาดของ m บรรทดท 11 เปนการทาสาเนาเวกเตอร เพราะเราให L'[] แทน Lm[] และ L[] แทน Lm–1[] บรรทดสดทายคนผลลพธทงเวกเตอร ซงแทนความยาวของวถสนสดจาก s ถงทกๆ จดในกราฟ (จากขอกาหนดตอนแรกเรา
�
�
192 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
ตองการแคความยาวของวถสนสดจาก s ถง t แตกาหนดการพลวตแถมความยาวของวถสนสดถงจดอนๆ ทกจดใหดวย เราเรยกปญหาแบบนวา single–source shortest paths)
ทไดทามานนเราทราบเฉพาะความยาวของวถสนสด แตถาอยากรวถดวย กตองคอยจาวาทได � �kuk
vku wmdmd ���
��
)1(min)(1
นนไดมาจากคา k ใด ทไดคานอยสด k ทไดคานอยสดวาไป
แลวกคอจดกอนจด u ในวถสนสด จะขอจองอกแถวลาดบ �[1..v] โดยท �[u] เกบจดกอนหนา u ในวถสนสดเรมจาก s ถง u โดยม �[s] = null เขยนไดเปนรหสเทยมดงน (เพมการจาจดกอนหนาทวานในบรรทดท 4 และ11)
01: ShortestPath_DP( G=(V,E,w), s )02: {03: for (k=1 to v) L[k] = �04: L[s] = 0, �[s] = null05: for (m=1 to v–1) {06: for (u=1 to v) {07: L'[u] = L[u]08: for (k=1 to v) {09: if ( L[k]+w(k,u) < L'[u] ) {00: L'[u] = L[k] + w(k,u)11: �[u] = k12: }13: }14: for (u=1 to v) L[u] = L'[u]15: }16: return �[1..v]17: }
อลกอรทมขางบนนทางานในเวลาเปน �(v3) เพราะมวงวนแบบ for ทวนตงแต 1 ถง v ซอนกนสามวง (วงนอกถงแค v–1 กไมมผลใดๆ เชงเสนกากบ) 1
1
52 3
54
6-2
8
79
7-3
-42
รปท 9–10 ตวอยางการหาวถสนสดจากจด 1 ถงทกๆ จด
1 คงตองหมายเหตตรงนไวหนอยวา การหาเดนสนสดนนมวธอนทมประสทธภาพมากกวานมาก ซงจะไดนาเสนอในบทถดไป
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 193
มาดตวอยางการหาวถสนสดจากจด 1 ถงทกๆ จดในกราฟ G ในรปท 9–10 จะไดคาของเวกเตอรของ L0[], L1[], L2[], L3[] และ L4[] พรอมทงคาของแถวลาดบ � ตางๆ ดงน
1 2 3 4 5 1 2 3 4 5L0[ ] 0 � � � � �[ ] 0L1[ ] 0 6 � 7 � �[ ] 0 1 1L2[ ] 0 6 4 7 2 �[ ] 0 1 4 1 2L3[ ] 0 2 4 7 2 �[ ] 0 3 4 1 2L4[ ] 0 2 4 7 –2 �[ ] 0 3 4 1 2
วถสนสดแบบทกคหวขอทแลวเราไดนาเสนอการหาวถสนสดจากจดๆ หนงในกราฟไปยงจดอนๆ ดวยกาหนดการพลวต ไดอลกอรทมทใชเวลาเปน �(v3) โดยท v เปนจานวนจดในกราฟ รสกวาเปนอลกอรทมทใชเวลามากไปหนอย แตถาเราขยายความตองการของปญหาเปนการหาวถสนสดระหวางทกคจดในกราฟเลย จะพบวาการใชกาหนดการพลวตจะทางานคมหนอย เพราะปญหายอยทตองแกไขนน จะถกใชในการคาตอบของปญหาทใหญกวาไดมาก
จากเดมในหวขอทแลวทเราเคยนยามให du(m) คอความยาวของวถสนสดจาก s ถง u ทใชเสนเชอมเปนจานวนไมเกน m เสน คราวนขอกาหนดให dij(m) คอความยาวของวถสนสดจาก i ถง j ทใชเสนเชอมเปนจานวนไมเกน m เสน เมอ m=0 นนเราทราบคาตอบทนท นนคอ ถา i = jแลว dij(0) = 0 มฉะนน dij(0) = � และในทานองเดยวกบทนาเสนอในหวขอทแลว คาตอบทเราตองการกคอ dst(v–1) และสามารถหาคาตอบของปญหาใหญไดจากคาตอบของปญหายอยดงความสมพนธเวยนเกดขางลางน
� �
� �kjikvk
kjikvk
ijij
wmd
wmdmdmd
���
��
���
����
��
��
)1(min
)1(min),1(min)(
1
1
หมายความวาวถสนสดจาก i ถง j ทใชไมเกน m เสน อาจมาจากวถสนสดจาก i ถง j ทใชไมเกน m–1 หรอมาจากวถสนสดจาก i ถงจดทตอกบ j ทใชไมเกน m–1 เสน บวกกบอกเสนทตอจากจดนนถง j (เรายบเปนบรรทดลางไดจากการท djj(0) = 0)
เราสามารถเกบคาของ dij(m) ตางๆ ทงหมดไวในเมทรกซขนาด n�n ตงชอใหวา Dm กาหนดการ
พลวตบอกเราวาใหเรมหาจาก D1, D2, … จนถง Dv–1 กจะไดคาตอบ (เหตทเราเรมท D1 กเพราะ
194 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
วา D1 แทจรงแลวกคอเมทรกซประชดทบรรยายเกราฟ G นนเอง) ซงสามารถเขยนรหสเทยมไดในทานองเดยวกบทแสดงในหวขอทแลว แตตองเพมอกวงวนหนง เพราะเราตองหาทกๆ คาในเมทรกซ (แทนทจะเปนเวกเตอรททาในหวขอทแลว ใชเวลาทงสนเปน �(v4) (จะไมเขยนรหสเทยมใหดหรอก เพราะคลายกบทไดนาเสนอในหวขอทแลวมาก ขอใหนกเรยนไปเตมตอกนด)
อลกอรทมการหาวถสนสดระหวางทกคจดทตองการนาเสนอจรงในหวขอน ใชเวลา �(v3) และใชกาหนดการพลวตเชนกน แตมนยามการกาหนดขนาดของปญหาทตางกน และ (แนนอน) มความสมพนธเวยนเกดของการหาความยาวของวถสนสดของปญหาใหญจากคาตอบของปญหายอยทตางกน อลกอรทมทจะกลาวตอไปนเรยกวาอลกอรทมของฟอยด–วอรแชล (Floyd–Warchall algorithm)
ทผานมาเรากาหนดขนาดของปญหาวถสนสดตามจานวนเสนชอมมากทสดทใชประกอบกนเปนวถ คราวนเรานยามขนาดของปญหาวถสนสดตามจานวนจดทไดพจารณาใหเปนจดระหวางทาง กาหนดให dij(k) คอ ความยาวของวถสนสดจากจด i ไปยง j เมอไดพจารณาใหจด 1, 2, …, k เปนจดระหวางทางแลว ดงนนคาตอบทตองการกคอ dij(v) คอเมอไดพจารณาใหทกๆ จดในกราฟมสทธเปนจดระหวางทางแลว ในกรณเลกสด (คอกรณทวถสนสดระหวางจดทไมยอมใหผานจดอนเลย) จะได dij(0) = wij เราสามารถเขยนความสมพนธเวยนเกดของ dij(k) ไดดงน
dij(k) = min( dij(k–1), dik(k–1)+dkj(k–1) )
ความเทหของความสมพนธเวยนเกดขางบนนมนอยตรงท เมอเราพจารณาขนาดของปญหาทใหญขน นนคอพจารณาใหจด k เปนจดผานจดใหมไดในวถสนสดจาก i ไป j นน เราสามารถหาคาตอบไดเวลาคงตวตอคจด เพราะมอยแคสองกรณเทานน คอกรณทจด k จดใหมนไมเปนจดผานของวถทตองการ ซงไดผลเหมอนตอนไมพจารณา k (คอ dij(k–1)) หรอกรณทจด k เปนจดผานของวถสนสด โครงสรางยอยเหมาะทสดของปญหาวถสนสดบอกวาวถจากจด i ถง kและจาก k ถง j กตองสนสดดวยมความยาวเปน dik(k–1)+dkj(k–1)
เราสามารถเกบคาของ dij(k) ตางๆ ทงหมดไวในเมทรกซขนาด n�n ตงชอใหวา Dk เนองจาก
การหาคาของ Dk นนอางองเฉพาะ Dk–1 เทานน ดงนนเรามทเกบแคสองเมทรกซ (โดยท D'[]
แทน Dk และ D[] แทน Dk–1 ) อลกอรทมของฟอยด–วอรแชลเขยนไดดวยรหสเทยมทใชเวลา
�(v3) ขางลางน (ขอแทนกราฟ G ดวยเมทรกซประชด W[1..v, 1..v] )
�
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 195
01: AllPairsShortestPath_DP(W[1..v, 1..v] )02: {03: D[1..v, 1..v] = W[1..v, 1..v]04: for (k=1 to v–1) {05: for (i=1 to v) {06: for (j=1 to v)07: D'[i,j] = min( D[i,j], D[i,k]+D(k,j) )08: }09: D[1..v,1..v]] = D'[1..v,1..v]10: }11: return D[1..n]12: }
ผลทไดจากอลกอรทมขางบนน คอความยาวของวถสนสดระหวางทกคจดในกราฟ ถาตองการรายละเอยดของวถกตองมการจาวาคา k เปนจดผานของวถใดบาง ซงตองเพมเตมรหสคาสงเลกนอยในอลกอรทมขางบนน จะขอละไว ไมลงในรายละเอยด
1
52 3
54
6-2
8
79
7-3
-42
รปท 9–11 ตวอยางการหาวถสนสดระหวางทกคจดในกราฟ
มาดตวอยางการหาความยาวของวถสนสดระหวางทกคจดในกราฟ G ในรปท 9–11 จะไดคาของเมทรกซของ D0, D1, D2, D3, D4 และ D5 ดงน
0 6 � 7 � 0 6 � 7 �
� 0 5 8 –4 � 0 5 8 –4� –2 0 � � � –2 0 � �
� � –3 0 9 � � –3 0 9D0 =
2 � 7 � 0
D1 =
2 8 7 9 0
0 6 11 7 2 0 6 11 7 2� 0 5 8 –4 � 0 5 8 –4� –2 0 6 –6 � –2 0 6 –6� � –3 0 9 � –5 –3 0 –9
D2 =
2 8 7 9 0
D3 =
2 5 7 9 0
0 2 4 7 –2 0 2 4 7 –2� 0 5 8 –4 –2 0 2 5 –4� –2 0 6 –6 –4 –2 0 3 –6� –5 –3 0 –9 –7 –5 –3 0 –9
D4 =
2 4 6 9 0
D5 =
2 4 6 9 0
196 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
เนองจากกราฟในรปท 9–11 กคอกราฟเดยวกบทใชเปนตวอยางในหวขอทแลวในรปท 9–10ดงนนผลทไดในแถวแรกของเมทรกซ D5 ซงคอความยาวของวถสนสดจากจด 1 ถงจดอนๆ ในกราฟ กตองตรงกบเวกเตอรผลลพธทไดในหวขอทแลว
ลาดบยอยรวมยาวสดกอนจะเขาถงตวปญหาขอนยามอะไรบางอยางกอน กาหนดให X = (x1, x2, …, xm) และ Z = (z1, z2, …, zk) เปนลาดบของขอมลสองลาดบ เราเรยก Z วาเปนลาดบยอย (subsequence) ของ X กเมอมลาดบของจานวนเตม 1� i1< i2<…< ik � m ททาให ji zx
j� สาหรบ j = 1, 2, …, k
หรอจะพดงายๆ กคอวาลาดบยอยของ X กคอลาดบขอมลทเหมอน X แตม (หรอจะไมมกได) ขอมลบางตวใน X หายไป เชน X = (S, O, M, C, H, A, I ) ม (S, H, A, I), (O, M), (C, H, A) และอนๆ อกมากมายเปนลาดบยอย
เราเรยก Z วาเปนลาดบยอยรวม (common subsequence) ของ X และ Y กเมอ Z เปนลาดบยอยของทง X และ Y เชน (S, O, M, C, H, A, I) และ (C, H, U, A, N) มลาดบยอยคอ (C), (H), (A), (C, H), (C, A), (H, A) และ (C, H, A) เปนตน
ปญหาทเราจะมานาเสนอกนในหวขอนกคอปญหาลาดบยอมรวมยาวสด (longest common subsequence) ซงกคอการหาลาดบยอยรวมทยาวสดของสองลาดบทกาหนดให (เรยกสนๆ วา LCS) โดยสงทตองการหาคอ LCS ของ X = (x1, x2, …, xm) และ Y = (y1, y2, …, yn)
เราหา LCS ของ X และ Y ไดดวยวธลย (แตชามาก) โดยแจกแจงลาดบยอยของทง X และ Y และจบคลาดบยอยรวมตวทยาวสด X มลาดบยอยทงหมด 2m และ Y มลาดบยอยทงหมด 2n
เหนชดๆ วาใชเวลาเปนฟงกชนเลขชกาลง ซงยอมรบไมได
ขาวดกคอวา LCS เปนปญหาทมโครงสรางยอยเหมาะทสด กอนอนขอนยามให Xi คอลาดบยอย (x1, x2, …, xi) และให Z = (z1, z2, …, zk) เปน LCS ของ X และ Y (ขอเขยนวา LCS(X, Y)) โครงสรางยอยเหมาะทสดของ LCS แสดงไดดวยการแยกพจารณาเปนสองกรณดงน
1. ถา xm = yn จะไดวา zk = xm และ Zk–1 = LCS (Xm–1 , Yn–1 )
2. ถา xm � yn มสองกรณยอยตองพจารณาคอ
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 197
� ถา zk � xm จะไดวา Z = LCS(Xm–1 , Y )
� ถา zk � ym จะไดวา Z = LCS(X , Yn–1 )
(เราสามารถใชขอขดแยงในการพสจนสองกรณขางนวาเปนจรง โดยจะไมขอแสดงใหดในทน) โครงสรางยอยเหมาะทสดขางบนนบอกเราวา ถาตวทายของ X และ Y เหมอนกน LCS(X, Y) กคอ LCS(Xm–1 , Yn–1) ตอทายดวย xm แตถาตวทายตางกน LCS(X, Y) กคอ LCS(Xm–1 , Y ) หรอ LCS(X , Yn–1 ) แลวแตวาตวไหนยาวกวา กาหนดให L(i, j) คอความยาวของ LCS( Xi , Yj ) เราสามารถเขยนความสมพนธเวยนเกดของ L(i, j) ไดดงน
� ���
��
�
���
����
��
�
ji
jiyxifjiLjiLyxifjiL
joriifjiL
)1,(),,1(max)1,1(1
000),(
คงจะเหนการซอนเหลอมของปญหายอย ตรงกรณสดทายของจากความสมพนธเวยนเกดน ในขณะทมจานวนปญหายอยทงหมดเพยง �(mn) เทานน เนองจาก 0 � i � m และ 0 � j � n แสดงวานาใชกาหนดพลวตหาคาตอบ
เราอาศยตารางสองมต L[0..m, 0..n] ในการจาคาตอบ L(i, j) ตางๆ การเตมตารางดวยกาหนดการพลวตนน ตองเตมคาตอบของปญหาเลกกอน แลวคอยขยายขนาดไปเรอยๆ L(i, j)หาไดจาก L(i–1, j–1), L(i, j–1) และ L(i–1, j) ดงนนลกษณะการเตมตารางจะเตมจากซายไปขวาและจากบนลงลางดงแสดงในรปท 9–12 เขยนเปนรหสเทยมไดดงน
L[i,j]
L[i-1,j]L[i-1,j-1]
L[i,j-1]
n สดมภ
m แถว
L(m,n)(ก) (ข)รปท 9–12 การอางองและลาดบการเตมคาตอบในตาราง
�
�
198 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
01: LCS_DP( X[1..m], Y[1..n] )02: {03: for (i=1 to m) L[i,0] = 004: for (j=1 to n) L(0,j] = 005: for (i=1 to m)06: for (j=1 to n)07: if ( X[i] == Y[j] )08: L[i,j] = 1 + L[i–1,j–1]09: else10: L[i,j] = max( L[i,j–1], L[i–1, j])11: return L12: }
เพอใหกระชบ เราเรมดวยการเตมกรณ i = 0, และ j = 0 ใหเปนศนยทแถวบน และสดมภซายกอน (บรรทดท 3 และ 4) จากนนจะเรมเตมจากซายไปขวา จากบนลงลาง ดวยวงวนแบบ for สองวงซอนกน เพมเตมคาของ L[i,j] ตามความสมพนธเวยนเกดของ L(i, j)
หลงจากเตมเสรจจะไดความยาวของ LCS(X, Y) เกบไวใน L[m,n] แตยงไมทราบตว LCS ถาอยากรกตองจาไวดวยวา ทบรรทดท 10 นน ตอนทเราไดคา max มานนไดมาจากชองใด จะไดสามารถหาคา LCS ได ซงสามารถเพมเตมไดเปนรหสเทยมขางลางน
01: LCS_DP( X[1..m], Y[1..n] )02: {03: for (i=1 to m) L[i,0] = 004: for (j=1 to n) L(0,j] = 005: for (i=1 to m)06: for (j=1 to n)07: if ( X[i] == Y[j] ) {08: L[i,j] = 1 + L[i–1,j–1]09: prev[i,j] = "�"10: } else {11: L[i,j] = max( L[i,j–1], L[i–1,j] )12: prev[i] = ( L[i–1,j] > L[i,j–1] ) ? "�" : "�"13: }14:15: k = 0; i = m; j = n16: while( i > 0 AND j > 0 ) {17: if ( prev[i,j] == "�" ) tmp[++i] = x[i]18: if ( prev[i,j] == "�" ) { i = i–1; j = j–1 }19: if ( prev[i,j] == "�" ) j = j–120: if ( prev[i,j] == "�" ) i = i–121: }22: return Reverse( tmp[1..i] )23: }
เราเพมบรรทดท 9 และ 12 เพอจาทศทมาของ L[i,j]ตางๆ ไวในตาราง prev ซงมดวยกนสามกรณคอ �, � หรอ �วามาจาก L[i–1,j–1], L[i,j–1], หรอ L[i–1,j] ตามลาดบ สวนบรรทดท 15 ถง 22 เปนการวงตามทศทมาของ L[m,n] โดยดจากตาราง prev เมอใดท prev[i,j] มทศเปน � แสดงวา xi = yj นนหมายความวาพบตวรวมของทงสอง
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 199
ลาดบ จงนาไปเกบไวในแถวลาดบ tmp (บรรทดท 17) เมอวงตามทศจนชนขอบตาราง กเปนอนสนสดการหาลาดบยอยรวมยาวสด ซงเกบแบบกลบลาดบในแถวลาดบ tmp แสดงวา LCS(X, Y ) กคอลาดบทไดจากการกลบลาดบขอมลใน tmp (บรรทดท 22)
เวลาการทางานถกาหนดโดยวงวน for สองวงซอนกน (บรรทดท 5 ถง 13) ใชเวลาเปน �(mn)
สาหรบประเดนทางดานเนอทนน เหนไดชดวาเราตองใชสองตาราง ใชเนอทเปน �(mn) ดวย อยากใหนกเรยนลองไปคดกนเองวา ความจรงแลว เราไมจาเปนตองใชตาราง prev กสามารถวงยอนหา LCS(X, Y) เหมอนกน และถาเราอยากรแคความยาวของ LCS(X, Y) เราสามารถหาคาไดโดยใชเนอทเพยง �(n) กพอ
มาดตวอยางกนดกวา กาหนดให X = (ส, ม, ช, า, ย, ส, บ, า, ย, ใ, จ) และ Y = ( ส, ม, ห, ม, า, ย,ป, ว, ด, ก, า, ย ) สามารถหา LCS( X, Y ) ไดตาราง L และ prev (เขยนรวมกน) ดงน
ส ม ช า ย ส บ า ย ใ จ0 0 0 0 0 0 0 0 0 0 0 0
ส 0 1 1 1 1 1 1 1 1 1 1 1ม 0 1 2 2 2 2 2 2 2 2 2 2ห 0 1 2 2 2 2 2 2 2 2 2 2ม 0 1 2 2 2 2 2 2 2 2 2 2า 0 1 2 2 3 3 3 3 3 3 3 3ย 0 1 2 2 3 4 4 4 4 4 4 4ป 0 1 2 2 3 4 4 4 4 4 4 4ว 0 1 2 2 3 4 4 4 4 4 4 4ด 0 1 2 2 3 4 4 4 4 4 4 4ก 0 1 2 2 3 4 4 4 4 4 4 4า 0 1 2 2 3 4 4 4 5 5 5 5ย 0 1 2 2 3 4 4 4 5 6 6 6
ลกศรสดาในตารางคอทศทางเดนจากชอง (m, n) จนชนขอบ เมอพบลกศรเฉยงทใด ตว xm (ซงเทากบ ym) ทตรงกบชองนนจะเปนสวนหนงของลาดบยอยรวมยาวสด จากตวอยางขางบนน เราได (ส, ม, า, ย, า, ย) เปนลาดบยอยรวมยาวสด
200 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
การคณลกโซเมทรกซกาหนดใหมรายการของเมทรกซ (หรอเรยกวาลกโซเมทรกซ – matrix–chain) A1 , A2 , …, An
ทเราตองการหาผลคณ ปญหามอยวาเราจะจดลาดบการคณเมทรกซ (หรอจะพดอกอยางหนงกคอ จะใสวงเลบเพอระบลาดบกอนหลงของการคณเมทรกซ) อยางไรด จงจะสามารถหาผลคณของลกโซเมทรกซไดรวดเรว
ถาเราตองการหาผลคณของเมทรกซ A1 ทมขนาด p0�p1 กบเมทรกซ A2 ทมขนาด p1�p2 จะพบวาเวลาในการคณเมทรกซนจะเปน �(p0p1p2) เนองจากมการคณสมาชก (แบบสเกลาร – scalar multiplication) ของเมทรกซทงสองเปนจานวน p0p1p2 ครง และมการบวกอกเปนจานวนหนง(ซงเปนจานวนนอยกวา p0p1p2 ) ดงนนเวลาในการคณเมทรกซ จงถกกาหนดโดยจานวนการคณแบบสเกลาร
สมมตวาเราจะหาผลคณของ A1A2A3 โดยท A1 A2 และ A3 นมขนาด 10�100 100�5 และ 5�50 ตามลาดบ มวธการจดลาดบการคณเมทรกซลกโซนได 2 แบบดงน
� ((A1 A2) A3) วธนเรมดวยการหาผลคณของ (A1 A2) กอน มการคณแบบสเกลารเปนจานวน 10 � 100 � 5 = 5000 ครง ไดเมทรกซขนาด 10�5 จากนนนาผลทไดนไปคณกบ A3 มการคณแบบสเกลารอกจานวน 10 � 5 � 50 = 2500 ครง รวมจานวนการคณแบบสเกลารทงหมดเทากบ 5000+2500 = 7500 ครง กวาจะไดผลลพธ
� (A1 (A2 A3)) วธนเรมดวยการหาผลคณของ (A2 A3) กอน มการคณแบบสเกลารเปนจานวน 100 � 5 � 50 = 25000 ครง ไดเมทรกซขนาด 100�50 จากนนนาผลทไดนไปคณกบ A1 มการคณแบบสเกลารอกจานวน 10 � 100 � 50 = 50000 ครง รวมจานวนการคณแบบสเกลารทงหมดเทากบ 25000+50000 = 75000 ครง กวาจะไดผลลพธ
เหนไดชดเลยวา ลาดบการคณแบบแรกเรวกวาแบบหลง 10 เทา !!! ดงนนปญหาการคณลกโซเมทรกซ กคอการหาวธการใสวงเลบเพอระบลาดบการคณ เพอใหไดวธซงมจานวนการคณแบบสเกลารนอยครงทสด
กอนอนขอกาหนดสญลกษณตางๆ ทจะใชในการนาเสนอดงน
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 201
� A1 A2 … An คอลกโซเมทรกซของปญหา� Ai มขนาดเปน pi–1�pi
� Ai..j แทนผลลพธทไดจากการคณลกโซเมทรกซ Ai Ai+1 … Aj ดงนน� Ai..j ตองมขนาดเปน pi–1�pj
� การคณ (Ai..j) (Aj+1..k) ตองใชจานวนการคณแบบสเกลาร pi–1 pj pk ครง� m(i, j) คอจานวนการคณแบบสเกลารทนอยสดในการคณลกโซเมทรกซ Ai Ai+1 … Aj
เราจะเรมดวยการแสดงใหเหนวาปญหานมโครงสรางยอยเหมาะทสด การใสวงเลบกเหมอนการแบงลกโซออกเปนสองสวน ตวอยางเชน (A1A2…Ak)(Ak+1…An) แบงลกโซออกเปนสองสวนทไมเกยวกน การใสวงเลบ (A1A2…Ak)(Ak+1…An) จะเหมาะทสดได กตอเมอเราตองใสวงเลบใหกบ A1A2…Ak และ Ak+1…An ใหเหมาะทสดดวย ซงมจานวนการคณแบบสเกลารเปน
m(1,k) + m(k+1, n) + p0 pk pn
จะเหนไดวาผลรวมนจะนอยสดไดกเมอ m(1,k) และ m(k+1, n) ตองนอยสด ซงกเปนเชนนนเมอการใสวงเลบ A1A2…Ak และ Ak+1…An นนเหมาะทสด
ดงนนเราสามารถหาคาของ m(1, n) โดยการลองแบง (A1A2…An) ทกๆ รปแบบ นนคอแบงเปน (A1)( A2…An), (A1A2)( A3…An), (A1A2A3)( A4…An) , …, (A1…An–1)(An) แลวเลอกกรณทไดคาจานวนการคณแบบสเกลารทนอยสด เขยนเปนความสมพนธเวยนเกดไดดงน
� ���
��
�
����
��
���
jiifpppjkmkimjiif
jim jkijki
1),1(),(min0
),(
ความสมพนธเวยนเกดขางบนนแสดงใหเหนถงการซอนเหลอมของปญหายอย อกทงจานวนปญหายอยทงหมดทตองหาคาตอบกวาจะพบ m(1, n) (ซงคอคาตอบทตองการ) นนกมจานวนเพยง n(n–1)/2 = �(n2) เทานน จงสบายใจไดวากาหนดพลวตนนเหมาะทจะแกปญหานไดแน
ขนาดของปญหา m(i, j) ระบโดยคาของ j–i+1 ซงคอจานวนเมทรกซในลกโซ กาหนดการพลวตบอกใหเราหาคาตอบของปญหาขนาดเลกกอน แลวคอยขยายไปหาของปญหาทใหญขน โดยการจาคาตอบ ถาเราจองตาราง m[1..n,1..n] เพอจา m(i, j) จะพบวาลาดบการเตมคาตอบในตาราง m จะเปนดงรปท 9–13 (เรมท m[1,1]) แสดงอลกอรทมดวยรหสเทยมไดดงน
�
�
�
202 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
j
i
m(1,n)
รปท 9–13 ลาดบการเตมคาตอบในตาราง01: MatrixChain_DP( p[0..n] )02: {03: for (i=1 to n) m[i,i] = 004: for (len=2 to n) {05: for (i=1 to n–len+1) {06: j = i+len–107: m[i,j] = �08: for (k=i to j–1) {09: q = m[i,k] + m[k+1,j] + p[i–1]*p[k]*p[j]10: if ( q < m[i,j] ) m[i,j] = q11: }12: }13: }14: return m[1,n]15: }
วงวน for นอกสดคอยกากบขนาดของปญหา เรมจากขนาด 2 ไปจนถง n วงวนถดเขาไปเปนตวกาหนดคาของ i และวงวนในสดนนวนหาคานอยสดตามความสมพนธเวยนเกดของ m(i, j)
รหสเทยมขางบนนใหเราแตจานวนการคณแบบสเกลารทนอยสดในการคณลกโซเมทรกซทกาหนดให ถาเราตองการทงหาวธการใสวงเลบเหมาะทสด และหาผลคณลกโซใหเลย กสามารถจะเขยนไดดวยรหสเทยมขางลางน
01: MatrixChain_DP( p[0..n] )02: {03: for (i=1 to n) m[i,i] = 004: for (len=2 to n) {05: for (i=1 to n–len+1) {06: j = i+len–107: m[i,j] = �08: for (k=i to j–1) {09: q = m[i,k] + m[k+1,j] + p[i–1]*p[k]*p[j]10: if ( q < m[i,j] ) {11: m[i,j] = q12: s[i,j] = k13: }14: }15: }16: }17: return MatrixChain_Mult( A[1..n], s[1..n,1..n] )18: }
�
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 203
01: MatrixChain_Mult( A[i..j], s[1.n,1..n] )02: {03: if ( i == j ) return A[i]04: k = s[i,j]05: X = MatrixChain_Mult( A[ i, k ], s[1..n,1..n])06: Y = MatrixChain_Mult( A[ k+1, j ], s[1..n,1..n])07: return Matrix_Mult( X, Y )08: }
การใสวงเลบทเหมาะทสดของลกโซเมทรกซหาไดโดยจาคาของ k ททาใหไดคานอยสดของ m(i, j) (บรรทดท 12) เกบใสตาราง s เมอเตมตารางเสรจกหาผลคณไดเลย โดยอาศยMatrixChain_Mult ซงเปนโปรแกรมเวยนเกด ทรบ A[i..j] ซงเปนแถวลาดบของลกโซเมทรกซ Ai Ai+1 … Aj หาผลคณของลกโซเมทรกซ Ai Ai+1…Ak (บรรทดท 5) และผลคณของลกโซเมทรกซ Ak+1Ak+2…Aj (บรรทดท 6) โดยท k คอตาแหนงทเหมาะทสดทจาไวตอนเตมตาราง จากนนนาผลคณทงสองทไดมาคณกนไดเปนผลลพธ (บรรทดท 7)
มาดกนสกหนงตวอยาง ตองการหาวธการคณลกโซเมทรกซเหมาะทสดของ A1A2A3A4A5A6
โดยทเมทรกซทงหกมขนาดเปน 30�20, 20�10, 10�5, 5�5, 5�10 และ 10�40 เรยงตามลาดบ (ดงนนแถวลาดบ p[0..6] เกบขอมล (30,20,10,5,5,10,40) ) อลกอรทม MatrixChain_DPจะเตมตาราง m และ s ไดดงแสดงขางลางน
1 2 3 4 5 61 0 6000 4000 4250 5750 122502 0 0 1000 1250 2250 72503 0 0 0 250 750 4250m4 0 0 0 0 250 22505 0 0 0 0 0 20006 0 0 0 0 0 0
1 2 3 4 5 61 0 1 1 1 3 32 0 0 2 2 3 33 0 0 0 3 3 3s4 0 0 0 0 4 55 0 0 0 0 0 56 0 0 0 0 0 0
การใสวงเลบเหมาะทสดหาไดจากตาราง s เปนดงนs[1,6] = 3 ได (A1 A2 A3 )(A4 A5 A6)s[1,3] = 2 ได ((A1 )( A2 A3 ))(A4 A5 A6)s[4,6] = 5 ได ((A1 )( A2 A3 ))((A4 A5 )(A6))
204 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
ลองตรวจทานจานวนการคณแบบสเกลารของ การใสวงเลบลกโซเมทรกซแบบนไดดงตารางขางลางน
การคณเมทรกซ จานวนการคแบบสเกลาร ขนาดของเมทรกซทได(A2 A3) 20�10�5 = 1000 20�5
((A1)( A2 A3 )) 30�20�5 = 3000 30�5(A4 A5 ) 5�5�10 = 250 5�10
((A4 A5 )(A6)) 5�10�40 = 2000 5�40((A1 )( A2 A3 ))((A4 A5 )(A6)) 30�5�40 = 6000 30�40
เทากบ 1000+3000+250+2000+6000 = 12250 ตรงกบ m[1,6] ทแสดงไวในตารางผลลพธ
แบบฝกหด1. จากความรเกยวกบความสมพนธเวยนเกดของสมประสทธทวนามวา C(n, k) = C(n–1, k) +
C(n–1, k–1) โดยท C(n,n) = 1 และ C(n,0) = 1 จงเขยนโปรแกรมเพอหคาของ C(n,k) ดวย
ก) โปรแกรมแบบเวยนเกดข) โปรแกรมแบบเวยนเกดทมการจาคาตอบค) กาหนดการพลวต
2. จงออกแบบอลกอรทมแบบกาหนดการพลวต (พรอมทงวเคราะหเวลาการทางานดวย) เพอแกปญหา 0/1 knapsack ทไดนาเสนอในตวอยางท 9-1 หนาท 170
3. จงออกแบบอลกอรทมแบบกาหนดการพลวตซงใชเวลาเปน O(kn2) เพอแกปญหา linear partition ทไดนาเสนอในตวอยางท 9-2 หนาท 170
4. จงออกแบบอลกอรทมแบบกาหนดการพลวตซงใชเวลาเปน O(n2) เพอแกปญหา printing neatly ทไดนาเสนอในตวอยางท 9-3 หนาท 171
5. เราไดนยามปญหา longest increasing subsequence ในตวอยางท 9-5 หนาท 175 พรอมทงไดนาเสนออลกอรทมซงใชเวลา O(n2) จงออกแบบอลกอรทมแบบกาหนดการพลวตทใชเวลา O(n log n) เพอแกปญหาน
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 205
6. คณตองการลองแพในแมนาสายหนง ทมพอคาเปดบรการจดเชาและคนแพเปนจานวน nจด (1,2,..., n) ตลอดแมนาสายน คณสามารถเชาและคนแพทจดใดกได กาหนดให Ci,j คอคาเชาแพทเรมเชาทจด i และคนแพทจด j ใหสงเกตวาคาเชาแพจากจด i ไป j อาจแพงกวาคาเชารวมของการเชาเปนระยะทางชวงสนๆหลายๆชวงจาก i ไป j กเปนได ( เชน C2,6 อาจแพงกวา C2,4 + C4,5 + C5,6 ) จงออกแบบอลกอรทมททางานเปนเวลา O(n3) เพอหาคาเชารวมทนอยสดในการลองแพในแมนาสายนจากจด 1 ถง n (ใหสมมตวา 1. กระแสนาไหลตามทศทางจากจด i ไป j เมอ i < j 2. ลองแพสวนกระแสนาไมได และ 3. นอกจากคาเชาแลว พอคาไมคดคาใชจายใดๆ เพมเตมเมอมการเปลยนแพ )
7. กาหนดให A[1..n] คอแถวลาดบของจานวนจรงจานวน n ตว (เปนเลขลบกได) นยามใหลาดบยอยทตดกน (consecutive subsequence) ของ A คอรายการของขอมล A[i], A[i+1], ..., A[i+k] จงออกแบบอลกอรทมแบบกาหนดการพลวตเพอหาคาของลาดบยอยทตดกนทมผลรวมมากสดในเวลา O(n) ตวอยางเชนลาดบยอยทตดกนทมผลรวมมากสดของ (31, –41, 59, 26, –53, 58, 97, –93, –23, 84) คอ (59, 26, –53, 58, 97) ซงมผลรวมเทากบ 187
8. กาหนดใหมการใชเหรยญแบบ 1, 4, 13, 21 เซนตในประเทศหนง ปญหาการแลกเหรยญคอปญหาในการหาวธการการแลกเหรยญโดยใชจานวนเหรยญทนอยสด เพอใหไดมลคารวมเทากบจานวนเงนทกาหนดให (ใหสมมตวาเรามเหรยญแตละแบบจานวนมากๆ) จงเสนออลกอรทมแบบกาหนดการพลวตเพอแกปญหาน (พรอมทงวเคราะหเวลาการทางานดวย)
9. ในการคนขอมลโดยท วไปนนเราตองการขอมลทตรงกบทตองการจรงๆ ถาเปนสตรงกตองทกตวอกษร แตในทางปฏบตนนบางทเราชอบทจะทาแบบประมาณ นนเองยอมใหมขอผดพลาดเกดขนไดบาง ซงอาจเกดจากมตวอกษรตกหลนไป หรอเกนมา หรอตางกน หรอตวตดกนสลบทกน เปนตน ถาเรากาหนดตนทนของขอผดพลาดตางๆ ขนมา กสามารถใชเปนตววดความแตกตางของสตรงสองสตรงไดวาเหมอนหรอตางเพยงใด เราเรยกตนทนรวมของความแตกตางนวาระยะทางของการแกไข (edit distance) ของสตรงสองสตรง (นนคอมองวาจะเปลยนสตรงหนงไปเปนอกสตรงหนงตองใชตนทนเทาไร) สงทตองการหาคอระยะทางของารแกไขทนอยสด ทงนกเพราะวาการเปลยนแปลงนนอาจกระทาไดหลายรปแบบ ซงมตนทนตางกน จงออกแบบอลอรทมแบบกาหนดการพลวตซงใชเวลา O( nm ) ในการคานวณหาระยะทางการแกไขทนอยสดของสตรง X และ Y โดย
206 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
กาหนดให cINS, cDEL, cCHNG เปนตนทนในการเพม, การลบ และการเปลยนตวอกษรในสตรง X (เพอจะไดเหมอน Y) ตามลาดบ
10. ในภาษาทสนบสนนการประมวลผลสตรง (string processing) โดยทวไปนน จะมคาสงพนฐานในการแบงแยกสตรงหนงออกเปนสองสตรงยอย ซงใชเวลาแปรตามความยาวของสตรง (เนองจากตองมการทาสาเนาสตรง) สมมตวาเราตองการแยกสตรงทกาหนดให ออกเปนหลายๆ สตรงยอย ลาดบในการแยกจะมผลตอเวลารวมในการแยกทงหมด ตวอยางเชน (ดรปขางลางน) การแยกสตรงทมยาว 20 ตวออกเปนสตรงยอยๆ ทตาแหนง 3, 8 และ 10 จะใชเวลาตางกน ถาเราแยกตามลาดบจากซายไปขวา (ใชเวลา 20+17+12=49) กบถาเราแยกตามลาดบจากขวาไปซาย (ใชเวลา 20+10+8 = 38) จงออกแบบอลกอรทมแบบกาหนดการพลวตสาหรบปญหาในแยกสตรงดงกลาวดวยวธดทสด โดยใชเวลาเปน O(n3) n คอความยาวของสตรง
THISISASTRINGOFCHARS THISISASTRINGOFCHARS
SISASTRINGOFCHARS THISISASTR
TRINGOFCHARS THISISAS
ซายไปขวา ขวาไปซาย
11. ในตลาดการซอขายเงนสกลตางๆในปจจบนน เราสามารถหากาไรไดจากความแตกตางของอตราการแลกเปลยนเงน ตวอยางเชน ณ ขณะใดขณะหนงถาอตราการแลกเปลยนเงนเปนดงน 1 US dollars แลกได 0.75 pounds 1 pound แลกได 2 Australian dollars 1 Australian dollar แลกได 0.70 US dollars เรากสามารถซอขายเงนดวยเงน 1 US dollar แลวไดกลบคนมาเปน 0.75 x 2 x 0.7 = 1.05 US dollars ได
กาหนดใหวามเงนสกลตางๆ n สกล c1, c2, c3, ..., cn และตารางขนาด n � n ซงระบอตราการแลกเปลยน (นนคอเงนสกล ci หนวยซอเงนสกล cj ได R[i, j] ) จงออกแบบอลกอรทม(พรอมทงวเคราะหเวลาการทางานดวย) แบบกาหนดการพลวตเพอหาคามากสดของ
R[1, i1] � R[i1, i2] � ... � R[ik–1, ik] � R[ik, 1]
12. Traveling salesperson problem : กาหนดให G คอกราฟถวงนาหนก เราตองการหาวงจรในกราฟนซงผานทกๆ จดในกราฟจดละหนงครงโดยความยาวรวมของเสนเชอมบนวงจร
Draft 1.0 : 30/10/00 5:25 : [email protected] บทท 9 กาหนดการพลวต 207
ทสนสด เรยกวาเปนการเดนทางของพนกงานขายทสนสด จงออกแบบอลกอรทมแบบกาหนดการพลวตทใชแกปญหาน (พรอมทงวเคราะหเวลาการทางานดวย)
13. Bitonic euclidean traveling–salesman problem : ปญหานคลายกบขอทแลว แตเราสนใจเฉพาะกรณเมอความยาวของเสนเชอมระหวางจดสองจดใดๆ คอระยะทางระหวางจดนนบนระนาบแบบยคลด (Euclidean plane) ซงหมายความวาความยาวของเสนเชอมตางๆ ทเชอมเมองสามเมองใดๆ ตองเปนไปตามอสมการของความยาวดานของสามเหลยม (triangle inequality) นนคอผลรวมของความยาวดานสองดานใดๆ ตองไมนอยกวาดานทสาม (ซงระยะทางของเมองตางๆ บนระนาบแบบยคลดมคณสมบตขอน) นอกจากนยงมเงอนไขเพมเตมวาวงจรตองเปนแบบ bitonic นนคอใหวงจรเรมทจดซายสดจากนนไปทางขวาเรอยๆ จนถงจดขวาสด แลวจงเรมเปลยนทศมาทางซายเรอยๆ จนถงจดเรมตนเดม รปซายขางลางนไมใชวงจรแบบ bitonic ในขณะทรปขวาเปนวงจรแบบ bitonic
จงออกแบบอลกอรทมทใชเวลา O(n2) ในการเดนทางของพนกงานแบบ bitonic บนระนาบแบบยคลค (สมมตใหทกๆ จดมพกดในแนวแกน x ไมเหมอนกนเลย)
208 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:25 : [email protected]
Draft 1.0 : 30/10/00 5:33 : [email protected] 209
บทท 10
ในบททแลว เราไดศกษากลวธกาหนดการพลวตเพอหาผลเฉลยเหมาะทสดของปญหาหนง ซงหาไดมาจากลาดบของการตดสนใจ โดยทการตดสนใจหนงๆ นนตงอยบนผลเฉลยตางๆ ทไดจากปญหาทมขนาดเลกกวา (นนคอตองหาผลเฉลยเหมาะทสดของปญหาขนาดเลกๆ มากอนเพอใชหาผลเฉลยเหมาะทสดของปญหาทใหญกวา) ในบทนเราจะมาศกษากลวธการแกไขปญหาอกแบบหนงซงใชกบปญหาการหาคาเหมาะทสด โดยทผลเฉลยของปญหาหาไดจากลาดบของการตดสนใจเชนเดยวกบกาหนดการพลวต แตวาเราตดสนใจโดยใชเกณฑทใหผลเหมาะทสดจากสภาพของปญหา ณ ขณะนน ไดเปนผลเฉลยบางสวน แลวคอยลดขนาดของปญหาลงเพอไปตดสนใจตอ เพอไดผลเฉลยบางสวนทมขนาดใหญขนดวยวธการเดยวกน กระทาเชนนไปเรอยๆ จนไดผลเฉลยทสมบรณ อลกอรทมซงทางานในลกษณะนเรยกวาอลกอรทมแบบตระกลาม (greedy algorithm)
ใหลองหวนกลบนกถงปญหาตนไมคนแบบทวภาคเหมาะทสด ซงไดนาเสนอมาในบททแลว กาหนดการพลวตนนหาผลเฉลยของตนไมเลกๆ กอน แลวคอยๆ โตขนๆ จนเปนตนไมทมขอมลครบตามตองการ ตนไมใหญทเหมาะทสดกไดมาจากการพจารณาตนไมตนเลกกวาทเหมาะทสดจานวนหนง แตถาเราใชอลกอรทมแบบตระกลาม จะมการพจารณาขอมลทงหมดแลวตดสนใจเลอกขอมลมาหนงตวใหเปนรากของตนไม โดยใชเกณฑการตดสนใจทเหมาะทสดอะไรบางอยาง เชนเลอกขอมลทมความถสงสดใหเปนรากของตนไม เปนตน จากนนจงไปหาตนไมเหมาะทสดตนเลกลง ทางซายและขวาของรากทเลอก โดยใชเกณฑการตดสนใจเดยวกนในการเลอกขอมลมาเปนรากจากชดขอมลทมขนาดเลกลง รปท 10–1 แสดงขนตอนการเตบโตของตนไมทสรางโดยใชเกณฑการเลอกขอมลทมความถสงสดในชดขอมลเปนราก เราใชชดขอมลเดยวกบในตวอยางทไดนาเสนอในบททแลว จากขอมลทงชดเราเลอก “พ” (รป (ก)) เปนราก
อลกอรทมแบบตระกลาม
210 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
เพราะมความถสงสด จากนนไปสรางตนทางซายซงประกอบดวยขอมลทเหลอทมคานอยกวา“พ” ได “ชนจง” เปนรากของตนไมยอยทางซาย (รป (ข)) เพราะมความถสงสดในกลม เนองจากไมมขอมลทนอยกวา “ชนจง” กไปพจารณากลมขอมลของตนไมทางขวาของ “ชนจง” ได “ทกเกอร” ทมความถสงสดในกลมเปนราก (รป (ค)) กระทาในลกษณะเชนนสาหรบตนไมยอยอนๆ ทเหลอทงหมด กจะไดผลลพธสดทายเปนตนไมในรป (ช)
ขอมล ความถในการอางองพ 25%ชนจง 22%ทกเกอร 20%ดบซ 18%ลาลา 8%ทงกวงก 5%โพ 2%
พ
พ
ลาลาชนจง
ทกเกอร
ดบซ ทงกวงก
โพ
พ
ชนจง
พ
ชนจง
ทกเกอร
พ
ชนจง
ทกเกอร
ดบซ
พ
ชนจง
ทกเกอร
ดบซ ทงกวงก
พ
ลาลาชนจง
ทกเกอร
ดบซ ทงกวงก
(ก) (ข) (ค) (ง)
(จ) (ฉ) (ช)รปท 10–1 การสรางตนไมคนแบบทวภาคแบบตระกลาม
ลกษณะการทางานทอาศยเกณฑอะไรบางอยาง เพอเลอกขยายผลเฉลยในลกษณะทเหมาะทสดเทาทจะทาไดตามสภาพของปญหาปจจบนนนเปนทมาของคาวา "ตระกลาม" คอจะเลอกตดสน
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 211
ใจในทางทใหผลทดทสดในขณะปจจบนเปนพอ ไมตองไปเผออะไรในอนาคต พฤตกรรมตระกลามเชนนมขอดตรงทวาสามารถแกไขปญหาไดรวดเรว ขอเสยกคอมนไมแนเสมอไปทจะไดผลเฉลยเหมาะทสด (รปท 10–1 (ช) ไมใชตนไมคนแบบทวภาคเหมาะทสดทหาไดในบททแลว) แตกมอยหลายปญหาทเดยวทใชอลกอรทมแบบตระกลามเพอหาผลเฉลยเหมาะทสดได
ในบทนเราจะนาเสนอตวอยางของปญหาจานวนหนง พรอมทงอลกอรทมแบบตระกลามทแกไขปญหาเหลานน พรอมกบศกษาลกษณะเฉพาะสองประการของปญหา ซงสามารถใชอลกอรทมแบบตระกลามหาผลเฉลยเหมาะทสดของปญหาเหลานนได
ปญหา Knapsackกาหนดใหมของขายอย n ชนแตละชนมหมายเลขกบ 1, 2, ..., n ของชนท i มนาหนก wi และมมลคา vi ลกคาคนหนงไดรบเลอกใหหยบของชนใดกไดใสถงใบหนงซงรบนาหนกไดไมเกน W อยากทราบวาควรเลอกหยบชนใดบางถง ถงจะไดมลคารวมสงสด โดยเราสามารถเฉอนแบงของทขายออกเปนสดสวนไดตามตองการ โดยมลคาและนาหนกของของชนนนแปรตามสดสวนทแบงออกมา ปญหานมชอเรยกวา fractional knapsack problem
จะวาไปแลวเราเคยนาเสนอปญหาทคลายกบปญหานในบททแลว (แตไมไดบอกวธแกไข) เพยงแตวาคราวนเรายอมใหเฉอนของออกไดตามสดสวนทตองการ กาหนดให xi คอสดสวนของของชนท i ทหยบใสถง 0� xi � 1, i =1, 2, ..., n ถา xi = 0 แสดงวาไมไดเลอกของชนท i ถา xi = 1 แสดงวาเลอกของชนท i ทงชน ถา xi = 0.25 แสดงวาเลอกของชนท i โดยเฉอนมา ¼ ชน ดงนนเราตองหาคาของ (x1, x2, ..., xn) ทม
��
n
iii xv
1มากทสด
โดยท
Wwxn
iii ��
�1 และ 0�xi� 1
สงทตองคานงถงในการแกปญหาดวยอลกอรทมแบบตระกลามกคอวา ในแตละขนตอนของการตดสนใจนน เราจะนาอะไรมาเปนเกณฑ การทางานจะเปนในลกษณะของวงวนของการตด
212 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
สนใจเพอเลอกและขยายผลเฉลยไปเรอยๆ จนไดผลเฉลยทสมบรณ สาหรบปญหานจะขอเสนอเกณฑ “ความตระกลาม” ในการเลอกดงน
1. เลอกของทมมลคาสงสด แบบนเหนชดวาตระกลามจรงๆ เพราะไมสนใจวาหนกแคไหน เอาแพงไวกอน
2. เลอกของทมนาหนกนอยสด แบบนมความตระกลามในเชงจานวนชน อยากไดจานวนชนมากๆ จงเลอกเบาๆ ไวกอน
3. เลอกของทมมลคาตอนาหนกสงสด แบบนคดรอบคอบหนอย เอาแพงๆ เบาๆ ไวกอน
เราจะหยบของตามเกณฑทใช โดยจะหยบทงชนเลยถาหยบได ในกรณทหยบทงชนไมได กจะเฉอนของชนนนใหพอดกบทถงนนจได เราจะรวาวธใดเปนวธทไดผลเฉลยเหมาะทสด กคงตองใชการพสจนใหเหนจรง แตกอนอนขอยกตวอยางมาทดลองทากนดกอนวาวธใดดทสด สมมตวามถงรบนาหนกได 100 มของอย 5 ชนมนาหนก มลคา และมลคาตอนาหนกแสดงขางลางน
1 2 3 4 5vi 20 30 66 40 60wi 10 20 30 40 50vi / wi 2.0 1.5 2.2 1.0 1.2
ถาใชแบบท 1 (เลอกของแพงกอน) กจะเลอกชนท 3 ตามดวยชนท 5 แลวกชนท 4 แตเฉอนมาไดแคครงชนกเตมถง ไดมลคารวมเปน 66+60+20 = 146
ถาใชแบบท 2 (เลอกของเบากอน) กจะเลอกชน 1 ตามดวยชน 2, 3, และ 4 บรรจไดพอดเตมถง ไดมลคารวมเปน 20+30+66+40 = 156
ถาใชแบบท 3 (เลอกของมลคาตอนาหนกทสงๆ กอน) กจะเลอกชนท 3 ตามดวยชนท 1 แลวกชนท 2 และจบดวยชนท 5 ซงเฉอนมาได 80% กเตมถง ไดมลคารวมเปน 66+20+30+48 = 164
จากตวอยางขางบนน เราไดแบบท 3 เปนวธทใหผลเฉลยทมมลคารวมสงทสด เราจะมาพสจนกนวาดวยการใชมลคาตอนาหนกเปนเกณฑในการเลอกของแบบตระกลาม จะไดผลเฉลยทใหมลคารวมสงสด
สงทจะตองพสจนมสองประเดนคอ
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 213
1. ตองแสดงใหเหนวาของทเลอกมาแบบตระกลามนน เปนของชนหนงในผลเฉลยเหมาะทสด และทาใหปญหาทแกไขอยมขนาดเลกลงโดยมลกษณะของปญหาเหมอนเดม
2. ตองแสดงใหเหนวาเมอเราเลอกของทมมลคาสงสดของปญหายอยมา แลวรวมกบของทไดเลอกไปตอนแรก จะตองไดการเลอกทมมลคาสงสดของทงปญหาดวย
ขอพสจนประเดนแรกกอน กาหนดให XOPT = (x1, x2, ..., xn) โดยท 0�xi� 1 คอผลเฉลยเหมาะทสด และ m คอของชนทม vm/wm สงสด การเลอกแบบตระกลามยอมเลอกชน mไดหนก w = min( wm, W ) ถาเราหยบหรอเฉอนของออกจาก XOPT อยางไรกไดใหมนาหนกรวมเทากบ w (เราบรรยายสวนทหยบหรอเฉอนออกจาก XOPT ดงกลาวดวย Y = (y1, y2, …, yn) โดยท 0� yi� xi
และ wwyni ii ���1
) แลวเตมชนท m ซงมนาหนก w ลงไปแทน (ซงมมลคา w vm/wm ) จะไดวาผลตางของมลคาหลงการกระทาเชนนจะเปน
01
11
11
�
��
�
�
��
�
�
���
����
��
��
�
�
��
�
��
��
�
�
��
�
�
��
�
�
��
�
��
��
�
�
��
�
��
�
��
��
�
��
��
n
i i
i
m
mii
n
i i
iii
m
mn
iii
n
i i
iii
m
mn
iii
m
m
wv
wv
wy
wv
wywv
wy
wv
wywv
wvywv
w
(เพราะวา vm/wm นนไมนอยกวา vi/wi สาหรบทกๆ i ) ดงนนเมอนาชนท m ไปแทนจะไมทาใหมลคารวมลดลง สรปไดวามวธเลอกทดทสดซงเรมดวยการเลอกของทมมลคาตอนาหนกสงสดกอน และหลงจากทเราเลอกชนท m นแลว ปญหา knapsack เดมกถกลดขนาดเหลอการพจารณาของแค n–1 ชน (n ชนเดม แตตดชนท m ออก) และถงมความจลดลงเหลอ W–wm �
คราวนกตองมาพสจนกนตอในประเดนท 2 ทวาการไปเลอกของทมมลคารวมสงสดของปญหายอย แลวรวมกบของทไดเลอกไปตอนแรก จะตองไดมลคารวมสงสดของทงปญหาดวย นนคอการแสดงใหเหนวาปญหา Knapsack มโครงสรางยอยเหมาะทสดนนเอง
กาหนดให X = (x1, x2, ..., xn) โดยท 0�xi�1 คอผลเฉลยเหมาะทสดของปญหา knapsack P ซงมมลคารวมเปน �
�
�
ni ii vxV
1 ถาเราเฉอนของชนท j จากปญหา P ออกมาใหหนก w โดยท xj
> 0 และ 0 < w � xjwj (ทเฉอนออกมานมมลคา wvj/wj) ไดเปนปญหาใหม P* (ถอไดวาเลกกวา
214 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
P) คอมของ n ชนเหมอนปญหาเดม ตางกนตรงทของชนท j มขนาดเลกลงคอมนาหนกเพยง wj–w (มลคากตองลดลงตามสดสวนดวย) และถงรบนาหนกได W–w เหนไดวาผลเฉลยเหมาะทสดของ P* ตองมมลคารวมเปน V* = V – wvj/wj เพราะถา P* มผลเฉลยซงมมลคารวมมากกวา V* เรากยอมหาผลเฉลยเหมาะทสดของ P ไดโดยนาของชน j ทเฉอนไวกอนหนานใสกลบเขาไปในถง แลวไดของมลคารวมมากกวา V เกดขอขดแยงกบขอกาหนดทบอกวา X เปนผลเฉลยเหมาะทสด แสดงวาปญหา knapsack มโครงสรางยอยเหมาะทสด �
ดงนนอลกอรทมแบบตระกลามทแกปญหา fractional knapsack จะเรมดวยการเรยงลาดบสงของตามมลคาตอนาหนกจากมากไปนอย จากนนกเขาวงวนเลอกแบบตระกลามจนกระทงถงจไดตามนาหนกทรบได เขยนเปนรหสเทยมไดดงน01: Greedy_FractionalKnapsack( obj[1..n], W )02: {03: sort obj[1..n] by obj[i].v/obj[i].w (nonincreasing)04: for(i=1 to n) obj[i].x = 005: i = 0; sumW = 006: while ( i <= N AND sumW < W ) {07: obj[i].x = min( 1, (W–sumW) / obj[i].w )08: sumW = sumW + min( obj[i].w, (W–sumW) )09: ++i;10: }11: return obj12: }
อลกอรทมนรบ obj ซงเปนแถวลาดบของสงของ n ชน ชนท i มนาหนกเปน obj[i].w และมลคา เปน obj[i].v ผลเฉลยทหาไดเกบไวใน obj[i].x บรรทดท 3 เปนการเรยงลาดบขอมลใชเวลา O(n log n) บรรทดท 4 ใชเวลา �(n) วงวนแบบ while ในบรรทดท 6 ถง 10 ใชเวลา O(n) สรปแลวใชเวลาทงสนแปรตามการเรยงลาดบขอมลเปน O(n log n)
ทผานมาเราไดแสดงใหเหนวาผลเฉลยเหมาะทสดของปญหา fractional knapsack หาไดโดยการเลอกแบบตระกลาม ซงเลอกของทมมลคาตอนาหนกสงสดใหมากทสดกอน แตสาหรบปญหา 0/1 knapsack ซงมขอจากดวาเราไมสามารถเฉอนของออกเปนสวนๆ ได (คอจะเลอกกเลอกทงชน มฉะนนกไมตองเลอก นนคอ xi = 0 หรอ 1) นน เราไมสามารถหาผลเฉลยเหมาะทสดไดดวยการเลอกแบบตระกลาม ถงแมวาเราจะพสจนไดวา 0/1 knapsack มโครงสรางยอยเหมาะทสด (ลองไปคดด) แตเราไมสามารถพสจนไดวาของทมมลคาตอนาหนกมากสดทงชนจะตองเปนหนงในผลเฉลยเหมาะทสด ขอใหนกเรยนลองทอสอบดวยตวเองไดจากตวอยางดงน กาหนดใหมของ 3 ชน w1 = 1 w2 = 2 w3 = 3 v1 = 6 v2 = 10 v3 = 12 และ W = 5
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 215
ลกษณะเฉพาะของปญหาจากปญหา knapsack ทไดนาเสนอมานน จะสงเกตวาตวปญหานมลกษณะเฉพาะทเหมาะกบการใชอลกอรทมแบบตระกลามสองประการคอ ตองมลกษณะเฉพาะในการเลอกแบบตระกลาม (greedy–choice property) และตองมโครงสรางยอยเหมาะทสด (optimal substructure)
การเลอกแบบตระกลามนนเปนลกษณะเฉพาะซงบอกเราวา สงทไดจากการเลอกแบบตระกลามซงคอการเลอกเหมาะทสดตามสถาพทมใหพจารณาในปจจบน (locally optimal choice) นน ตองเปนสวนหนงของผลเฉลยเหมาะทสดของทงปญหา (globally optimal solution) ใหสงเกตวาในขณะทกาหนดการพลวตใชผลเฉลยเหมาะทสดของปญหายอย และฟงกชนจดประสงคของปญหาเปนตวตดสน อลกอรทมแบบตระกลามนนอาศยสภาพปจจบนของตวปญหา (หรอใชผลทไดจากการตดสนใจไวในอดต) เปนเกณฑในการตดสนใจ แตจะไมไดอาศยผลเฉลยเหมาะทสดอะไรเลยจากปญหายอยทจะตองแก (ซงคอการตดสนใจใดๆ ในอนาคต) และโดยทวไปกไมไดใชฟงกชนจดประสงคของปญหาดวย ดงนนจงมกไมเหนเดนชดวาจะไดผลเฉลยเหมาะทสดไดอยางไรดวยการเลอกแบบตระกลาม ตวอยางเชนปญหา fractional knapsack อาศยการเลอกของทมมลคาตอนาหนกสงสดซงเปนลกษณะสมบตของสงของตางๆ ทเราสกดมาไดจากขอมลในปจจบน (ของชนใดถกเลอกไวแลวกไมนามาพจารณา) ซงไมใชปจจยทแสดงในฟงกชนจดประสงคเลย ดงนนจงจาเปนอยางยงทตองพสจนวา เกณฑการเลอกแบบตระกลามทใชนนจะเปนสวนของผลเฉลยเหมาะทสด การพสจนนนโดยทวไปแสดงใหเหนวา ผลเฉลยเหมาะทสดของปญหานนตองมผลทไดจากการเลอกแบบตระกลาม หรอถาไมม กตองสามารถแปลงไปสผลเฉลยอนทเหมาะทสดเหมอนกนซงมผลทไดจากการเลอกแบบตระกลามดวย จากนนแสดงใหเหนวาหลงจากเลอกแลว จะไดปญหาในลกษณะเดมทมขนาดเลกลง
ผลทไดหลงการเลอกแบบตระกลามนนคอไดปญหาทมขนาดเลกลง การนาสงทไดเลอกแบบตระกลามไว รวมเขากบผลเฉลยเหมาะทสดของปญหายอยทจะตองหา แลวไดเปนผลเฉลยเหมาะทสดของทงปญหาไดนนกเมอตวปญหามโครงยอยเหมาะทสด ลกษณะเฉพาะนเปนสงจาเปนทตองมเชนเดยวกบการใชกาหนดการพลวตในการหาผลเฉลยเหมาะทสด นนคอผลเฉลยเหมาะทสดของปญหานนประกอบไปดวยผลเฉลยเหมาะทสดของปญหายอยๆ
216 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
ปญหาการเลอกกจกรรมกาหนดให A = {a1, a2, ..., an} คอเซตของการประชมตางๆ ทมผทาเรองขอใชหองประชมหองหนง การประชมท ai มกาหนดการใชหองประชมตงแตเวลา si ถง fi โดยท si � fi เปนไปไดวาอาจมการขอใชหองประชมหองนในเวลาซอนเหลอมกนซงคงจดใหไมได ปญหาทรอใหแกไขกคอ จะอนมตใหการประชมใดบางทมสทธใชหองประชมหองน เพอใหไดจานวนการประชมมากทสด และไมมการประชมทใชเวลาซอนเหลอมกน เราเรยกปญหาทเราตองเลอกกจกรรมทมการใชทรพยากรรวมกนในลกษณะนวาปญหาการเลอกกจกรรม (activity–selection problem)
ตวอยางเชนมอย 6 กจกรรมทมกาหนดการใชทรพยากรเดยวกนดงรปท 10–2 ลองคดสกครกจะไดวา {จ, ง}, {จ, ฉ}, {ข, ง} และ {ข, ฉ} เปนเซตของกจกรรมทมขนาดใหญสดทเลอกได
ai ก ข ค ง จ ฉsi 0 3 3 5 1 5fi 6 5 8 9 4 7
ก
0 5 10
ขค
งจ
ฉรปท 10–2 ตวอยางปญหาการเลอกกจกรรม
การทางานของอลกอรทมแบบตระกลามเพอหาผลเฉลยของปญหาน กคงตองมการเลอกกจกรรมในแตละรอบของการทางาน แลวเราจะเลอกกจกรรมใด ? ขอเสนอใหเลอกกจกรรมซงม เวลาสนสดของการใชทรพยากร ( fi ) นอยทสดทไมซอนเหลอมกบกจกรรมทไดเลอกไว
เราเรมดวยการเรยงลาดบกจกรรมตางๆ ตามเวลาสนสดของการใชทรพยากร (จากนอยไปมาก) จากนนเลอกกจกรรมแรกสด แลวเขาวงวนเพอเลอกกจกรรมถดไป ทไมซอนเหลอมกบกจกรรมลาสดทเพงเลอก จากตวอยางขางบนนหลงเรยงลาดบแลวจะไดดงรปท 10–3 เรมดวยการเลอกกจกรรม จ หลงนนพจารณากจกรรม ข พบวาซอนเหลอมกบ จ (จงไมเลอก ข) ตอไปพจารณากจกรรม ก กพบวาซอนเหลอมกบ จ อก (กไมเลอกอก) พอพจารณากจกรรม ฉ คราวนไมซอนเหลอมกบ จ กเลยเลอก ฉ กระทาเชนนตอไปพบวาเลอก ค และ ง ไมได จบการทางานไดผลเฉลยคอ S = {จ, ฉ} เขยนไดเปนรหสเทยมดงน
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 217
01: Greedy_Activity_Select( a[1..n] )02: {03: sort a[1..n] by a[i].finish (nondecreasing)04: S = { a[1].name }05: j = 106: for (k = 2 to n) {07: if ( a[k].start >= a[j].finish ) {08: S = S � { a[k].name }09: j = k10: }11: }12: return S13: }
อลกอรทมนมภาระในการเรยงลาดบขอมล (บรรทดท 3) และมวงวนแบบ for หมนอย �(n) ครง โดยทแตละรอบใชเวลาคงตว จงใชเวลารวมเปน O(n log n) ตามภาระการเรยงลาดบขอมล
0 5 10
กข
คง
จ
ฉ
รปท 10–3 ตวอยางปญหาการเลอกกจกรรมทเรยงลาดบตามเวลาสนสดการใชทรพยากร
กมาถงเวลาทจะแสดงใหเหนจรงวาการเลอกแบบตระกลามทนาเสนอมาน (คอเลอกกจกรรมทเสรจเรวสดกอน) จะใหผลเฉลยเหมาะทสด โดยแสดงใหเหนถงการมลกษณะเฉพาะของการเลอกแบบตระกลาม และโครงสรางยอยเหมาะทสดของปญหา
กาหนดให am คอกจกรรมทม fm นอยทสด เราจะแสดงใหเหนวามผลเฉลยเหมาะทสดทม am
รวมอยดวย ให S คอผลเฉลยเหมาะทสด ถา am� S กตรงตามทตองการ แตถา am� S สมมตวา ak คอกจกรรมแรกใน S (หมายความวา ak ม fk นอยทสดใน S) ดงนนเราสามารถสรางผลเฉลยใหม S* = (S – {ak}) � {am} ทมขนาดเทากบ S ซงม am เปนหนงในผลเฉลยเหมาะทสด เพราะวา fm� fk (จงไมซอนเหลอมกบกจกรรมอนทเหลอใน S) และเรายงสามารถลดขนาดของปญหาจากเดม A เปนปญหายอย A’ = {ai | ai� A และ ai ม si � fm } ซงเปนเซตของกจกรรมตางๆ ทมเวลาเรมตนของกจกรรม หลงเวลาสนสดการใชทรพยากรของ am อนแสดงใหเหนถงลกษณะเฉพาะของการเลอกแบบตระกลาม �
218 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
เมอเราไดแสดงใหเหนวามลกษณะเฉพาะของการเลอกแบบตระกลามแลว คราวนกจะมาพสจนวาปญหานมโครงสรางยอยเหมาะทสด จากยอหนาทแลวหลงการเลอก am เราสามารถลดขนาดของปญหาเปน A’ ซงม S* เปนผลเฉลยเหมาะทสด (ทม am อยดวย) แนนอนวา S* – {am} กตองเปนผลเฉลยเหมาะทสดของปญหา A’ ทงนเพราะวาถาเราสามารถหาผลเฉลยอน S** ทมขนาดมากกวา S* – { am } ได จะสรปไดวา S** � {am} กตองเปนผลเฉลยของปญหา A ซงมขนาดมากกวา S* ซงขดแยงกบขอกาหนดทให S* เปนผลเฉลยเหมาะทสดของ A จงแสดงใหเหนถงการมโครงสรางยอยเหมาะทสดของปญหา �
วถสนสดแบบแหลงตนทางเดยวกาหนดให G = (V, E ) คอกราฟระบทศทาง โดยท V คอเซตของจด และ E คอเซตของเสนเชอม แตละเสนเชอมมความยาว (ทไมเปนจานวนลบ) กากบ ให v1 คอจดๆ หนงใน V เรยกวาจดเรม ปญหาวถสนสดแบบแหลงตนทางเดยว (single-source shortest path) กคอการหาวถสนสดจาก v1 ไปยงจดอนๆ ใน G
ในบททแลวเราไดนาเสนออลกอรทมทอาศยกาหนดการพลวต ในการหาวถสนสดจากจดๆ หนงในกราฟไปยงจดอนๆ ทกๆ จดในกราฟนน อลกอรทมนนใชเวลาเปน O(�V�3) ซงดออกจะชาไปหนอย ในหวขอนเราจะใชอลกอรทแบบตระกลามในการหาวถสนสด อลกอรทมทจะนาเสนอนมชอเรยกวาอลกอรทมของ Dijkstra
กาหนดให �(vi) คอความยาวของวถสนสดจาก v1 ถง vi สงทเราอยากไดกคอ �(vi) ของทกๆ จด อลกอรทมของ Dijkstra กาหนดใหจด vi ใดๆ เกบ d[vi] ซงคอขอบเขตบนของความยาวของวถสนสดจาก v1 ถง viไว นนคอ �(vi) � d[vi] โดยแบงเซต V ออกเปนสองเซตยอยคอ S และ C เซต S เกบจดซง d[vi] = �(vi) นนคอเรารวถสนสดจาก v1 ถงจดตางๆ ใน S แลว สวน C กคอเซตของจดอนๆ ทเหลอทเรายงไมรวถสนสดจาก v1 ถงจดเหลาน รแตขอบเขตบน �(vi) � d[vi]
ตอนเรมตนเรายงไมรอะไรเลย กให d[vi] = � สาหรบทกๆ จด ยกเวนกแต d[v1] = 0 เพราะ v1
เปนจดเรมของวถ S = � และ C = V จากนนกเขาสวงวนของการเลอกจดใน C แบบตระกลามเขามาเปนสมกชกใน S แลวปรบ d[vi] ของทกๆ vi ทตอกบจดทเพงถกเลอก (การปรบนจะมแนวโนมให d[vi] มคาลดลง นนคอปรบใหขอบเขตบนของความยาวลดลงเขาใกลความยาว
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 219
ของวถสนสดจรง) ทาการเลอกจดในลกษณะเชนนวงวนละหนงจด จนในทสดได S = V จะได d[vi] = �(vi) สาหรบทกๆ จด
กาหนดให vg คอจดทถกเลอกแบบตระกลามเพอรวมเขาใน S เราใชเกณฑอะไรมาเลอก vg เราจะปรบ d[vi] ของจดทตอ vg ไดอยางไร และทาไมในทายทสดจะได d[vi] = �(vi) สาหรบทกๆ จด ขอตอบสองคาถามแรกกอน เราใชวธเลอกจด vg ซงเปนสมาชกของ C ทมคาของ d[vg] นอยทสด หลงจากเลอกแลวกปรบ d[vi] ของจดอนๆ ทตอกบ vg โดยใชวธทเรยกวา relaxation ซงเปนวธททดสอบดวาเราจะไดวถทสนกวาจาก v1 ถง vi หรอไมโดยใชวถสนสดจาก v1 ถง vg
(ทรมาแลว) ตามดวยเสนเชอม (vg , vi) ถาสนกวากเปลยน (เปลยนทง d[vi] และ [vi] ซงคอจดกอนหนา vi ของวถสนสดทกาลงหา) วธ relaxation แสดงดวยรหสเทยมสนๆ ดงน
01: Relax( G, vg, vi )02: {03: if ( d[vi] > d[vg] + w(vg,vi) ) {04: d[vi] = d[vg] + w(vg,vi)05: �[vi] = vg06: }07: }
ดงนนรหสเทยมของอลกอรทมของ Dijkstra เขยนไดดงน01: Dijkstra( G(V,E), v1 )02: {03: for (each vertex vi�V) d[vi] = �04: d[v1] = 005: S = �06: C = a priority queue of V using d[vi] as keys07: while ( C � � ) {08: vg = ExtractMin( C )09: S = S � {vg}10: for (each vertex vi � adjacent( vg ))11: Relax( G, vg, vi )12: }13: }
บรรทดท 3 และ 4 เปนการตงคาเรมตนของ d[vi] ทงหมด บรรทดท 6 สราง priority queue จากจดตางๆ ของกราฟโดยใช d[vi] เปนคย จากนนเขาสวงวนทดงตวทมคยนอยสดใน C ออกมา(บรรทดท 8) เพอรวมเปนสมาชกของ S (บรรทดท 9) แลวไป relax ทกๆ จดทตอกบจดทเพงถกรวมใน S (บรรทดท 10 และ 11) การทางานสนสดเมอทกๆ จดใน C ถกดงยายไปท S จนหมด
220 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
สาหรบเวลาการทางานของอลกรทมน บรรทดท 3 เปนการตงคาเรมตนของ d[vi] ตางๆ ใชเวลาเปน �(�V�) ถาใชฮปแบบฟโบนกชในการสราง priority queue 1 การสรางฮปทบรรทดท 6 กใชเวลา �(�V�) วงวน while ทบรรทดท 7 หมนเปนจานวน �V� รอบ เนองจาก ExtractMinใชเวลา O( log�V�) ดงนนบรรทดท 8 ใชเวลารวมเปน O(�V�log�V�) การ Relax ทบรรทดท 11 แตละครงนนอาจมการลดคาของ d[v] ทาใหเกดการ DecreaseKey ของขอมลในฮปซงใชเวลาถวเฉลยเปน O(1) ถาเราแทนกราฟดวยรายการประชด การ Relax นกจะเกดขนรวมทงสน �E� ครง ดงนนการ DecreaseKey ทงหมดทเกดขนใชเวลารวมเปน O(�E�) สรปไดวา อลกอรทมของ Dijkstra นใชเวลาเปน O(�E�+�V�log�V�)
รปท 10–4 แสดงกราฟทเราจะใชเปนตวอยางแสดงการทางานของอลกอรทมของ Dijkstra โดยตองหาวถสนสดจากจด v1 ไปยงจดอนๆ ในกราฟ รปท 10–5 แสดงขนตอนการทางาน จานวนทแสดงในโหนดคอ d[vi] ของโหนดนน โหนดทเปนสทบคอโหนดซงอยใน S เสนเชอมทมหวลกศรทบแทนวถสนสดเทาทร เมอทกๆ โหนดอยใน S แลว เราจะไดวถสนสดจาก v1 ถงจดอนๆ แทนดวยตนไมทม v1 เปนราก และกงคอเสนเชอมหวทบตางๆ
12
1
41
5
7
4
4
8v1
v2 v3
v4 v5
v6
รปท 10–4 ตวอยางกราฟสาหรบปญหาการหาวถสนสดจากจด v1 ถงจดอนๆ
กมาถงเวลาตองแสดงใหเหนวาอลกอรทมของ Dijkstra นนใหวถสนสดทตองการจรงๆ เราตองพสจนวาการเลอกทนาเสนอมาน มลกษณะเฉพาะของการเลอกแบบตระกลาม นนคอทกครงทเลอกจด vg รวมเขาใน S นน d[vg] = �(vg) หลงเลอกแลวเราเหลอปญหาในลกษณะเดยวกนทมขนาดเลกลง และเนองจากปญหานโครงสรางยอยเหมาะทสด (ไดเคยแสดงใหดในบททแลว) แสดงวาการนาวถสนสดของปญหายอยมารวมกบการเลอกทไดทามา จะไดวถสนสดจรง
1 Dijkstra ใชแถวลาดบธรรมดาในการสราง priority queue ซงมเวลาการทางานเปน O( |V|2 ) (อยากใหนกเรยนลองคดเองดวาหามาไดอยางไร) แตในทนเราจะใช Fibonacci heap ในการวเคราะหแทน
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 221
12
1
41
5
7
4
4
8 0
�
�
�
�
�
v1
v2 v3
v4 v5
v6
(1)
12
1
41
5
7
4
4
8 0
7
1
�
�
�
v1
v2 v3
v4 v5
v6
(2)
12
1
41
5
7
4
4
8 0
7
1
�
�
�
v1
v2 v3
v4 v5
v6
(3)
12
1
41
5
7
4
4
8 0
5
1
9
3
�
v1
v2 v3
v4 v5
v6
(4)
12
1
41
5
7
4
4
8 0
5
1
9
3
�
v1
v2 v3
v4 v5
v6
(5)
12
1
41
5
7
4
4
8 0
4
1
9
3
7v1
v2 v3
v4 v5
v6
(6)
12
1
41
5
7
4
4
8 0
4
1
9
3
7v1
v2 v3
v4 v5
v6
(7)
12
1
41
5
7
4
4
8 0
4
1
8
3
7v1
v2 v3
v4 v5
v6
(8)
12
1
41
5
7
4
4
8 0
4
1
8
3
7v1
v2 v3
v4 v5
v6
(9)
12
1
41
5
7
4
4
8 0
4
1
8
3
7v1
v2 v3
v4 v5
v6
(10)
12
1
41
5
7
4
4
8 0
4
1
8
3
7v1
v2 v3
v4 v5
v6
(11)
รปท 10–5 การหาวถสนสดจากจด v1 ถงจดอนๆ ดวยอลกอรทมของ Dijkstra
222 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
กอนอนขอพสจนกอนวา ณ ขณะใดๆ d[vi] ของจด vi ใดๆ ซงอยนอก S คอความยาวของวถสนสดจาก v1 ถง vi ทผานเฉพาะจดใน S เทานน จะขอพสจนดวยอปนยเชงคณตศาสตร ในรอบแรกเปนจรงแนเพราะ S = {}, d[vi] ของทกๆ จดเปน � ยกเวน d[v1] = 0 สมมตใหเปนจรงในหลงรอบท k พอถงตนรอบท k+1 ถาจด vg ถกเลอกรวมใน S โดยทมคา d[vg] นอยสด จดตางๆ ทตอกบ vg จะถก relax หมายความวาหลงรอบท k+1 d[vi] ของจดตางๆ เหลานอาจเหมอนเดมคอกรณไมผาน vg หรอลดลงคอกรณผาน vg (ซงอยใน S แลว) ไดวถทสนกวาซงผานเฉพาะจดใน S �
คราวนจะพสจนวาขณะเลอก vg รวมเขาใน S นน d[vg] = �(vg) ถาวถสนสดจาก v1 ถง vg นผานเฉพาะจดใน S กแสดงวาสงทตองการพสจนนนเปนจรงจากผลของยอหนาทแลว แตถาวถสนสดจาก v1 ถง vg นผานจดนอก S (ใหเปนจด vq) ดวยกอนเขาหา vg (ดรปท 10–6 ประกอบ) วถนยอมมความยาวเปน
d[vq] + (ความยาวของวถสนสดจาก vq ถง vg )
เนองจากความยาวของเสนเชอมไมตดลบ และ d[vg] � d[vq] (เพราะการเลอกแบบตระกลามบอกใหเลอกจดทม d[vi] นอยสด) ซงจะเปนไปไดกมแตกรณท d[vg] = d[vq] และความยาวของวถสนสดจาก vq ถง vg เปนศนย ซงกมความยาวรวมเปน d[vg] เชนกน สรปวาการเลอก vg แบบตระกลามจะไดวถสนสดจาก v1 ถง vg มความยาวเปน d[vg] �
v1
vg
vq
S
v1
vg
vq
S
d[vg] นอยทสด เลอก vg รวมเขาใน Sรปท 10–6 การเลอก vg แบบตระกลามไดวถสนสดจาก v1 ถง vg
จะขอเนนกอนจบหวขอนวาอลกอรทมของ Dijkstra นนจะใชไดกเฉพาะเมอเสนเชอมตางๆในกราฟมความยาวไมตดลบ (ซงเปนเงอนไขหนงทใชในการพสจน) ขอใหนกเรยนลองยกตวอยางกรณกราฟทมความยาวของเสนเชอมตดลบ ซงไดผลเฉลยทผด
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 223
ตนไมแบบทอดขามเลกสดตนไมแบบทอดขามเลกสด (minimum spanning tree) ของกราฟ G คอกราฟยอยของ G ซงตอทกๆ จดของ G ใหถงกนหมด โดยมผลรวมนาหนกของเสนเชอมนอยสด ในหวขอนเราจะนาเสนอสองอลกอรทมมชอวาอลกอรทมของพรม (Prim's algorithm) และอลอรทมของครสกล(Kruskal's algorithm) ทหาตนไมแบบทอดขามเลกสด อลกอรทมทงสองอาศยการเลอกเสนเชอมแบบตระกลาม โดยมวธการเลอกตางกน แตสามารถพสจนไดวาจะไดตนไมแบบทอดขามเลกสด (อนงจะขอใชคาวา "ความยาว" แทน "นาหนก" ของเสนเชอม เพราะฟงเปนธรรมชาตกวา)
อลกอรทมของครสกลอลกอรทมนอาศยการเลอกเสนเชอมทสนสดทละเสนทจะไมกอใหเกดวงจรใดๆ กบเสนเชอมทไดเลอกไปแลว (เราตองการตนไม กเลยตองไมมวงจร) เสนเชอมตางๆ ทเลอกไปแลวนนประกอบกนเปนปาไม การเลอกเสนเชอมใหมอาจเปนการสรางตนไมใหมทมกงเดยว หรอตอตนไมเกาใหมกงมากขน หรอเชอมตนไมยอยสองตนใหเปนตนเดยว แตในทสดแลวเมอเลอกเสนเชอมได �V�–1 เสน กจะเหลอตนไมเพยงตนเดยว 2
ประเดนทตองคดหนอยในอลกอรทมของครสกลกคอ วธตรวจสอบวาเสนเชอมทถกเลอกมาใหมน เมอรวมเขากบเสนเชอมทไดเลอกมาแลว จะกอใหเกดวงจรหรอไม เราสามารถใชโครงสรางขอมลเซตไมมสวนรวม (disjoint set) โดยใหเซตหนงเซตแทนตนไมยอยหนงตน โดยทขอมลในเซตกคอจดตางๆ ของกราฟ (เรมตน 1 เซตม 1 จด จงมจานวน �V� เซต) เราจะรวมเสนเชอม (u, v) เขาเปนสวนหนงของตนไมแบบทอดขามกเมอตนไมท u อยไมใชตนเดยวกบตนไมท v อย (FindSet(u) ตองไมเทากบ FindSet(v) ) ถารวมไดกยเนยนเซตทงสองเขาดวยกน (นนคอ Union(FindSet(u), FindSet(v) ) เขยนเปนรหสเทยมไดดงน
2 ตนไมทม n จดตองมเสนเชอม n-1 เสน
224 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
01: MST_Kruskal( G=(V,E) )02: {03: T = �04: for (each vertex v�V) MakeSet( v )05: sort E by nondecreasing weight06: for (each edge (u,v)�E in order by nondecreasing w) {07: if ( FindSet( u ) � FindSet( v ) ) {08: T = T � {(u,v)}09: Union( FindSet(u), FindSet(v) )10: }11: }12: return T13: }
บรรทดท 4 เปนการสรางเซตๆ ละหนงจด จากนนเรยงลาดบเสนเชอมจากสนสดไปยาวสด (บรรทดท 5) วงวนทบรรทดท 6 ถง 11 หยบเสนเชอมตามลาดบจากสนสดไปยาวสด (ตรงนคอการเลอกแบบตระกลาม) ถาเสนเชอมทเลอกมานเชอมตนไมทไดเลอกไวคนละตน (นนคอการทดสอบวาจดปลายของเสนเชอมนอยคนละเซต ในบรรทดท 7) กจะรวมเสนเชอมน (บรรทดท 8) และยเนยนเซตทจดทงสองเปนสมาชกอยเขาดวยกน (บรรทดท 9) การทางานสนสดเมอพจารณาครบทกเสนไดตนไมแบบทอดขามเลกสดทตองการ
กถงเวลาทตองมาวเคราะหประสทธภาพการทางานเชงเวลาของอกลอรทมกน บรรทดท 4 ใชเวลา �(�V�) บรรทดท 5 ใชเวลา O(�E�log�E�) วงวนตงแตบรรทดท 6 ถง 11 หมนจานวน �E� รอบแตละรอบมอยางมาก 4 FindSet กบ 1 Union รวมเปนการดาเนนการของเซตไมมสวนรวมเปนจานวน �(�E�) ครงบนขอมลในเซตตางๆ ทงหมด |V| จด ดงนนใชเวลารวมเปน O(�E� log*�V�) พจารณาครบทกสวนแลวจะเหนไดวาภาระมากทสดไปตกอยบรรทดท 5 ซงคอการเรยงลาดบ ดงนนอลกอรทมของครสกลใชเวลารวมเปน O(�E�log�E�)
รปท 10–7 แสดงกราฟตวอยางทเราจะใชในการหาตนไมแบบทอดขามเลกสด การเลอกเสนเชอมแบบตระกลามตามอลกอรทมของครสกลแสดงไดดงน
a z
b c
f e
100
5060
110 4560
55
5040
รปท 10–7 กราฟตวอยางสาหรบปญหาตนไมแบบทอดขามเลกสด
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 225
เลอกเสนเชอม {b, d} ยาว 40{a}, {b, z}, {c}, {e}, {f} a z
b c
f e
100
5060
110 4560
55
5040
เลอก {f, e} ยาว 45{a}, {b, z}, {c}, {f, e} a z
b c
f e
100
5060
110 4560
55
5040
เลอก {b, c} ยาว 50{a}, {b, c, z}, {f, e} a z
b c
f e
100
5060
110 4560
55
5040
เลอก {b, e} ยาว 50{a}, {b, c, z, f, e} a z
b c
f e
100
5060
110 4560
55
5040
เลอก {e,z}, {c,z}, {c,f} ไมได เพราะเกดวงจร ตองเลอก {a, b} ยาว 100{a, b, c, z, f, e}
a z
b c
f e
100
5060
110 4560
55
5040
เลอก {a, f} ไมไดเพราะเกดวงจร อลกอรทมหยดเพราะไมมเสนเชอมเหลอแลว
อลกอรทมของพรมอลกอรทมของพรมอาศยการเลอกเสนเชอมทละเสนเชนกน แตจะเลอกเสนเชอมเสนสนสดทตอกบจดของเสนเชอมทไดเลอกไวแลว และตองไมมวงจรเกดขน เสนเชอมตางๆ ทไดเลอกไวจะตอกนเปนตนไมเพยงหนงตนเสมอ ตนไมตนนเรมจากตนไมวาง และจะโตขนเรอยๆ เมอเราเลอกเสนเชอมเขามาตอ จนในทสดเปนตนไมแบบทอดขามเลกสด
ประเดนทตองคานงถงในอลกอรทมของพรมกคอจะทาอยางไร จงสามารถเลอกเสนเชอมเสนสนสดทตอกบจดของเสนเชอมทไดเลอกไวแลว และไมเกดวงจร เราอาศยหลกการทางานทคลายๆ กบอลกอรทมของดจคสตรา กาหนดให T คอตนไมทประกอบดวยเสนเชอมตางๆ ทไดเลอกไวแลว C คอจดอนๆ ทอยนอก T แตละจด vi �C ม key[vi] ซงคอความยาวของเสนเชอม
226 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
สนสดทตอระหวาง vi กบจดใน T (ถา key[vi] = � แสดงวาไมมเสนเชอมระหวาง vi กบจดใน T) และแตละจด vi ม �[vi] กากบเพอระบจดทเปนจดพอของ vi ใน T สาหรบกรณ vi�C �[vi]จะหมายถงจดใน T ทตอกบ vi ดวยเสนเชอมทสนสด
เรมดวย T = � และ C = V โดยท key[vi] = � ของทกๆ จด ยกเวนแต key[vr] = 0 (vr เปนจดใดกได) จากนนเขาสวงวนเลอกจดทม key นอยสด (ใหเปนจด vg) นาเสนเชอม (�[vg], vg) รวมเขาใน T จากนนลด key ของจด vi �C ทตอกบ vg เมอ (vg ,vi) สนกวา (�[vi], vi) (หมายความวาไดพบเสนเชอมระหวาง vi กบ T เสนใหมทสนกวาเสนเกาทตอกบ T ทไดพบมา) กระทาการเลอกจด รวมเสนเชอมเขาใน T และลด key ของจด เชนนไปเรอยๆ จน C = � เขยนเปนรหสเทยมไดดงน
01: MST_Prim( G(V,E), vr )02: {03: for (each vertex vi�V) key[vi] = �04: key[vr] = 0; �[vr] = NULL; T = �05: C = a priority queue of V using key[vi] as keys06: while ( C � � ) {07: vg = ExtractMin( C )08: T = T � {(�[vg],vg)}09: for (each vertex vi � adjacent( vg ))10: if ( vi � C AND w(vg,vi) < key[vi] ) {11: DecreaseKey( vi, w(vg,vi) )12: �[vi] = vg13: }14: }15: return T16: }
บรรทดท 3 ใหทกๆ จดม key เปน � บรรทดท 4 ตงคาใหจดพเศษ vr ซงถกกาหนดใหเปนรากของตนไมทอดขาม T ทกาลงจะปลก (เนองจากเปนราก กเลยไมมพอดงนน �[vr] = NULL) บรรทดท 5 เปนการสราง priority queue ทเกบทกๆ จดของกราฟ โดยใชขอมลใน key เปนตวจดอนดบ หลงจากนนเขาสวงวน (บรรทดท 6 ถง 14) ดงจดทม key นอยสดออกมา จากนนเพมเสนเชอมเสนใหมเขาใน T แลวเรมปรบ key ของจดอนๆ ในวงวนทบรรทดท 9 ถง 13 การทางานของอลกอรทมเสรจสนเมอ C เปนเซตวาง จะไดตนไมแบบทอดขามเลกสดเกบอยใน T
ถาเราสราง priority queue C ดวยฮปแบบฟโบนกช บรรทดท 6 ใชเวลา �(n) ExtractMin(บรรทดท 7) และ DecreaseKey (บรรทดท 11) ใชเวลาถวเฉลยเปน O(log�V�) และ O(1) ตลอดการทางานจะมการ ExtractMin เปนจานวน �V� ครง และมการ DecreaseKey เปนจานวนอยางมาก �E� ครง ดงนนเวลารวมของอลกอรทมของพรมเปน O(�E�+�V�log�V�)
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 227
รปท 10–8 แสดงตวอยางการทางานของอลกอรทมของพรม เสนทบทมจดปลายสทบแสดงตนไมทกาลงโตระหวางการทางาน โดยทจานวนในโหนดแสดงคา key ของโหนดนน
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v6400
�
�
�
�
�
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v6400
100
110
�
�
�
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v640
0
100
110
50
50
40
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v6400
100
110
50
50
40
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v6400
100
45
50
50
40
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v640
0
100
45
50
50
40
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v6400
100
45
50
50
40
11045
50
50
60100
5560
v1
v2 v3
v4 v5
v640
รปท 10–8 การหาตนไมแบบทอดขามเลกทสดดวยอลกอรทมของพรม
การพสจนความถกตองของอลกอรทมของพรมและของครสกลอลกอรทมทงสองเลอกเสนเชอมรอบละเสนเหมอนกน ตางกนตรงทของครสกลนนเลอกเสนเชอมทไมจาเปนตองตอกน ดงนนกลมของเสนเชอมจงเปนปาไม ในขณะทของพรมนนเลอกเสนเชอมทตองตอกบเสนทไดเลอกไว จงมลกษณะเปนตนไมทงอกกงกานออกไปเรอยๆ
กาหนดให T คอกลมของเสนเชอมทไดเลอกไว ภายใน T ตองมตนไมอยางนอยหนงตน (ยกเวนตอนเรมตนท T=�) ให T* เปนตนไมตนหนงใน T จะขอพสจนกอนวาถา T* เปนสวนหนงของตนไมแบบทอดขามเลกสด เสนเชอมทสนสดทมจดปลายดานหนงเทานนทตอกบ T* ตองเปนสวนหนงของตนไมแบบทอดขามเลกสดดวย กาหนดให B คอตนไมแบบทอดขามเลกสดซง T* � B ให w(B) คอผลรวมของความยาวเสนเชอมทงหมดใน B และให (u,v) เปนเสนเชอมเสนสนสดทมจดปลายเพยงหนงจดทตอกบ T* ถา (u,v) �B กตรงตามทตองการพสจน
228 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
แตถา (u,v)B ใหสงเกตวาตองมเสนเชอม (p, q) เสนหนงใน B ซงมจดปลายจดเดยวเทานนอยใน T* (เพราะ B เปนตนไมแบบทอดขาม) ถาให B’ = B {(u,v)} ยอมตองเกดวงจรขนใน B' แตถาเราตดเสนเชอม (p, q) ออกจาก B' จะได B'' = B' – { (p, q) } ซงเปนตนไมแบบทอดขามทม (u, v) จะไดวา w(B'') = w(B) + w(u, v) – w(p, q) แต w(u, v) � w(p, q) เพราะเราให (u,v) เปนเสนเชอมเสนสนสดทมจดปลายเพยงหนงจดทตอกบ T* เนองจาก w(B) � w(B'') และ w(B) นนนอยสด (จากขอกาหนด) แสดงวาจะเปนไปไดกเมอ w(u,v) = w(p,q) สรปไดวา w(B'') = w(B) นนคอ B'' กเปนตนไมแบบทอดขามเลกสดดวยทม (u, v) เปนกงอย
นอกจากน T* {(u,v)} ซงประกอบกนเปนตนไมหนงตน ตองเปนตนไมยอยของตนไมแบบทอดขามเลกสดดวย เพราะวา T* � B , B'' = B {(u,v)} – {(p, q)} และ (p, q)T* เนองจากอลกอรทมทงของครสกลและของพรม ตางกเรมจาก T*= � แลวเลอกเสนเชอมทเมอรวมกบ T* กเปนสวนหนงของตนไมแบบทอดขามเลกสดเสมอตลอดการทางาน ดงนนเมอเสรจสนการทางานยอมไดตนไมแบบทอดขามเลกสดตามตองการ �
รหสฮฟฟแมนนกเรยนคงรจกรหส ASCII ทใชในการแทนตวอกษรดวยจานวนฐานสองกนมาแลว เชน ‘A’ แทนดวย (01000001)2
‘b’ แทนดวย (01100010)2 เปนตน ASCII เปนลกษณะการเขารหสขอมลทเรยกวาแบบความยาวคงท (fixed–length) หมายความวาทกๆ ขอมลหนงตวอกษรใชเนอทเกบเทากนหมด ยงมวธการเขารหสขอมลอกแบบหนงท เรยกวาแบบความยาวแปรได(variable–length) ซงจานวนบตของรหสทแทนแตละขอมลอาจไมเทากนได จดเดนของรหสแบบความยาวแปรไดนกคอ เราสามารถใหรหสทสนๆ เพอแทนขอมลทปรากฎบอยๆ และใหรหสยาวเพอแทนขอมลทปรากฎนอย ทาใหใชปรมาณหนวยความจาในการเกบขอมลทนอยกวาแบบใชรหสความยาวคงท ตวอยางเชนในแฟมขอมลหนงประกอบดวยตวอกษรดงน ‘ช’, ‘ม’, ‘ย’, ‘ป’, ‘ส’ และ ‘า’ เปนจานวน 40, 21, 15, 14, 8 และ 2 ตวตามลาดบ ตารางท 10–1แสดงตวอยางการเขารหสแบบความยาวคงท กบแบบความยาวแปรได จะเหนไดวาแบบความยาวคงทนนใชปรมาณหนวยความจารวมเปน (40+21+15+14+8+2)�3 = 300 บต ในขณะทแบบความยาวแปรไดใชเพยง 40�1+21�3+15�3+14�3+8�4+2�4 = 230 บต
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 229
ตารางท 10–1 ตวอยางการเขารหสแบบความยาวคงทและแบบความยาวแปรได
‘ช’ ‘ม’ ‘ย’ ‘ป’ ‘ส’ ‘า’จานวน 40 21 15 14 8 2รหสแบบความยาวคงท 000 001 010 011 100 101รหวแบบความยาวแปรได 0 100 101 110 1110 1111
ปญหาในหวขอนกคอการหารหสใหกบชดขอมลทมความถกากบแตละขอมล ซงใชหนวยความจานอยทสดในการแทนชดขอมลดงกลาว
เราจะสนใจเฉพาะรหสเตมหนา (prefix code) ซงเปนรหสชดทไมมรหสใดเปนสวนเตมหนาของรหสใด รหสแบบความยาวแปรไดในตารางท 10–1 กเปนรหสเตมหนา เชนถาดทรหสของ ‘ช’ ทเปน 0 กเหนไดวาไมมรหสตวอนเลยทขนตนดวย 0 และเปนเชนนกบรหสตวอนๆ การเขารหสขอความนนกทาไดงายโดยนารหสของแตละตวอกษรมาตอกน เชน ‘สายชม’ จะไดเปน 111011111010100 เมอถงตอนถอดรหสกอาศยตนไมรหสในรปท 10–9 ชวย โดยนาขอมลในสตรงรหสมาวงไลในตนไมเรมจากราก เมอชนใบใดกไดตวอกษรทกากบใบนน
ม :21ช :40 ย :15 ป :14 ส :8 า :2
1
1
1
10
00
0 0
1
รปท 10–9 ตนไมรหสของรหสแบบความยาวแปรไดในตารางท 10–1
ชดรหสเตมหนาหนงแบบสามารถถกแทนดวยตนไมรหสหนงตนดงตวอยางในรปท 10–9กาหนดให C คอเซตของตวอกษรทตางกนในชดขอมล f(c) คอความถของ c, c�C และ dT(c) คอความลกของใบทแทน c ในตนไมรหส T ดงนนจานวนบตทตองใชในการเขารหสทงชดขอมลยอมเทากบ
��
�
CcT cdcfTB )()()(
เราเรยก B(T) วาเปนตนทนของตนไม T
230 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
รหสฮฟฟแมนเปนรหสแบบเตมหนาทเหมาะทสด คอเปนรหสซงมตนทนของตนไมรหสนอยทสด ขนตอนการสรางรหสฮฟฟแมนนนมลกษณะการทางานแบบตระกลาม เรมจากปาไมทมแตตนไมเลกๆ ตนละจด ตามจานวนตวอกษรใน C จากนนเลอกตนไมในปามาสองตนผกเปนลกของจดใหม กลายเปนตนไมตนใหมทไดจากการรวมสองตนเกา กระทาการเลอกแลวรวมในลกษณะเชนนเปนจานวน n–1 ครง (n = |C|) กเหลอเพยงตนเดยวในปา ซงเปนตนไมรหสทตองการ
รากของตนไมทกๆ ตนในปามความถกากบ โดยทความถของรากของตนไมคอผลรวมของความถของรากของตนไมยอยสองตนทเปนลก สาหรบกรณทตนไมทเพยงจดเดยวนน ความถของราก c กคอ f(c) นนเอง การเลอกแบบตระกลามใชวธการเลอกตนไมในปาสองตนทรากมความถนอยทสด ดงนนเราอาศย min–heap ในการเกบรากของตนไม โดยมความถเปนคยในการจดอนดบ เขยนเปนรหสเทยมไดดงน
01: Huffman( C[1..n] )02: {03: H = min–heap()04: for (i=1 to n) {05: x = new BinaryNode()06: x.left = x.right = NULL; x.freq = C[i].freq07: Insert( H, x )08: }09: for (i=1 to n–1_ {10: x = new BinaryNode()11: x.left = ExtractMin( H )12: x.right = ExtractMin( H )13: x.freq = x.left.freq + x.right.freq14: Insert( H, x )15: }16: return ExtractMin( Q );17: }
วงวนทบรรทดท 4 ถง 8 เปนการสรางฮปของตนไม n ตนๆ ละจดสาหรบตวอกษรแตละตวใน C วงวนท 9 ถง 15 เปนวงวนการเลอกแบบตระกลาม โดยดงตนไมสองตนทรากมความถตาทสด (บรรทดท 11 และ 12) มาเปนลกซายและขวาของรากใหมทเพงสราง ซงมความถเทากบผลรวมของรากของตนไมสองตนทเพงดงมา (บรรทดท 13) จากนนเพมกลบเขาไปในฮป กระทาการเลอกแลวรวมเปนจานวน n–1 ครง จะเหลอตนไมหนงตนในฮป เมอถกดงออกมากเปนตนไมรหสฮฟฟแมนทตองการ (บรรทดท 16)
ถาเราใชฮปธรรมดาแบบทวภาค จะไดวาการสรางใชเวลา O(n) มการลบตวนอยทสดเกดขนจานวน 2(n–1) ครง และมการเพม n–1 ครง การลบและเพมนหนงครงใชเวลา O(log n) ดงนนใชเวลารวมทงหมดในการสรางตนไมรหสฮฟฟแมนเปน O(n) + O(n log n) = O(n log n)
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 231
รปท 10–10 แสดงขนตอนการเลอกแลวรวมตนไมเพอสรางตนไมรหสฮฟฟแมนของชดตวอกษรทแสดงในตารางท 10–1 จานวนทแสดงกากบจดตางๆ คอความถ ผลลพธสดทายทไดกคอตนไมตนเดยวกบทแสดงในรปท 10–9 (อยากใหสงเกตสกนดหนงวาในตนไมรหสทแสดงใหดน เรากาหนดใหกงซายเปนเลข 0 กงขวาเปนเลข 1 จรงๆ แลวเราจะกาหนดใหแตละกงเปนอยางไรกได ตราบเทาทกงซายและกงขวาของจดๆ หนงตองมคาตางกน กงหนง 0 อกกงหนง 1 กจะไดรหสเตมหนาทมตนทนนอยทสดเทากนทงนน)
เราจะมาพสจนกนวาอลกอรทมแบบตระกลามทไดบรรยายมาน ใหรหสทมตนทนนอยทสด จะขอเรมดวยการแสดงใหเหนวารหสเตมหนาเหมาะทสดนนมโครงสรางยอยเหมาะทสด จากนนจงแสดงใหเหนถงลกษณะเฉพาะของการเลอกแบบตระกลาม
ม :21ช :40 ย :15 ป :14 ส :8 า :2 ม :21ช :40 ย :15 ป :14 ส :8 า :2
1010
ม :21ช :40 ย :15 ป :14 ส :8 า :2
10
241
10
0
ม :21ช :40 ย :15 ป :14 ส :8 า :2
10
24361
10
00 1
ม :21ช :40 ย :15 ป :14 ส :8 า :2
10
2436
601
1
10
00
0
1
ม :21ช :40 ย :15 ป :14 ส :8 า :2
10
2436
60
100 1
1
1
10
00
0 0
1
รปท 10–10 ขนตอนการเลอกแลวรวมตนไมเพอสรางตนไมรหสฮฟฟแมน
กาหนดให T คอตนไมรหสทแทนรหสเตมหนาเหมาะทสดของ C โดยท C คอเซตของตวอกษรซง f(c) คอความถของตวอกษร c�C สาหรบใบ x และ y ใดๆ ใน T ทเปนพนองกน ให z เปนจดพอของ x และ y เราจะพสจนโครงสรางยอยเหมาะทสดวา ถาให f(z) = f(x) + f(y) จะไดวา T* = T – {(z,x), (z,y)} ตองเปนตนไมรหสทมตนทนนอยทสดสาหรบชดตวอกษร C �{z} – {x, y}
232 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
x y
z
T*
T
รปท 10–11 ตนไมรหส T ประกอบดวยตนไมรหส T* ทไมรวม x และ y แตม z เปนใบใหม
จากนยามของตนทนของตนไม ��
�
CcT cdcfTB )()()( พจารณาตนไมในรปท 10–11 เรา
สามารถเขยน B(T) ในรปของ B(T*) ไดดงนB(T) = B(T*) – f(z)dT*(z) + f(x)dT(x) + f(y)dT(y)
= B(T*) – f(z)dT*(z) + (f(x) + f(y))(dT*(z)+1)= B(T*) –(f(x) + f(y)) dT*(z) + (f(x) + f(y))(dT*(z)+1)= B(T*) + f(x) + f(y)
บรรทดท 1 เปลยนเปนบรรทดท 2 ไดกเพราะ dT(x) = dT(y) = dT*(z)+1 บรรทดท 3 มาจากการท f(z) = f(x) + f(y) จากผลทได B(T) = B(T*) + f(x) + f(y) แสดงวา B(T) จะมคานอยทสดไดกเมอ B(T*) มคานอยทสด เปนการแสดงใหเหนถงโครงสรางยอยเหมาะทสดของปญหา �
คราวนเราจะมาแสดงลกษณะเฉพาะของการเลอกแบบตระกลาม ถาให x และ y คอตวอกษรใน C ทมความถตาสด การเลอกแบบตระกลามยอมเลอก x และ y มาสรางตนไมยอยกอนใคร ดงนนเมอสรางตนไมรหสแลว x และ y ยอมตองเปนใบทเปนพนองกน และเปนใบทระดบลกสดดวย (เพราะถกเลอกมารวมกอนใคร) เราจะแสดงใหเหนวามตนไมรหสทมตนทนนอยทสดซงม x และ y เปนใบระดบลกทสดและเปนพนองกน กาหนดให T คอตนไมรหสทมตนทนนอยทสดของ C และให b และ c เปนใบระดบลกทสดและเปนพนองกน ถา b และ c คอ x และ y กไมตองพสจนเพราะตรงกบการเลอกแบบตระกลาม แตถาไมใช ขอกาหนดให f(b) � f(c) และ f(x) � f(y) เราเรมดวยการสลบ b กบ x ในตนไม T ไดตนไมใหม T* ซงมตนทนดงน
B(T*) – B(T) = f(x)dT*(x) + f(b)dT*(b) – f(x)dT(x) – f(b)dT(b)= f(x)dT(b) + f(b)dT(x) – f(x)dT(x) + f(b)dT(b)= ( f(x) – f(b) )( dT(b) – dT(x) )� 0
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 233
บรรทดท 1 เปลยนเปนบรรทดท 2 เพราะวา dT*(x) = dT(b) และ dT*(b) = dT(x) และเนองจาก f(x) � f(b) จากขอกาหนดทให f(x) เปนความถนอยทสด และ dT(b) � dT(x) จากขอกาหนดทให bเปนใบทระดบลกทสด ดงนนผลคณในบรรทดท 3 ตองไมเปนบวก นนคอ B(T*) � B(T) หรอกลาวไดวาตนไมหลงการสลบ b และ x มตนทนไมเพมขน
เราทาตอโดยการสลบ c และ y ในตนไม T* ไดตนไม T** ซงสามารถแสดงใหเหนไดในทานองเดยวกนวา B(T**) � B(T*) สรปไดวา B(T**) � B(T) เนองจาก B(T) เปนตนไมรหสทมตนทนนอยทสด ยอมแสดงวา B(T**) = B(T) สรปไดวามตนไมรหสทมตนทนนอยทสดซงม xและ y เปนใบลกสดและเปนพนองกน �
แบบฝกหด1. ถาเราพจารณาวถระหวางจดสองจดใดๆ บนตนไมแบบทอดขามเลกสดของกราฟ G เราจะสรปไดหรอไมวาวถนกคอวถสนสดระหวางจดสองจดนนบนกราฟ G
2. จรงหรอไมทตนไมแบบทอดขามทไดจากอลกอรทมของดจสตรา กคอตนไมแบบทอดขามเลกสดนนเอง
3. ถาเราแทนกราฟดวยเมทรกซประชด จงเขยนรหสเทยมของอลกอรทมของพรมใหมทใชโครงสรางขอมลแบบงาย ซงสามารถหาตนไมแบบทอดขามเลสดไดในเวลา O( |V|2 )
4. สมมตเรารตนไมแบบทอดขามเลกทสดของกราฟหนงแลว และมการเพมเสนเชอมเสนใหม (พรอมจดใหมหนงจด) ตอเขากบจดเดมในกราฟหนงจด อยากทราบวาเราจะหาตนไมแบบทอดขามเลกสดของกราฟหลงการเตมเสนเชอมเสนใหมนไดในเวลาเทาใด
5. กาหนดให G คอกราฟซงความยาวของเสนเชอมระหวางจดสองจดใดๆ คอระยะทางของจดคนนบนระนาบแบบยคลด (Euclidean plane) ซงหมายความวาความยาวของเสนเชอมตางๆ ทเชอมเมองสามเมองใดๆ ตองเปนไปตามอสมการของความยาวดานของสามเหลยม (triangle inequality) นนคอผลรวมของความยาวดานสองดานใดๆ ตองไมนอยกวาดานทสาม (ซงระยะทางของเมองตางๆบนระนาบแบบยคลดมคณสมบตขอน) จงออกแบบอลกอรทมเพอหาตนไมแบบทอดขามเลกสดทใชเวลาเปน O( |V| log |V| )
234 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
6. จงยกตวอยางกราฟทมเสนเชอมบางเสนมนาหนกตดลบ ซงทาใหอลกอรทมของดจสตราใหคาตอบทผด
7. ถาเราใชฮปทวภาคในอลกอรทมของดจสตรา จะไดเวลาการทางานเปนเทาใด
8. ตนไมรหสทเราไดนาเสนอในเรองของรหสฮฟฟแมนนนเปนตนไมทวภาคททกๆ โหนดภายในมสองลก จงพสจนวาไมมตนไมรหสใดทเหมาะทสด ซงมโหนดภายในทมลกไมครบสอง
9. กาหนดใหแฟมหนงมตวอกษรทแตกตางกน n ตว เราจะไดตนไมรหสทมลกษณะใด ถาปรมาณของตวอกษรตางๆ เหลานทตองการหารหสฮฟฟแมนนนเปน fk, fk+1, fk+2, ..., fk+n-1
โดยท fi คอจานวนฟโบนกชตวท i และ k � 0
10. จงเปลยนอลกอรทมของการหารหสฮฟฟแมนในกรณทตองการหาเปนรหสฐานสามทเหมาะทสด
11. ในปญหา 0/1 Knapsack (ซงเรามสทธเลอกของทงชนหรอไมเลอกเทานน ถาอนดบทสงของตางๆ ถกเรยงตามนาหนกจากนอยไปมาก หรออนกดบเดยวกนกบเมอเราเรยงตามมลคาจากมากไปนอย จงออกแบบอลกอรทมทมประสทธภาพเพอหาผลเฉลยเหมาะทสด
12. คณสมรกษวางแผนขบรถจากสโขทยไปปตตาน รถของเขาเมอเตมนามนเตมถงสามารถวงได n กโลเมตร สมรกษมแผนทฉบบพเศษซงระบตาแหนงของปมนามน (พรอมทงระยะทางระหวางปมตางๆ) สมรกษใจรอนไมอยากจอดเตมนามนบอย จงออกแบบอลกอรทมใหเพอแนะนาสมรกษใหเตมนามนทปมใดบาง จงสามารถเดนทางถงทหมายไดโดยแวะเตมนามนเปนจานวนครงนอยสด
13. ปญหาการแลกเหรยญคอปญหาในการหาวธการการแลกเหรยญ โดยใชจานวนเหรยญทนอยสด เพอใหไดมลคารวมเทากบจานวนเงนทกาหนดให (ใหสมมตวาเรามเหรยญแตละแบบจานวนมากๆ) จงเสนออลกอรทมแบบตระกลามเพอแกปญหาน เมอ
ก) จงเสนออลกอรทมแบบตระกลามเพอแกปญหาน เมอมเฉพาะเหรยญ 1, 5, 10 บาท
ข) จงเสนออลกอรทมแบบตระกลามเพอแกปญหาน เมอมเฉพาะเหรยญ c0, c1, ..., ck โดยท c > 1 และ k � 1
Draft 1.0 : 30/10/00 5:33 : [email protected] บทท 10 อลกอรทมแบบตระกลาม 235
14. กาหนดให G = (V, E) คอกราฟๆ หนง เราตองการหาเซตยอย VC � V ทมขนาดเลกทสด โดยทเสนเชอมทกเสนของกราฟมจดปลายอยใน VC เราเรยกเซต VC นวา vertex cover อลกอรทมแบบตระกลามขางลางนหา vertex cover ขนาดเลกสดไดหรอไม จงพสจนหรอยกตวอยางขดแยง
01: vertexCover_greedy( G=(V,E) )02: {03: Vc = �04: while ( E � � ) {05: choose v � V whose degree is maximum07: VC = Vc � {v}08: V = V – {v}09: remove from E every edge incident on v10: }11: return VC12: }
236 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:33 : [email protected]
Draft 1.0 : 30/10/00 5:37 : [email protected] 237
บทท 11
ปญหาตางๆทเราพบในบททแลวๆ มานน เราโชคดพอทสามารถหาอลกอรทมทใหผลเฉลยไดดวยประสทธภาพการทางานทยอมรบได (คอใชเวลาไมเปนฟงกชนเลขชกาลง) แตสาหรบบางปญหาแลว เราจาเปนตองใชวธแจกแจงและตรวจสอบผลเฉลยในการหาคาตอบ แตปญหาทตามมากคอจานวนผลเฉลยทตองแจกแจงและตรวจสอบนนมมากมาย (เชนมจานวนเปนฟงกชนของเลขชกาลงหรอแฟกตอเรยลของขนาดของขอมล เปนตน) ดงนนการแจงกรณและตรวจสอบทกๆ กรณคงกระทาไมไดในทางปฏบต จงจาเปนตองเพมกลวธในการแจงกรณเฉพาะกรณทนาสนใจ และหลกเลยงการแจงกรณกรณทมนใจวาไมมทางเปนคาตอบ ซงทาใหสามารถแจกแจงแลวพบคาตอบไดเรวขนจนเปนทยอมรบไดในทางปฏบต
เราจะเรมบทนดวยการนาเสนอรปแบบของผลเฉลยของปญหา ซงเปนสงทตองกาหนดขนมากอน รปแบบของผลเฉลยมหลากหลายมากมายแตทพบเหนบอยไดแก วธการเรยงสบเปลยน (permutation) เซตยอย (subset) และการแบงสวนเซต (set partition) จากนนนาเสนอกระบวนวธการแจงกรณผลเฉลยในสามรปแบบดงกลาว ตามดวยการจาลองกระบวนการแจงกรณดงกลาวดวยตนไมปรภมสถานะ (state space tree) ซงมจดแทนสถานะของผลเฉลย และการแตกกงแทนการแจงกรณ ทาใหสามารถเทยบเคยงการแจงกรณผลเฉลยไดเปนการแวะผานจดในตนไม การแวะผานจดจงเปนเสมอนเปนกระบวนการคนคาตอบในตนไม วธคนทมระบบระเบยบทใชกนมากไดแกการคนตามแนวลก ตามแนวกวาง และตามตนทนนอยสด ซงประกนไดวาตองคนพบคาตอบไดแนนอน แตอาจใชเวลานานทงนขนกบตวอยางปญหา เราสามารถใชกลวธการยอนรอย (backtracking) และการขยายและจากดเขต (branch and bound) มาชวยใหสามารถคนคาตอบไดรวดเรวขน ซงจะไดนาเสนอในรายละเอยดตอไป
การคนคาตอบในตนไมและกราฟ
238 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
รปแบบของผลเฉลยในการแจงกรณและตรวจสอบผลเฉลยนน สงทเราจาเปนตองนยามใหเดนชดกคอรปแบบของผลเฉลยของปญหาทตองการแกไข โดยทวไปเราจะบรรยายผลเฉลยใหอยในรปแบบของ n สงอนดบ (n–tuple) เขยนเปน (x1, x2,..., xn ) คาของ xi ถกเลอกมาจากเซตขนาดจากด ดงนนเราสามารถหาคาตอบของตวอยางปญหาไดงายๆ (แตชา) ดวยการแจงกรณทกๆ คาของ xi ตางๆ ทเปนไปไดทงหมด และตรวจสอบแตละแบบทแจกแจงไดวาตรงตามเงอนไขของปญหาทจะเปนคาตอบไดหรอไม โดยทวไปเรามกเหนผลเฉลยอยในรปแบบของวธเรยงสบเปลยน (permutation) เซตยอย (subset) และการแบงสวนเซต (set partition) จะขออธบายดวยตวอยางของปญหาตางๆ ตอไปน
ตวอยางท 11-1 ปญหา bandwidth minimization ให G = (V, E) คอกราฟไมระบทศทาง สงทตองการคอวธเรยงจดตางๆ ของ G บนเสนตรง (ใหระยะของจดทวางถดกนหางกนหนงหนวย) เพอใหคจดทตอกบเสนเชอมเดยวกนซงวางหางกนทสดมระยะหางนอยทสด
1 2 3 4
5 6 7
1 2 3 4 5 6 7 1 2 3 4 5 6 7
รปท 11–1 ตวอยางการเรยงลาดบจดแบบตางๆ สาหรบปญหา Bandwidth Minimization
รปท 11–1 แสดงตวอยางการเรยงลาดบจดของกราฟ (รปบน) สองวธ (รปลาง) ในกรณทเรยงจดตามรปลางซาย จด 1 กบ 7 (ซงเปนจดทเสนเชอมตออยซงหางกนทสด) หางกน 6 หนวย ในขณะทกรณทเรยงจดตามรปลางขวา จะไดจดทมเสนเชอมตออยซงหางกนทสด หางกนเพยง 1 หนวย และเปนระยะหางทนอยทสด รปลางขวาจงเปนผลเฉลยทตองการ
เหนไดชดเลยวาคาตอบของปญหา bandwidth minimization ของกราฟทม n จด กคอหนงในวธเรยงสบเปลยนของจดทง n จด ดงนนหากเรากากบจดตางๆ ในกราฟดวยจานวน 1, 2, …, n ผล
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 239
เฉลยกจะมรปแบบเปน n สงอนดบ (x1, x2, ..., xn) 1� xi � n และ xi �xj เมอ i � j หรออกนยหนงผลเฉลยของปญหาอยในรปแบบของวธเรยงสบเปลยนของ {1,2,.., n}
ตวอยางท 11-2 ปญหาผลรวมของเซตยอย (sum of subsets) ให A = { a1, a2, a3, …, an } เปนเซตของตวเลขจานวนเตม, ai > 0 และมตวเลขจานวนเตม P อกหนงตว สงทตองการหาคอเซต S � A ซงมผลรวมของตวเลขใน S เทากบ P
แบบท 1 : ผลเฉลยของปญหานกคอเซตยอยของ A เชนถา n = 4 A = {25, 10, 9, 2} P = 36จะไดเซตยอยทตองการกคอ {25, 9, 2} (ใหสงเกตวาคาตอบอาจมไดมากกวาหนงเซต) เราสามารถบรรยายเซตยอยใดๆ ดวย n สงอนดบ (x1, x2,..., xn ) xi �{0, 1} (หรอจะเรยกสนๆ วาเปนสตรงของบตความยาว n ) โดยท xi = 0 เมอ ai�S และ xi = 1 เมอ ai�S ดงนนผลเฉลยของตวอยางปญหา A = {25, 10, 9, 2} P = 36 คอ (1, 0, 1, 1)
แบบท 2 : เราอาจบรรยายผลเฉลยทเปนเซตยอยดวยเลขลาดบตางๆ ของสมาชกใน A ทอยในผลเฉลย นนคอบรรยายดวย k สงอนดบ (x1, x2,..., xk ) k � n โดยท xi �{ i | 1 � i � n } ดงนนผลเฉลยของตวอยางปญหา A = {25, 10, 9, 2} P = 36 คอ (1, 3, 4) หมายความวาเซตยอยทเปนผลเฉลยประกอบดวยสมาชกตวท 1, 3, และ 4 ของ A ใหสงเกตวาผลเฉลยหลายตวอาจแทนเซตยอยเซตเดยวกนเชน (3, 4, 1) กเปนผลเฉลยของตวอยางปญหาขางบนน ดงนนเพอลดความซาซอนเราจะกาหนดให xi < xi+1 1 � i < k (นนคอตวเลขตางๆ ซงเขยนใน k สงอนดบทแทนผลเฉลยนนจะเขยนเรยงจากซายไปขวาใหมคาจากนอยไปมาก)
ตวอยางท 11-3 ปญหาการใหสจดกราฟ (vertex coloring) เปนปญหาทตองการใหสจดตางๆ ในกราฟ โดยใชสเปนจานวนนอยทสด ภายใตเงอนไขวาจดทตอกบเสนเชอมเดยวกนตองมสตางกน ตวอยางเชนกราฟในรปท 11–2 ตองใชอยางนอย 4 สจงใหสจดไดตามเงอนไข
1
2 4
65
3
รปท 11–2 ตวอยางการใหสกราฟ (กราฟนตองใช 4 ส)
240 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
เราสามารถบรรยายผลเฉลยของปญหาการใหสจดไดดวยการแบงสวนเซตของจดในกราฟ ตวอยางเชนคาตอบของการใหสจดของกราฟในรปท 11–2 คอ { {2,4}, {6}, {1,5}, {3}} โดยทแตละสวนทถกแบงมานนมจดทมสเดยวกน ปญหาทนาสนใจกคอวาเราจะบรรยายการแบงสวนเซตดวย n สงอนดบไดอยางไร ?
วธทจะนาเสนอตอไปนอาจจะดซบซอนเลกนอยในตอนแรก แตขอใหดตวอยางประกอบแลวจะเหนเบองหลงการแทนการแบงสวนเซตทงายมากดงน 1
� เขยนการแบงสวนเซตโดยเรยงตามสมาชกตวนอยทสดสดในแตละสวน เชนจากตวอยางคาตอบของการใหสกราฟขางบนน เขยนเรยงใหมได (15:24:3:6) (ตวทขดเสนใตคอตวนอยทสดในสวน เหนไดวาตวทขดเสนใตถกเรยงเปนลาดบจากนอยไปมาก)
� ใหหมายเลขสวน 0, 1, … ไลจากซายจากขวา ตวอยางเชนการแบงสวนขางบนนจะไดจด 1 และ 5 อยในสวนท 0 จด 2 และ 4 อยใน สวนท 1 จด 3 อยในสวนท 2 และจด 6 อยในสวนท 3
� กาหนดให xk คอหมายเลขสวนทเลข k เปนสมาชกอย จากตวอยางขางบนน จะได x1x2x3x4x5x6 คอ 012103 เราเรยก x1x2...xn นวาสตรง RG ยอมาจากคาวา restricted growth string (บางครงเรยกวา restricted growth function) ใหสงเกตวาคาของ xk โตไดอยางจากดตามอสมการขางลางน (สาหรบ k = 2, 3.., n โดยท x1 = 0)
xk � 1 + max( x1, x2, ..., xk–1 )
ถาเราจะลองเขยนสตรง RG ของการแบงสวนเซตทกแบบของ {1,2,3,4} จะไดดงตารางท 11–1ทแสดงในตารางนน จงใจเขยนสตรง RG ทกแบบ (สาหรบกรณ 4 หลก) เรยงลาดบจากนอยไปมากไลจากบนลงลาง เหนไดวาสตรง RG หนงแบบจะตรงกบการแบงสวนเซตหนงแบบ และจานวนการแบงสวนเซตทงหมดจะเทากบจานวนสตรง RG ทเปนไปไดทงหมด
สรปไดวาเราสามารถแทนการแบงสวนเซตไดดวยสตรง RG ซงมรปแบบเปน n สงอนดบ (x1, x2, …, xn ) โดยท x1 = 0 และ xk � 1 + max( x1, x2, ..., xk–1 ) สาหรบ k > 1
ตารางท 11–1 การแบงสวนเซตของ {1,2,3,4} และสตรง RG ตางๆ
Partitions RG strings
1 เพอความกระทดรด จะขอเขยนแบบยอๆ เชน { {2,4}, {6}, {1,5}, {3}} เขยนเปน (24:6:15:3)
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 241
(1234) 0000(123:4) 0001(124:3} 0010(12:34) 0011(12:3:4) 0012(134:2) 0100(13:24) 0101(13:2:4) 0102(14:23) 0110(1:234) 0111(1:23:4) 0112(14:2:3) 0120(1:24:3) 0121(1:2:34) 0122(1:2:3:4) 0123
ยงมปญหาอนๆ อกมากมายทตวผลเฉลยอยในรปแบบของวธเรยงสบเปลยน เซตยอย และการแบงสวนเซต เชน
� ปญหา travelling salesman ตองการหาวธเรยงสบเปลยนของเมองทใหพนกงานขายเดนทางดวยตนทนตาทสด โดยผานเมองละหนงครง
� ปญหา graph isomorphism ตองการหาวธเรยงสบเปลยนของจดของทงสองกราฟทแสดงใหเหนวากราฟทงสองนนสมรปกน
� ปญหา 0/1 Knapsack ตองการหาเซตยอยของสงของทตองเลอกเพอใหไดมลคารวมมากสดในขณะทไมเกนความจถง
� ปญหา bin packing ตองการหาการแบงสวนเซตของ {a1, a2, …, an} โดยท 0<ai�1ซงมจานวนสวนนอยทสด โดยทผลรวมของจานวนทงหมดในแตละสวนไมเกน 1
การแจงกรณและตรวจสอบผลเฉลยเมอเราสามารถกาหนดแนชดไดแลววาผลเฉลยของปญหามรปแบบอยางไรแลว กเพยงแตแจกแจงและตรวจสอบผลเฉลยทกๆ แบบวาแบบใดตรงตามเงอนไขของตวอยางปญหา กสามารถหาคาตอบได เชนการแจงกรณทกๆ วธเรยงสบเปลยนจดของกราฟ เพอหาคาตอบของปญหา
242 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
bandwidth minimization การแจงกรณและตรวจสอบทกๆ เซตยอยของจานวน วาเซตยอยใดมผลรวมเทากบคาตองการของปญหา sum of subset หรอการแจงกรณและตรวจสอบทกๆ การแบงสวนเซตของจดของกราฟในปญหา vertex coloring เพอหาการใหสทมจานวนสนอยทสด เปนตน
หวขอยอยตอไปนนาเสนอการแจงกรณวธเรยงสบเปลยน การแจงกรณเซตยอย และ การแจงกรณการแบงสวนเซต ทสามารถนาไปใชลยตรวจสอบเพอหาคาตอบของปญหาได กาหนดใหผลทไดจากการแจงกรณเกบในแถวลาดบ x[1..n] การแจงกรณทจะนาเสนอนนอาศยกลวธการเรยกแบบเวยนเกดทรบ x[1..k] (1�k�n) ทเตมคามาแลว จากนนขยายผลดวยการเตมคาของ x[k+1] ทเปนไปได แลวเรยกแบบเวยนเกดใหแจกแจงในสวนทเหลอ ดงนนจงเสมอนเปนการคอยๆ เตมคาใน x ไลจากซายไปขวา เมอเพมคาครบถงตวขวาสดกไดหนงรปแบบพรอมนาไปตรวจสอบ
แตตองขอบอกไวตรงนวามยงมวธสรางแบบอนๆ อกมากมาย อาทเชนสรางแบบสม สรางแบบทเกดการเปลยนแปลงนอยๆ จากทไดสรางครงทแลว เปนตน ผสนใจสามารถศกษาไดเพมเตมใน http:// www.theory.csc.uvic.ca/~cos
การแจงกรณวธเรยงสบเปลยนวธเรยงสบเปลยน (permutation) สาหรบชดตวเลข 1,2, ..., n มทงหมด n! แบบ การแจงกรณวธเรยงสบเปลยนกระทาไดหลากหลายรปแบบ เชนการแจงกรณตามลาดบอกษร (lexicographic order) หมายความวาเราเรมท 123...n และไปจบท n...321 โดยท permutation ทไดนนมคาเพมขนเรอยๆ เชน permutation ตางๆของ {1,2,3} ตามลาดบอกษรคอ 123, 132, 213, 231, 312, 321 เปนตน เราสามารถสราง permutation ตามลาดบอกษรแบบงายๆ ไดโดยใชโปรแกรมเวยนเกด คอยๆ ขยายขนาดของ permutation จากทถกกาหนดมา k หลกแรก (จากซายมอ) กทาการเพมหลกท k+1 ใหครบทกรปแบบซงเรยงจากนอยไปมาก ทไมไดใชตวเลขเดยวกนกบ k หลกแรก แลวเรยกแบบเวยนเกดตอ เมอใดทครบ n หลก กได permutation ตามทตองการ เขยนเปนรหสเทยมไดดงน (การเรมแจกแจงตองเรยก EnumLexiPerm( x[1..n], 0 ) )
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 243
01: EnumLexiPerm( x[1..n], k )02: {03: if ( k == n ) Check( x[1..n] )04: else {05: for (i=1 to n) {06: x[k+1] = i07: j = 108: while ( j <= k AND x[j] � x[k+1] ) ++j09: if ( j > k ) EnumLexiPerm( x[1..n], k+1 )10: }11: }
EnumLexiPerm รบแถวลาดบ x ทม permutation บางสวนตงแตตวท x[1] ถง x[k] ถา k มคาเทากบ n กสรปวาได permutation ครบถวนหนงแบบ พรอมทจะนาไปใชได (บรรทดท 3) ถายงไมครบ กเตมตวท x[k+1] ดวยเลข 1,2, ..., n ซงไมซากบ k ตวแรก (บรรทดท 8 เปนการตรวจสอบวาซากบ k ตวแรกหรอไม) แลวเรยก EnumLexiPerm แบบเวยนเกดตอเพอขยายขนาดของ permutation ทหาไดไปอกหนงตาแหนง (นนคอเพม k อกหนง ในบรรทดท 9) ) เพยงเทานฟงกชน Check กจะไดรบ permutation ทกๆ รปแบบไปตรวจสอบวาเปนคาตอบของตวอยางปญหาทกาลงสนใจหรอไม
สาหรบกรณทเราไมสนใจวา permutation ตางๆ ทสรางขนตองเรยงตามลาดบอกษร กสามารถสรางไดงายขน ดวยรหสเทยมขางลางน (การเรมแจกแจงตองเรยก EnumPermutations( x[1..n], 0 ) ขอใหนกเรยนไปลองไลดกนเอง )
01: EnumPermutations( x[1..n], k )02: {03: if ( k == 0 ) for(i=1 to n) x[i] = i04: if ( k == n ) Check( x[1..n] )05: else {06: for (i=k+1 to n) {07: Swap( x[k+1], x[i] );08: EnumPermutations( x[1..n], k+1 )09: Swap( x[i], x[k+1] );10: }11: }
การแจงกรณเซตยอยกาหนดให S = {s1, s2, ..., sn} เราสามารถแทนเซต A � S ไดดวยสตรงของบตความยาว n (x1x2...xn) โดยท xi = 1 เมอ si � A และ xi = 0 เมอ si � A ดงนนเราสรางเซตยอยดวยการตงคา
244 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
บตถดไปแบบ "เลอกไมเลอก" ทละตวดงน (การเรมแจกแจงตองเรยก EnumSubsets01( x[1..n], 0 ) )
01: EnumSubsets01( x[1..n], k )02: {03: if ( k == n ) Check( x[1..n] )04: else {05: x[k+1] = 106: EnumSubsets01( x[1..n], k+1 )07: x[k+1] = 008: EnumSubsets01( x[1..n], k+1 )09: }10: }
EnumSubsets01 รบแถวลาดบ x ทมการพจารณาเลอกไมเลอกสมาชกตวท 1 ถง k ในเซตมาแลว ถา k มคาเทากบ n กแสดงวาไดเซตยอยทสมบรณหนงแบบ พรอมนาไปใชได (บรรทดท 3) ถายงไมครบ ขยายใหพจารณาตวท k+1 ซงมสองกรณคอเลอกตวท k+1 รวมในเซตยอย (บรรทดท 5) แลวเรยก EnumSubsets01 แบบเวยนเกดตอ (บรรทดท 6) อกกรณกคอไมเลอกตวท k+1 (บรรทดท 7) แลวเรยก EnumSubsets01 แบบเวยนเกดตอ (บรรทดท 8) เพยงเทานฟงกชน Check กจะไดรบเซตยอยทกๆ รปแบบไปตรวจสอบวาเปนคาตอบของตวอยางปญหาทกาลงสนใจหรอไม
หรอในกรณทเราอยากแทนเซตยอยหนงดวยหมายเลขลาดบสมาชกในเซตทอยในเซตยอย โดยเขยนหมายเลขลาดบทงหลายเรยงจากนอยไปมาก เชนเราแทน {12, 43, 7} ซงเปนเซตยอยของ {43, 31, 12, 7, 5} ดวย (x1, x2, x3) = (1, 3, 4) (ซงคอรปแบบท 2 ทนาเสนอในตวอยางท 11-2) นนคอบรรยายดวย k สงอนดบ (x1, x2,..., xk ) k�n xi < xi+1 1� i < k โดยท xi �{ i | 1 �i� n } กสามารถกระทาไดดวยรหสเทยมขางลางน (การเรมแจกแจงตองเรยก EnumSubsets02( x[1..n], 0 ) ขอใหนกเรยนไปลองไลดกนเอง)
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 245
01: EnumSubsets02( x[1..n], k )02: {03: Check( x[1..k], n )04: for ( i=x[k]+1 to n ) {05: x[k+1] = i06: EnumSubsets02( x[1..n], k+1 )07: }08: }
การแจงกรณการแบงสวนเซตเมอเราแทนการแบงสวนเซตดวยสตรง RG กสามารถแจกแจงการแบงสวนเซตไดโดยการแจงกรณสตรง RG ทงหมด รหสเทยมขางลางนแสดงการขยายขนาดของสตรง RG ในหลกถดไป (ทางขวา) ดวยคาทเปนไดทงหมดตามอสมการ xk � 1 + max( x1, x2, ..., xk–1 ) (การเรยกใชครงแรกตองเรยก EnumPartitions( x[1..n],0 ) )
01: EnumPartitions( x[1..n], k )02: {03: if ( k == n ) Check( x[1..n] )04: else {05: if ( k == 0 )06: m = 007: else08: m = 1 + max( x[1..k] )09: for (i=0 to m)10: x[k+1] = i11: EnumPartitions( x[1..n], k+1 )12: }13: }
EnumPartitions รบแถวลาดบ x ทเกบสตรง RG บางสวนทเตมมาแลวตงแต x[1] ถง x[k] ถา k มคาเทากบ n กแสดงวาไดสตรง RG ทครบถวนหนงรปแบบพรอมนาไปใชได (บรรทดท 3) ถายงไมครบ กขยายขนาดของสตรง RG โดยเตม x[k+1] ทกรปแบบทเปนไปได ตงแต 0, 1, ..., m โดยท m=1+max(x[1..k]) (บรรทดท 8 จากอสมการของ restricted growth function) แตสาหรบกรณท k = 0 จะได x[1] มคาเปนศนยเทานน จงให m=0 สาหรบกรณน (บรรทดท 6) จากนนเตม x[k+1] (บรรทดท 10) แลวเรยก EnumPartitions ตอ (บรรทดท 11) เพยงเทานฟงกชน Check กจะไดรบสตรง RG ซงแทนการแบงสวนเซตทกๆ รปแบบไปตรวจสอบวาเปนคาตอบของตวอยางปญหาทกาลงสนใจหรอไม
246 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
ตนไมปรภมสถานะถาเราจะลองตดตามสถานะของตวแปรตางๆ ระหวางการแจงกรณเซตยอยในรปแบบท 1 (ทนาเสนอในหนาท 244) โดยการเรยก EnumSubsets01(x[1..4],0) จะไดดงตารางท 11–2
ตารางท 11–2 สถานะการทางานของ EnumSubsets01
(x1, x2, x3, x4)Call #k=0 k=1 k=2 k=3 k=4
1 (?,?,?,?)2 (1,?,?,?)3 (1,1,?,?)4 (1,1,1,?)5 (1,1,1,1)6 (1,1,1,0)7 (1,1,0,?)8 (1,1,0,1)9 (1,1,0,0)
10 (1,0,?,?)11 (1,0,1,?)12 (1,0,1,1)13 (1,0,1,0)14 (1,0,0,?)15 (1,0,0,1)16 (1,0,0,0)17 (0,?,?,?)18 (0,1,?,?)19 (0,1,1,?)20 (0,1,1,1)21 (0,1,1,0)22 (0,1,0,?)23 (0,1,0,1)24 (0,1,0,0)25 (0,0,?,?)26 (0,0,1,?)27 (0,0,1,1)28 (0,0,1,0)29 (0,0,0,?)30 (0,0,0,1)31 (0,0,0,0)
แตละบรรทดในตารางคอการเรยก EnumSubsets01 หนงครงซงเปนผลทมาจากการเรยกแบบเวยนเกด แตละครงทมการเรยกจะขยายคาของผลเฉลยไปหนงคา (คา k เพมขนหนง) โดยขยายในล กษณะเชนนจนถงสดมภขวาสดเปนสถานะท k = 4 นนคอไดผลเฉลยในรปของเซตยอยทครบถวนหนงแบบ กนาไปใชเพอตรวจสอบได การเรยกเกดขนทงสน 31 ครง ไดผลเฉลยทแทนเซตยอยทงสน 16 แบบ
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 247
เราสามารถจาลองสถานะการทางานของกระบวนการแจงกรณของ EnumSubsets01 ดวยตนไม โดยทจดของตนไมแทนสถานะการทางานซงกคอผลเฉลยทกาลงเตม และเสนเชอมแทนการเตมคาตางๆ ทเปนไปไดของผลเฉลย รปท 11–3 แสดงตนไมซงจาลองการทางานของ EnumSubsets01(x[1..4],0) โดยการเปลยนแปลงสถานะการทางานตามทไดแสดงในตารางท 11–2 นนจะเสมอนกบการแวะผานตนไมนแบบกอนลาดบ (preorder traversal) คาของกงตามวถจากรากถงจดใดๆ แทนผลเฉลยทคอยๆ ขยายขนาดขนเรอยๆ เมอวงลงจนถงใบกไดผลเฉลยสมบรณหนงแบบ ดงนนทจด a ในรปแทนสถานะทมผลเฉลยเปน (1,0,?,?) และทจด b แทนผลเฉลยสมบรณ (1,0,1,1) และทจด c แทน (0,0,1,0) ตนไมตนนมจดรวมทงสน 31 จดตรงกบจานวนการเรยกแบบเวยนเกดในตารางท 11–2 และม 16 ใบ ซงกตรงกบจานวนเซตยอยทงหมดทเปนไปได
x1=
x2=
x3=
x4=
1
1
1
1
1
1 1 1
1111111
0
0 0
0 0 0 0
0 0000000
b c
a
รปท 11–3 ตนไมจาลองการแจงกรณเซตยอยของเซตทมสมาชก 4 ตว (EnumSubsets01)
ถาเราใช EnumSubsets02 ในการแจงกรณเซตยอย (รปแบบท 2) สถานะตางๆ ในการเรยกใช EnumSubsets02(x[1..4],0) จะแสดงไดดวยตนไมในรปท 11–4 (อยากใหนกเรยนลองไลการทางานและเขยนสถานะขอผลเฉลยในทานองเดยวกบทแสดงในตารางท 11–2 ดเพอเปรยบเทยบกบตวตนไม) จะพบวาทกๆ จดในตนไมนเปนผลเฉลยทเปนไปไดทกรปแบบ (เชนจด b แทนผลเฉลย (1,3,4) และ จด c แทนผลเฉลย (3) ซงตรงกบเซตยอยเดยวกบทจด b และ cในรปท 11–3 ตามลาดบ) ตนไมตนนจงมทงสน 16 จด เทากบจานวนเซตยอยทเปนไปไดทงหมด
248 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
bx4 =
c
x3 =
x2 =
x1 =
4
3
2
1 2 3 4
44343
44 4
รปท 11–4 ตนไมจาลองการแจงกรณเซตยอยของเซตทมสมาชก 4 ตว (EnumSubsets02)
หรอกรณของการแจงกรณวธการเรยงสบเปลยน EnumPermutations (ในหนาท 243) เราสามารถจาลองการทางานของ EnumPermutations(x[1..4],0) ไดดงรปท 11–5 จด aซงเปนใบแทนวธการสบเปลยนแบบหนงคอ (2,3,1,4) และใบ b กแทน (3,4,1,2) ในขณะทจด c แทนวธเรยงสบเปลยนบางสวน (4,1,?,?) ตนไมนมใบเปนจานวนทงสน 4!
x1=
x2=
x3=
x4=
3
4 3
4 2
4 2
4 3
2 3
2
2 3 4
3
4 3
4 1
4 1
4 3
1 3
1
1 3 4
1
4 1
4 2
4 2
4 1
2 1
2
2 1 4
3
1 3
1 2
1 2
1 3
2 3
2
2 3 1
1 2 3 4
a b
c
รปท 11–5 ตนไมจาลองการแจงกรณวธเรยงสบเปลยนของ {1,2,3,4}(EnumPermutations)
เราเรยกตนไมทจาลองสถานะการทางานของการแจงกรณนวาตนไมปรภมสถานะ (state–space tree) เนองจากเปนตนไมทจดตางๆ แทนสถานะการทางานทเปนไปไดทงหมด ถาผลเฉลยมรปแบบเปน n สงอนดบคอเปน (x1, x2, …, xn) ตนไมปรภมสถานะกจะสง n จดทระดบ k เกบผลเฉลย (x1, x2, …, xk) และกงทแตกออกมาจากจดในระดบท k กคอคาทเปนไปไดของ xk+1 เราเรยกจดซงมผลเฉลยทสมบรณวาสถานะผลเฉลย (solution state) การแจงกรณและตรวจสอบจงเสมอนการคนหาจดทเปนสถานะผลเฉลย ซงเมอตรวจสอบแลวตรงตามเงอนไขเปนคาตอบของตวอยางปญหาทไดรบ เราเรยกจดทเปนคาตอบของตวอยางปญหาวาสถานะคาตอบ(answer state)
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 249
ตวอยางท 11-4 การคนคาตอบของปญหาผลรวมของเซตยอยโดยใช EnumSubsets01 กาหนดให A = { 25, 10, 9, 2 }
ถา P = 36 (นนคอหาเซตยอยทมผลรวมเทากบ 36) การแจงกรณและตรวจสอบเพอหาคาตอบจะเสมอนกบการแวะผานจดในตนไมในรปท 11–3 แบบกอนลาดบ จะไดเสนทางการคนแสดงดวยเสนทบในรปท 11–6ก ซงกจะไปพบสถานะคาตอบทจด j มผลเฉลยเปน (1,0,1,1) จะไดวา S = {25, 9, 2} มผลรวมเทากบ 36 ตามตองการ สรปไดวากวาจะพบคาตอบตองตรวจสอบจดเปนจานวน 12 จด
แตถาให P = 12 จะไปพบคาตอบทจด k ในรปท 11–6ข ซงตองตรวจสอบจดเปนจานวน 23 จด และถาให P = 16 เราจะตองตรวจสอบทกๆ จดในตนไม (จานวน 31 จด) กอนทสรปวาไมมเซตยอยทมผลรวมเทากบ 16 ตามทตองการ
x1=
x2=
x3=
x4=
1
1
1
1
1
1 1 1
1111111
0
0 0
0 0 0 0
0 0000000
j
(ก) A = { 25, 10, 9, 2 } และ P = 36x1=
x2=
x3=
x4=
1
1
1
1
1
1 1 1
1111111
0
0 0
0 0 0 0
0 0000000
k
(ข) A = { 25, 10, 9, 2 } และ P = 12รปท 11–6 ตวอยางการคนคาตอบของปญหาผลรวมของเซตยอยในตนไมปรภมสถานะ
250 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
ตวอยางท 11-5 คราวนจะขอใช EnumSubsets02 ในการแจงกรณและตรวจสอบเพอหาคาตอบของปญหาผลรวมของเซตยอย กาหนดให A = { 25, 10, 9, 2 }
เราสามารถจาลองการแจงกรณและตรวจสอบดวยการคนคาตอบในตนไมในรปท 11–4 แบบกอนลาดบ ถาให P = 36 จะไดเสนทางการคนแสดงดวยเสนทบดงแสดงในรปท 11–7ก ซงกจะไปพบคาตอบทจด j มสถานะผลเฉลยเปน (1,3,4) จะไดวา S = {25, 9, 2} สรปไดวากวาจะพบคาตอบตองแจกแจงและตรวจสอบจดเปนจานวน 8 จด
ถาให P = 12 จะไปพบคาตอบทจด k ในรปท 11–7ข ซงตองแจกแจงและตรวจสอบจดเปนจานวน 13 จด แตถาให P = 16 เราจะตองตรวจสอบทกๆ จดในตนไม (เปนจานวนทงสน 16 จด) กอนทสรปวาไมมคาตอบ
x4 =
x3 =
x2 =
x1 =
4
3
2
1 2 3 4
44343
44 4
j
(ก) A = { 25, 10, 9, 2 } และ P = 36
k
x4 =
x3 =
x2 =
x1 =
4
3
2
1 2 3 4
44343
44 4
(ข) A = { 25, 10, 9, 2 } และ P = 12รปท 11–7 ตวอยางการคนคาตอบของปญหาผลรวมของเซตยอยในตนไมปรภมสถานะ
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 251
การคนตามแนวลก แนวกวาง และตามตนทนนอยสดเราไดแสดงใหเหนวาการแจงกรณและตรวจสอบผลเฉลยในรปแบบตางๆ มการทางานเสมอนกบการคนจดทเปนสถานะคาตอบในตนไมปรภมสถานะทจาลองการแจงกรณนน โดยการแวะผานจดในตนไมแบบกอนลาดบ เราเรยกการคนจดในลกษณะนวาการคนตามแนวลก (depth–first search) ยงมวธการคนจดแบบอนๆ เชนการคนตามแนวกวาง (breadth–first search) การคนตามตนทนนอยสด (least–cost search) เปนตน ในหวขอนเราจะมาศกษาลกษณะเฉพาะของการคนตามแนวลก ตามแนวกวาง และตามตนทนนอยสด ซงเปนการคนทมระบบ เขยนโปรแกรมไดกระทดรด และเหมาะกบปญหาในลกษณะทตางกน
Live–node และ E–nodeกอนทอธบายกนในรายละเอยดตอไป ตองขอเนนยาไวตรงนวาตนไปรภมสถานะนน เปนเพยงตนไมทจาลองการแจงกรณตามทไดเสนอมา ตวตนไมไมมจรง ไมไดถกสรางขนจรง แตถาคดใหดๆ เราเทยบเคยงการเรยกแบบเวยนเกดหนงครงเสมอนการแวะผานจดในตนไม เราเทยบเคยงสถานะของการทางานซงคอผลเฉลย x[1..k] ทรบเขามาตอนเรยก เสมอนกบเปนวถจากรากถงจดนนๆ เราสามารถเทยบเคยงตอไดวาเมอมการเรยกแบบเวยนเกดครงใหม กเสมอนกบการสรางจดใหมในตนไมเพอตรวจสอบ และตราบใดยงมการเรยกแบบเวยนเกดตออก (เพอใหคาทเปนไปไดทงหมดของ x[k+1]) ซงเสมอนกบการแตกกงซงยงไมหมด การเรยกแบบเวยนเกดครงนนกยงมคางอยในหนวยความจา เสมอนกบวาจดนนกยงมชวตอย และเมอใดทการทางานภายในมการเรยกแบบเวยนเกดเมอใหคาของ x[k+1] ครบทกกรณแลวมการคนการทางานไปสผเรยก กเสมอนกบเปนการทาลายจดนนทงไป
ดงนนพอจะเหนสถานะของจดตางๆ ในตนไมวามการสรางจด มการแตกกงของจด และมการทาลายจดทง แนนอนวา ณ ขณะใดขณะหนงจะมเพยงการเรยกแบบเวยนเกดเพยงอนเดยว ทกาลงทางานอย จงเปรยบเสมอนวา ณ ขณะใดขณะหนงมเพยงจดเดยวเทานนทกาลงแตกกงอย แตวา ณ ขณะใดขณะหนงอาจมหลายๆ การเรยกแบบเวยนเกดทยงทางานคางๆ อยได (ทคางเพราะไปเรยกแบบเวยนเกดตอ) จงเปรยบเสมอนวามจดทมชวตอยหลายจดได ณ ขณะใดขณะหนง เราเรยกจดทมชวตอยนวา live node และเรยกจดทกาลงแตกกงอยวา E–node
การคนคาตอบในตนไมปรภมสถานะ มหลายลกษณะขนกบ
252 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
� วธการเลอกจด (จาก live node ทมอย) มาเปน E–node เพอแตกกง� วธการแตกกง E–node เพอใหได live node ใหมๆ เกดขน
การคนตามแนวลก ตามแนวกวาง และตามตนทนนอยสดมเกณฑในการเลอกและแตกกงทตางกน ดงจะไดนาเสนอใหหวขอยอยตอไปน
การคนตามแนวลกการคนตามแนวลกนนเหมอนกบการแวะผานตนไมแบบกอนลาดบ คอจะลงลกไปเรอยๆ นนแสดงใหเหนวาเรมดวยการสรางรากใหเปน live node รากถกเลอกใหเปน E–node แตกกงได live node ใหม จดใหมนกกลายเปน E–node ทนทเพอแตกกงตอได live node ใหม จดใหมนกกลายเปน E–node ทนทเพอแตกกงตออก เมอใดทจด E–node ปจจบนแตกกงหมดแลว (หรอแตกไมไดกรณเปนใบ) กจะถกทาลาย และเลอกจด live node กอนหนานเปนจด E–node เพอแตกกงตอ สรปไดวาจดบรรพบรษจะแตกกงหมดหลงจดลกหลาน (หรอจะพดวาจดทเกดกอนตายทหลง)
สมมตวาเราตองการคนตามแนวลกในตนไมปรภมสถานะทแสดงในรปท 11–8
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
รปท 11–8 ตวอยางตนไมปรภมสถานะ
รปท 11–9 แสดงจดตางๆ ทถกสรางขนระหวางการคนตามแนวลกในตนไมน วงกลมขาวคอ live node ในขณะทวงกลมดาคอ E–node เราตรวจสอบสถานะของจด v ตอนท v ถกสรางเปน live node และเราแตกกงจด v เมอ v ถกเลอกเปน E–node เรมดวยการสรางรากทจด 1 แตกกงซายไดจด 2 (รป 2) ซงกแตกกงซายไดจด 4 ตอ (รป 3) ซงกแตกกงซายไดจด 8 (รป 4) ถงตรงนจด 8 เปนใบไมแตกกง กถกทาลายไป ยอนขนกลบมาทจด 4 แตกกงขวาไดจด 9 (รป 5) ซงกถกทาลายอกเชนกนเพราะเปนใบ ยอนกลบมาทจด 4 ซงแตกกงหมดแลวกถกทาลาย ยอนกลบขนมาทจด 2 แตกกงขวาไดจด 5 (รป 6) กระทาการสราง แตกกง และทาลายจด ในลกษณะเชนนจนทกๆ ครบทกจด (ดรปประกอบ) จะเหนวาจดตางๆ ในตนไมถกสรางขนเปน live node ตามลาดบการคนตามแนวลก
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 253
(1)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
(2)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (9)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
(3)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (10)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
(4)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (11)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
(5)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (12)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
(6)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (13)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
(7)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (14)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
(8)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (15)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1
รปท 11–9 การคนตามแนวลก
254 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
คงเหนไดชดวาจานวนจดทเปน live node ของตนไมทมอย ณ ขณะใดขณะหนงนนเปน O(h) ซงมปรมาณนอยมากๆ เมอเทยบกบขนาดของตนไม
ตวอยางท 11-6 จงเขยนรหสเทยมเพอคนคาตอบของปญหาผลรวมของเซตยอยแบบตามแนวลก กาหนดให Aคอเซตของจานวน และให P เปนผลรวมทตองการ
ถาเรากาหนดรปแบบผลเฉลยทเปนเซตยอยใหเปนสตรงของบตความยาว n เพอระบวาจะเลอกหรอไมเลอกสมาชกในเซตมาเปนคาตอบ การคนตามแนวลกกคอการแจงกรณเซตยอย EnumSubsets01 (ในหนาท 244 ) เพยงแตเพมการตรวจสอบวาเซตยอยทแจกแจงมาไดนนมผลรวมเทากบทตองการหรอไม ดงน
01: SumofSubset_DFS01( A[1..n], P, x[1..n], k )02: {
03: if ( k==n AND ��
ni
ixiA1
][][ == P )
04: print( A[1..n], x[1..n] )05: else {06: x[k+1] = 107: SumofSubset_DFS01( A[1..n], P, x[1..n], k+1 )08: x[k+1] = 009: SumofSubset_DFS01( A[1..n], P, x[1..n], k+1 )10: }11: }
หากใครไมชอบเขยนดวยการเรยกแบบเวยนเกด กสามารถใช stack ชวยเกบสถานะ (ซงกคอผลเฉลย x[1..k]) ของจดทเปน live node ตางๆ เหตทใช stack กเพราะวาการคนตามแนวลกนนเลอก live node จดลาสดมาเปน E–node เมอใดทจดๆ หนงถกสรางขนกจะ push ลกๆ ของจดนนเรยงลาดบจากขวามาซายลงใน stack เหตผลทตองเรยงจากขวามาซายกเพราะวาการคนตามแนวลกนนตามประเพณนยมจะลงทางซายกอน ดงนนลกซายจะไดถก pop ออกมากอน (ในทนใหนกไววาการ push ไมใชการแตกกง แตการแตกกงจะเกดขนตอน pop) ดงนนการตรวจสอบสถานะของจดจะเกดขนหลง pop การคนตามแนวลกจงประกอบวงวนของการ pop ผลเฉลย x[1..k] ทกากบจดออกมาตรวจสอบ ใหคา x[k+1] และ push ผลเฉลย x[1..k+1] สาหรบทกๆ คาทเปนไปไดของ x[k+1] จากนนกลบไปทางานในวงวนเพอ pop ตอไป โดยเราเรมดวยการ push สถานะของราก เขยนเปนรหสเทยมไดดงน
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 255
01: SumofSubset_DFS02( A[1..n], P )02: {03: S = empty stack04: push( S, x[1..0] );05: while ( isNotEmpty( S ) ) {06: x[1..k] = pop( S );
07: if ( k==n AND ��
ni
ixiA1
][][ == P )
08: print( A[1..n], x[1..n] )09: else {10: x[k+1] = 0;11: push( S, x[1..k+1] );12: x[k+1] = 1;13: push( S, x[1..k+1] );14: }15: }16: }
การคนตามแนวกวางกระบวนการคนคาตอบในตนไมปร ภมสถานะอกแบบหนงทมระบบระเบยบกคอ การคนตามแนวกวาง ลกษณะการคนเชนนคลายการแวะผานจดตางๆ ในตนไมทละระดบ คอเรมตรวจสอบสถานะของจดในระดบ 0 (ราก) ตามดวยทกๆ ในระดบท 1 ตามดวยทกๆ จดในระดบท 2 ไลไปทละระดบเชนนจนถงระดบลางสด ดงนนลาดบการตรวจสอบสถานะของจดของตนไมในรปท 11–8 กคอ 1, 2, 3, ..., 15
การคนตามแนวกวางจะเปนวงวนของการเลอก E–node มาหนงจดจาก live node ตางๆ จากนนจะแตกกง E–node ทเลอกมานเพอผลตจดลกออกมาเปน live node ใหหมดทกลก (แลวตวเองกถกทาลายไป) ประเดนนจะเหนวาตางจากการคนตามแนวลกทแตกกงท ละกงแลวเปลยนจดทเพงถกสรางเปน E–node ทนท นนคอในการคนตามแนวลก จดใดเกดกอนตายทหลง แตสาหรบการคนตามแนวกวางนนเกดกอนตายกอน รปท 11–10 แสดงตวอยางการคนตามแนวกวางในตนไมปรภมสถานะในรปท 11–8 กอนอนขอยาเลกนอยกนลมวา เราตรวจสอบสถานะของจดเมอจดนนถกสรางเปน live node และเราแตกกงจดเมอจดนนถกเลอกเปน E–node การคนเรมดวยการใหรากของตนไมเปน live node (แสดงดวยวงกลมขาว – รป 1) จากนนเปลยนเปน E–node (แสดงดวยวงกลมดา) แตกกงสรางจดลกเรยงลาดบจากซายไปขวาได live node ใหมๆ แลวตวเองกถกทาลายไป (รป 2) จากนนลงมาอกหนงระดบ ไลหยบ live node จากซายไปขวามาเปลยนเปน E–node แลวแตกกงได live node เพมขนอกในระดบถดไป กระทาเชนนไปเรอยๆ (ดรปประกอบ) จะเหนวาจดตางๆ ในตนไมถกสรางขนเปน live node ตามลาดบการคนตามแนวกวาง
256 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
(1)
4
8 9 10 11 12 13 14 15
5 6 7
2 3
1 (9)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
(2)
4
8 9 10 11 12 13 14 15
5 6 7
3 2
1 (10)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
(3)
4
8 9 10 11 12 13 14 15
5 6 7
1
2 3
(11)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
(4)
4
8 9 10 11 12 13 14 15
2
7
1
5 6
3
(12)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
(5)
4
8 9 10 11 12 13 14 15
2 3
1
5 6 7
(13)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
(6)
8 10 11 12 13 14 15
2 3
1
5 6 7 4
9
(14)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
(7)
8 10
5
13 14 15
2 3
1
11
7 4
9 12
6
(15)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
(8)
8 10 11 14 15
2 3
1
5 7 4
9 12 13
6
(16)
8 10 11 14 15
2 3
1
5 74
9 12 13
6
รปท 11–10 การคนตามแนวกวาง
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 257
ถาสงเกตลาดบของจดในตนไมทถกสรางขน และลาดบของ live node ตางๆ ทถกเลอกมาเปน E–node เพอแตกกงตอนน จดทถกสรางเปน live node กอนกจะถกเลอกออกมาแตกกงกอน ดงนนจงเปนธรรมชาตอยางยงทเราจะจดเกบ live node ตางๆ ไวใน queue ดงนนวงวนการทางานระหวางการคนตามแนวกวางกคอการดงจดออกจาก queue เพอแตกกงสรางจดลกทงหมดเปน live node เพมใสเขาไปใน queue หมนวนทางานในลกษณะนจน queue หมด
ตวอยางท 11-7 จงเขยนรหสเทยมเพอคนคาตอบของปญหาผลรวมของเซตยอยแบบตามแนวกวาง กาหนดให Aคอเซตของจานวน และให P เปนผลรวมทตองการ
ถาเรากาหนดรปแบบผลเฉลยทเปนเซตยอยใหเปนสตรงของบตความยาว n เพอระบวาจะเลอกหรอไมเลอกสมาชกในเซตมาเปนคาตอบ นนคอมตนไมปรภมสถานะในลกษณะเดยวกบทแสดงในรปท 11–3 การคนตามแนวกวางกจะเรมดวยการสรางราก ตรวจสอบราก เพมรากเขา queue จากนนเขาวงวนเพอลบผลเฉลย x[1..k] กากบจดออกจาก queue เพอนามาขยายโดยการเตมคาของ x[k+1] ตรวจสอบ x[1..k+1] และเพมเขา queue ดวยทกๆ คาทเปนไปไดของ x[k+1] แลวกลบไปทางานของวงวนตอไปจนกวา queue จะหมด เขยนไดเปนรหสเทยมตอไปน
01: SumofSubset_BFS( A[1..n], P )02: {03: Q = empty queue04: Check( A[1..n], P, x[1..0])05: enqueue( Q, x[1..0] );06: while ( isNotEmpty( Q ) ) {07: x[1..k] = dequeue( Q );08: if ( k < n ) {09: x[k+1] = 1;10: Check( A[1..n], P, x[1..k+1])11: enqueue( Q, x[1..k+1] );12: x[k+1] = 0;13: Check( A[1..n], P, x[1..k+1])14: enqueue( Q, x[1..k+1] );15: }16: }17: }18: –––––––––––––––––––––––––––––––––––––––––––––––19: Check( A[1..n], P, x[1..k] )20: {
21: if ( k==n AND ��
ni
ixiA1
][][ == P )
22: print( A[1..n], x[1..n] )23: }
258 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
ใหสงเกตวาจานวน live node ทมอย ณ ขณะใดขณะหนงระหวางการคนตามแนวกวางนน มมากกวากรณของการคนตามแนวลก เนองจากจานวน live node ของการคนตามแนวลกแปรตามสงของตนไม แตจานวน live node ของการคนตามแนวกวางแปรตามจานวนจดในแตละระดบ และตนไมปรภมสถานะมกเปนตนไมอวน จงมจานวนจดในแตละระดบมาก
หลายคนคงตงคาถามตอนนวาถาจดทเปนสถานะผลเฉลยมาอยทใบหมด การคนตามแนวกวางกตองแวะผานจดภายในเปนจานวนมากแนนอน ตวอยางเชนตองการหาเซตยอยของ {25, 10, 9, 2} ทมผลรวมเทากบ 36 พบวากวาทการคนตามแนวกวางจะพบคาตอบ กตองแวะผานจดจานวน 20 จดดงแสดงในรปท 11–11 ในขณะทเราแวะผานเพยง 12 จด ถาคนตามแนวลก (ดตวอยางท 11-4 ประกอบ)
x1=
x2=
x3=
x4=
1
1
1
1
1
1 1 1
1111111
0
0 0
0 0 0 0
0 0000000
a
รปท 11–11 การคนตามแนวกวางของเพอหาเซตยอยของ {25,10,9,2} ทมผลรวมเปน 36
แลวการคนตามแนวกวางมดตรงไหน ? สาหรบกรณทจดทงหลายในตนไมมสถานะเปนผลเฉลยนน การคนตามแนวกวางเมอพบจดทเปนสถานะคาตอบแลว จะประกนไดวาพบจดทเปนสถานะคาตอบทอยในระดบตนทสดของตนไม (เพราะพจารณาลงมาทละระดบๆ) แลวประเดนนมขอดตรงไหน ? ตรงนขนกบตวปญหา ตวอยางเชนตองการหาเซตยอยทมผลรวมเทากบคาทตองการ และตองการใหไดเซตยอยขนาดเลกทสดดวย การคนตามแนวกวางจงพจารณาเซตยอยขนาดเพมขนทละหนงทกๆ แบบ ตามระดบทกาลงคน นอกจากนสาหรบบางปญหาเราอาจพบตนไมปรภมสถานะทสงมากๆ (หรอบางครงเปนอนนต) ถาคาตอบทคนอยทางขวาของตนไมในระดบไมลกนก การคนตามแนวลกกจะเสยเวลามากๆ ลงตามแนวลก ถาเปนตนไมอนนตกจะตดในวงวน (จนในทสดขอมลลน stack) ในขณะทการคนตามแนวกวางจะคนลงมาทละระดบๆ และสามารถคนพบคาตอบ (เราจะไดเหนเหตการณเชนนในเรองของกราฟปรภมสถานะในภายหลง)
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 259
การคนตามตนทนนอยสดถาคดดดๆ จะรสกวาไมเหนมเหตผลเลยสาหรบวธการเลอกจดทจะมาเปน E–node เพอแตกกงตอของการคนตามแนวลกและแนวกวาง การคนตามแนวลกบอกใหเราลงลกกอน การคนตามแนวกวางบอกใหเราลงทละระดบ แนนอนวาฟงดแลวมระเบยบด แตเปนการคนทไมไดใชความรจากตวอยางปญหาทไดรบมาเพอนาทางไปสคาตอบเลย จงเกดแนวคดวาหากเราสามารถใชขอมลจากตวอยางปญหาทรบมานน ประกอบกบผลเฉลยบางสวน x[1..k] ตามจด live node ตางๆ ทเกบอย มาคานวณหาคาอะไรบางอยาง ซงขอเรยกวาตนทน (cost) ซง "พอจะ" นามาใชเปนแนวทางวาจด live node ใดทมตนทนนอยสด "นาจะ" นาไปสคาตอบทตองการ (ใหสงเกตวาผเขยนใชคาวา "พอจะ" และ "นาจะ" ซงรสกไมคอยมนใจเลย ความจรงกตองเปนเชนนน เพราะหากเรามนใจเตมรอยวาวธคดตนทนจากผลเฉลยบางสวนทตวนอยทสดจะนาไปสคาตอบไดแน แสดงวาเราพบอลกอรทมแบบตระกลามแลว ไมตองมาเสยเวลาคนหรอก ดงนนในทนเราจงมความไมคอยมนใจ แตยงมความหวง)
อนงตองขอเนนตรงนหนอยวา สาหรบบางปญหานนแทนทจะหาจดทมตนทนนอยสด เราอาจตความหมายในอกทางหนงคอหาจดทมกาไรมากทสด (ทใชคาวาตนทนหรอกาไรนกเพราะฟงดเขาใจด) จะใชอะไรกขนกบวาแบบใดตความไดดกวา
แลวตนทนหรอกาไรทวานจะคานวณมาไดอยางไร ประเดนนขนกบตวปญหา (ทานองเดยวกบการเลอกแบบตระกลาม) ขอยกเปนตวอยางพอเหนแนว แลวเราจะไดเหนตวอยางเพมอกในภายหลง อยางไรกตามอยาลมวาเราคานวณตนทนหรอกาไรนจากสถานะของจด (ซงคอผลเฉลย x[1..k]) กบขอมลของตวอยางปญหา
ตวอยางท 11-8 ปญหาผลรวมของเซตยอย ตองการหาเซตยอยของ A = {a1, a2, …, an} ทมผลรวมเทากบ P และเลอกใชรปแบบผลเฉลย (x1, x2, …, xk) ประกอบดวยเลขลาดบตางๆ ของสมาชกใน A ทอยในผลเฉลย (แบบท 2 ทนาเสนอในหนาท 239)
กาหนดใหตนทนของจดทมผลเฉลย (x1, x2, …, xk) คอ
��
���
�
��� ��
��
otherwise
PaifaPxxxrkj x
kj xk jj 1121 ),...,,(
260 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
ตความไดวาดวยการกาหนดตนทนเชนน เราอยากเลอกจดทแทนเซตยอยซงมผลรวมใกลเคยงกบ P ใหมากทสด แตมคาไมเกน P รปท 11–12 แสดงการคนตามตนทนนอยสดเพอหาเซตยอยของ {25,10,9,2} ทมผลรวมเปน 36 (รป ก) และมผลรวมเปน 12 (รป ข)
x4 =
x3 =
x2 =
x1 =
4
3
2
1 2 3 4
44343
44 4
j
36
11 26 27 34
1 2 9
� � 0
(ก) A = { 25, 10, 9, 2 } และ P = 36
k
x4 =
x3 =
x2 =
x1 =
4
3
2
1 2 3 4
44343
44 4
12
� 2 3 10
� 0
(ข) A = { 25, 10, 9, 2 } และ P = 12รปท 11–12 ตวอยางการคนคาตอบของปญหาผลรวมของเซตยอยในตนไมปรภมสถานะ
หลายคนคงสามารถนกตวอยางทแกลงใหการคนตามตนทนนอยสด ตองแวะผานจดเปนจานวนมากได ซงกคงทาได ทงนเพราะตวฟงกชนทนาเสนอนมจดประสงคเพยงเพอใหเหนแนวทางการใชตนทนเปนตวชแนะจดทควรแตกกงตอ อยากใหนกเรยนลองคดดสวาเราควรคานวณตนทนอยางไรด ทดกวาทไดยกตวอยาง สาหรบปญหาผลรวมของเซตยอยในตวอยางน
ในการคนตามแนวลกเราเตรยมจดทจะเปน E–node ไวใน stack การคนตามแนวกวางเราใช queue สาหรบการคนตามตนทนนอยสดนนเรากจะใช priority queue ซงสรางไดดวย min heap เปนตวจดเกบ live node สาหรบกรณการคนตามตนทนนอยสด (แตถาเปนกรณการคนตามกาไรมากทสด กคงตองใช max-heap) โดยแตละจดมตนทนกากบเปน priority วงวนการคนจะประกอบดวยการเลอกจดถดไปมาแตกกง ซงกเพยงแต ExtractMin ออกจากฮป จากนนแตกกง
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 261
ไดลกๆ ทงหมดออกมา คานวนคาตนทน แลวเพมกลบเขาไปในฮป ทาการคนเชนนจนกวาจะพบคาตอบหรอฮปวาง (ซงแสดงวาไมพบคาตอบ)
ดงนนการคนคาตอบของปญหาผลรวมของเซตยอย โดยใชตนทนทนาเสนอขางบนนสามารถเขยนเปนรหสเทยมไดดงน (เราใชโครงการทางานของการแจงกรณเซตยอย EnumSubset02ในหนาท 245 H เปนฮปทใชเกบสถานะของจดโดยมตนทนซงคานวณจากฟงกชน Cost เปน priority กากบสถานะ )
01: SumofSubsets_LCSearch( A[1..n], P )02: {03: H = empty min–Heap04: Check( A[1..n], P, x[1..0])05: Insert( H, x[1..0], Cost(A[1..n], P, x[1..0]) )06: while ( isNotEmpty( H ) ) {07: x[1..k] = ExtractMin( H );08: for ( i=x[k]+1 to n ) {09: x[k+1] = i00: Check( A[1..n], P, x[1..k+1] )01: Insert( H, x[1..k+1], Cost(A[1..n], P, x[1..0]) )02: }13: }14: }15: ––––––––––––––––––––––––––––––––––––––––––––––––––––16: Check( A[1..n], P, x[1..k] )17: {
18: if ( ��
ki
ixA1
]][[ == P ) print( A[1..n], x[1..k] )
19: }20: ––––––––––––––––––––––––––––––––––––––––––––––––––––21: Cost( A[1..n], P, x[1..k] )22: {
23: if ( ��
ki
ixA1
]][[ � P ) return (P –��
ki
ixA1
]][[ )
24: return �25: }
กราฟปรภมสถานะตวอยางของปญหาทเราไดนาเสนอมาตงแตตนบทนน เราสามารถจาลองการแจงกรณผลเฉลยไดดวยตนไม ดวยคณสมบตของตนไมนนหมายความวาจดๆ หนงในตนไมมทมาไดเพยงทางเดยว (มจดพอ/แมเพยงจดเดยว) แตกมหลายปญหาทการจาลองการแจงกรณผลเฉลยในลกษณะทกระทามาจะไดเปนกราฟ กราฟทแทนการแจงกรณในลกษณะนกเรยกวาเปนกราฟปรภมสถานะ (state–space graph) จะขอนาเสนอดวยตวอยางตอไปน
262 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
ตวอยางท 11-9 ปญหาคณสองหารสาม 2 : วากนวาจานวนเตมใดๆ สามารถหาไดดวยการเรมจากเลข 1 แลวคณสอง และ/หรอ หารสาม (ปดเศษทง) ไปเรอยๆ เชน 10 = 1�2�2�2�2/3�2 เปนตน จงหาวธการไดมาซงจานวนเตม n ดวยวธขางตน
ผลเฉลยของปญหานอยในรปแบบของ (x1, x2, ..., xk ) โดยท xi = “�2” หรอ “/3” ใหสงเกตวาผลเฉลยของปญหานมขนาดไมจากด การขยายผลเฉลย x[k+1] เพมจาก x[1..k] ระหวางการแจงกรณ กกระทาไดไมยากโดยแตกกงออกสองกง เสนซายใหเปน “/3” เสนขวาใหเปน “�2”รปท 11–13 แสดงสวนบนๆ ของตนไมปรภมสถานะทจาลองการแจงกรณผลเฉลย ตวเลขภายในวงกลมทจด แทนคาทไดจากการคณสองและ/หรอหารสามตามวถจากรากลงมาถงจดนน
x1=
x2=
x3=
/3
/3
/3
/3
/3 /3 /3
�2
�2 �2
�2 �2 �2 �2
1
0 2
0 0 0 4
81000000
รปท 11–13 สวนหนงตนไมปรภมสถานะในการแจงกรณผลเฉลยของปญหาคณสองหารสาม
มองดตนไมในรปขางบนน กรสกไดทนทวามจดมากมายทใหคาซากน (ในรปนม 0 ซากน10 จด และม 1 ซากน 2 จด) ถาปลอยใหคนในตนไมนคงใชเวลานานมากๆ (เพราะมจานวนจดมาก แถมยงซากนอกดวย) นอกจากนถาปลอยใหคนตามแนวลก กคงคนไมมวนสนสด (เพราะลงซายตลอดไดคา 0 ตลอด จะมเรวกกรณเดยวคอตองการหาคา 0) 3 เราสามารถลดรปของตนไมนลงไดโดยรวมจดทใหคาเดยวกนเขาดวยกน จะไดเปนกราฟปรภมสถานะดงแสดงในรปท 11–14
2 ปญหานมทมาจากปญหา 3x+1 อยากใหนกเรยนลองสบคนแหลงขอมลอนวานคอปญหาอะไร3 ตวอยางนชใหเหนวาใชการคนตามแนวลกไมไดเลย แตใชการคนตามแนวกวางนอกจากจะพบคาตอบแลว ยงพบคาตอบทประกอบดวยการคณสองและ/หรอหารสามทมจานวนตวกระทานอยทสดดวย (เพราะจะพบคาตอบในระดบทตนทสด)
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 263
/3
/3
�2
�2
�2
1
0 2
4
8
/3
/3 �2
รปท 11–14 สวนหนงกราฟปรภมสถานะทลดรปจากตนไมในรปท 11–13
เมอเราจาลองการแจงกรณไดดวยกราฟปรภมสถานะแลว สงทตองระวงและคอยตรวจสอบเสมอระหวางการคนคาตอบในกราฟกคอ ตองไมแตกกงไปแวะผานจดทเคยผานมาแลว ดวยวธการหลกเลยงการแวะผานจดทเคยผานมาในอดต เราจะสามารถใชการคนตามแนวลก และวธอนๆ ทไดนาเสนอมาได
รปท 11–15 แสดงตวอยางการคนตามแนวลกเมอกาหนดให n = 10 เสนประสเทาแสดงใหเหนถงการไมแตกกงไปแวะผานจดทเคยผานมาแลว ซงกไดคาตอบวา 10 = 1�2�2�2�2/3�2
/3
/3
�2
�2
�2
1
0 2
4
8
/3
/3 �2
�2
16
/3
/3
/3 �2
10
5
รปท 11–15 การคนตามแนวลกไดคาตอบ 10 = 1�2�2�2�2/3�2
การคนตามแนวลกไมประกนวาจะไดคาตอบดวยจานวนตวกระทาทนอยทสด เชนเมอ n = 13 การคนตามแนวลกแวะผานจดเปนจานวน 76 จด แลวพบคาตอบคอ
13 = 1x2x2x2x2/3x2/3x2x2x2x2x2/3x2/3/3x2x2/3x2x2x2x2x2x2/3x2/3/3x2x2/3x2/3x2x2/3x2x2/3x2/3x2x2/3/3x2x2/3x2x2/3/3x2x2x2/3x2x2x2/3x2/3/3x2x2x2/3/3x2x2/3x2/3
264 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
แตถาใชการคนตามแนวกวางจะไดคาตอบ 13 = 1x2x2x2x2/3x2x2x2/3 ซงประกอบดวยตวกระทาทมจานวนนอยทสด โดยจะแวะผานจดเปนจานวน 21 จด (ลองเขยนกราฟระหวางการคนตามแนวกวางดวยมอด สกครกไดคาตอบ)
จะขอเขยนวธการคนตามแนวลกเพอหาคาตอบของปญหาคณสองหารสามนใหด (สวนวธการคนตามแนวกวางนน ขอใหนกเรยนไปเขยนกนเอง) ไดเปนรหสเทยมดงน
01: M2D3_DFS( n, x[1..k], s )02: InsertSet( T, s );03: if ( s == n ) {04: print( x[1..k] );05: found = TRUE;06: } else {07: found = FALSE;08: s1 = s / 309: if ( notExist( T, s1 ) ) {10: x[k+1] = “/3”11: found = M2D3_DFS( n, x[1..k+1], s1 )12: }13: s1 = s x 214: if ( (NOT found) AND notExist( T, s1 ) ) {15: x[k+1] = “x2”16: found = M2D3_DFS( n, x[1..k+1], s1 )17: }18: }19: return found20: }
M2D3_DFS รบคา n ทตองการหาวธสราง รบ x[1..k] ซงเปนผลเฉลยทไดสรางมา โดยทผลของการคณสองและ/หรอหารสามจากคา 1 ตามทระบใน x[1..k] นนจะมคาเทากบ s (เรมเรยกครงแรก k=0, และ s=1 ) เนองจากเรากาลงแวะผานจดทมคาเปน s กอนอนกจากอนวาเราไดแวะผาน s แลว โดยการเพมคา s ไวในโครงสรางขอมลประเภทเซต (บรรทดท 2) ถา s มคาเทากบ n กแสดงวาพบคาตอบแลว (บรรทดท 2 ถง 4) ถาไมเทากลองหารสาม (บรรทดท 7) ตรวจสอบกอนวาเปนคาใหมนเคยแวะผานมาหรอยง (บรรทดท 9) ถายงกขยายผลเฉลยและลงไปคนคาตอบตอ (บรรทดท 10 และ 11) ถาคนเสรจแลวไมพบคาตอบ กลองคณสองแลวทาการตรวจสอบวาซากบคาในอดตหรอไมกอนจะลยคนตอในทานองเดยวกน (บรรทดท 13 ถง 17)
ขอใหนกเรยนลองคดดวาอะไรจะเกดขนถาเราแตกกงในลาดบทตางจากททามา คอใหลอง “x2” กอนจงลอง “/3”
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 265
การยอนรอยอานถงตรงน นกเรยนหลายคนคงรสกวา การแจงกรณและตรวจสอบทผานๆ มานน จานวนผลเฉลยมมากเหลอเกน คอมเปนจานวนซงเปนฟงกชน exponential หรอ factorial ของขนาดของปญหา ดงนนการคนคาตอบไมวาจะตามแนวลก ตามแนวกวาง หรอตามตนทนนอยสดนนกมโอกาสทจะแวะผานจดเปนจานวนมากๆ เชนกน แตความจรงแลวขณะทเราคนจดภายในของตนไมนน เราสามารถอาศยความรอะไรบางอยางเกยวกบตวปญหามาชวยเรงความเรวในการคนจดทเปนสถานะคาตอบได โดยความรนจะชวย “เลม” (prune) ตนไมยอยๆ ขณะแวะผานจดออกจากการพจารณาได นนคอเมอมนใจวาสถานะผลเฉลยทงหลายในตนไมยอยนนๆ ไมมทางเปนสถานะคาตอบของตวอยางปญหาทกาลงคนคาตอบอย กปวยการทจะแวะผานจดตางๆ ในตนไมยอยนน การเลมตนไมขณะคนคาตอบน ในทางปฏบตสามารถขจดจานวนจดทไมตองนามาพจารณาออกเปนจานวนมากได
ขณะทกาลงแวะผานจดในตนไม (หรอกราฟ) ปรภมสถานะ ระหวางการแตกกงๆ หนง เราจะคดสกเลกนอยกอนวาจดทจะผลตเปน live node ใหมนนม "แวว" วานาไปสจดทเปนสถานะคาตอบไดหรอไม ถาเราสามารถสรปไดแนๆ วาจดตางๆ ในตนไมยอยทเรากาลงจะแตกกงไปน ไมมทางเปนสถานะคาตอบแนนอน กจะไดไมตองเสยเวลาไปผลตรากของตนไมยอยน จงเสมอนเปนการเลมตนไมยอยนออก ทาใหตนไมปรภมสถานะทตองคนมขนาดเลกลงไดโดยนย การพจารณาความมแววหรอไมมแววของจดนนจะเปนอยางไรนน ขนกบลกษณะของปญหา
ตวอยางท 11-10 ปญหา sum of subsets : ปญหานผลเฉลยอยในรปของเซตยอย ถาเรากาลงขยายผลเฉลย x[1..k] ทจดๆ หนงในตนไมเปน x[1..k+1] แลวไดผลรวมของจานวนทงหมดทไดเลอกมาเกนคา P ทตองการ กคงมนใจไดแนๆ วาจดตางๆ ในตนไมยอยขางลางยอมมผลรวมเกน Pดวย จงเหนไดชดวาจดทมผลเฉลย x[1..k+1] นนไมมแวว
ตวอยางท 11-11 ปญหา vertex coloring : ปญหานผลเฉลยอยในรปของการแบงสวนเซต (ซงแทนไดดวยสตรง RG ดงทไดนาเสนอในตวอยางท 11-3 หนาท 239) ถาเรากาลงขยายผลเฉลย x[1..k] ทจดๆ หนงในตนไมเปน x[1..k+1] แลวพบวาสททาใหจด k+1 (ซงกคอคาของ x[k+1]) นนผด
266 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
กฎ นนคอมเสนเชอมทตอจด k+1 กบจดอนทเราใหสแลวและเปนสเดยวกบสท k+1 เพยงเทานกมนใจแนวา x[1..k+1] ทเราอยากจะแตกกงไปนนไมมแวว
เมอเรานาแนวคดในการตรวจสอบความมแววของจดกอนแตกกง รวมกบการคนตามแนวลก จะไดการคนทเรยกวาการยอนรอย (backtracking) ความจรงแลวการยอนรอยเปนพฤตกรรมของการคนตามแนวลกทเมอมการแตกกงทจดๆ หนงจนหมดแลว กจะยอนตามรอยเดมทมา กลบไปยงจดระดบบนเพอแตกกงตอ เพยงแตวาเมอผนวกกบการตรวจสอบความมแววของจดดวย ทาใหเกดการยอนรอยทเรวกวาปกต เนองจากสามารถเกดการยอนรอยไดทจดภายในโดยไมตองลงไปคนระดบลางๆ แทนทจะตองไลคนจากรากถงใบแลวจงยอนรอยกลบในทางเดมเหมอนการคนตามแนวลกแบบปกต
ตวอยางท 11-12 ปญหา sum of subsets : คราวนเราจะมาใชการยอนรอยในการคนคาตอบของปญหาผลรวมของเซตยอย ขอทวนปญหาเลกนอยเราตองการหาเซตยอย S ของ A = { a1, a2, a3, …, an } ทมผลรวมเปน P จะขอใชผลเฉลยในรปแบบเลอกไมเลอก นนคอผลเฉลยมรปแบบเปน ( x1, x2, …, xn ) xi �{0, 1} โดยท xi = 0 เมอ ai�S และ xi = 1 เมอ ai�S และใชวธการตรวจสอบความมแววของจดตามตวอยางท 11-10 นนคอ (x1, x2, …, xk, xk+1) มแววเมอ i
ki iax��
�
11
� P มฉะนนกถอวาไมมแวว
ถา A = {25, 10, 9, 2} และ P = 12 รปท 11–16 แสดงเสนทางการคนคาตอบ และ “ระเบด” ในรปนนคอการแตกกงทจะไปยงจดทไมมแวว (กเลยไมไป) เรมทรากแลวอยากลงมาทางซายเปนการให x1=1 หมายความวาเลอกเลข 25 พบวามคาเกน 12 กรวาไมตองลงไปคนตอแลว (เพราะเกนคา P ทตองการ) กมาแตกกงตอทราก นนคอคนตอทางขวาเปนการให x1=0 หมายความวาไมเลอกเลข 25 ผลรวมของเลขตางๆ ทไดเลอกมากยงไมเกน 12 กลงไปคนตอตามแนวลกทางซาย x2=1 คอการเลอกเลข 10 ไดผลรวมเปน 10 ยงไมเกน 12 กลงไปคนตออกทางซาย x3=1 คอการเลอกเลข 9 คราวนไดผลรวมของเลขทไดเลอกมาเปน 19 พบวาเกน 12 ไมมแวว กไมไป แตกกงทางขวาตอ (x3=0) แลวลงซายอกครง (x4=1) กจะไดคาตอบ
และถาสงเกตอกสกนดจะพบวาสาหรบปญหาผลรวมของเซตยอย ลาดบของขอมลใน A กสงผลกบเวลาในการคนคาตอบดวย ถากาหนดให A = {2, 9, 10, 25} และ P = 12 จะไดผลของการคนแบบยอนรอยเปนดงรปท 11–17
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 267
x1=
x2=
x3=
x4=
1
1
0
0
�=0
�=25
�=0
�=10
�=10
�=12
�=19
รปท 11–16 การคนแบบยอนรอยเมอ A = {25, 10, 9, 2} และ P = 12
x1=
x2=
x3=
x4=
1
1
1
11
0
0
00
�=0
�=2
�=11 �=2
�=11 �=12
�=36 �=11 �=37 �=12
�=21
รปท 11–17 การคนแบบยอนรอยเมอ A = {2, 9 10, 25} และ P = 12
จากลกษณะการคนตามแนวลก (SumofSubset_DFS01 ทแสดงในตวอยางท 11-6 ) และการตรวจสอบความมแววของจด สามารถเขยนเปนรหสเทยมไดดงน
01: SumofSubset_BT01( A[1..n], P, x[1..n], k )02: {
03: sum = ][][1
iAixki
���
04: if ( k == n AND sum == P )05: print( A[1..n], x[1..n] )06: if ( k < n ) {07: if ( sum + A[k+1] <= P ) {08: x[k+1] = 109: SumOfSubset_BT01( A[1..n], P, x[1..n], k+1 )10: }11: x[k+1] = 012: SumOfSubset_BT01( A[1..n], P, x[1..n], k+1 )13: }14: }
268 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
โครงของการทางานหลกๆ จะคลายการคนตามแนวลกทไดแสดงในตวอยางท 11-6 เพยงแตเราเพมการตรวจสอบความมแววของจดกอนจะแตกกงซาย (x[k+1]=1) ในบรรทดท 7 กรณของการแตกกงขวานนไมตองตรวจสอบ เพราะถา (x1, x2, …, xk) มแวว (x1, x2, …, xk, 0) กตองมแววดวย
ตวอยางท 11-13 ปญหา sum of subsets : คราวนจะใชการยอนรอยเพอคนคาตอบในตนไมปรภม ทแจกแจงผลเฉลยในรปแบบทแทนเซตยอยหนงดวยหมายเลขลาดบสมาชกในเซตทอยในเซตยอยนนโดยเขยนหมายเลขลาดบทงหลายเรยงจากนอยไปมาก (ซงคอรปแบบท 2 ทไดนาเสนอในตวอยางท 11-2) และใชวธการตรวจสอบความมแววของจดตามตวอยางท 11-10 นนคอ (x1, x2, …, xk, xk+1) มแววเมอ � �
�
11
ki xi
a � P มฉะนนกถอวาไมมแวว
ถา A = {25, 10, 9, 2} และ P = 12 รปท 11–18 แสดงเสนทางการคนคาตอบ และ “ระเบด” ในรปนนคอการแตกกงไปยงจดทไมมแวว เรมทรากแลวอยากลงมาทางกงซายซงคอการเลอกเลข 25 (x1=1) พบวามคาเกน 12 กรวาไมมแวว ไมตองลงไปคนตอ จงไปคนตอในกงถดไปคอการเลอกเลข 10 (x1=2) มผลรวมเปน 10 ไมเกน 12 กลงไปคนตอคอการเลอกเลข 9 (x2=3) คราวนไดผลรวมของเลขทไดเลอกมาเปน 10+9=19 พบวาเกน 12 จงไปคนตออกกงหนง (x2=4) ไดผลรวมเปน 12 ตรงตามทตองการ
�=0
�=25
�=10
�=19
�=12
x4 =
x3 =
x2 =
x1 = 2
4
รปท 11–18 ตวอยางการยอนรอยในตนไมปรภมสถานะของปญหาผลรวมของเซตยอย
จากลกษณะการคนตามแนวลก (SumofSubset_DFS02 ทแสดงในตวอยางท 11-6 ) และการตรวจสอบความมแววของจด (เพมการตรวจสอบนทบรรทด 7) สามารถเขยนเปนรหสเทยมไดดงน
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 269
01: SumOfSubset_BT02( A[1..n], P, x[1..n], k )02: {
03: sum = ��
ki
ixA1
]][[04: if ( sum == P ) then print( A[1..n], x[1..k] )05: for (i=x[k]+1 to n) {06: x[k+1] = i07: if ( sum + A[x[k+1]] <= P )08: SumOfSubset_BT02( A[1..n], P, x[1..n], k+1 )09: }10: }
เราสามารถออกแบบการตรวจสอบความมแวว ใหสลบซบซอนมากกวาทไดนาเสนอมากได เพอใหสามารถเลมตนไมออกไดมากขน เชน �
�
ki xi
a1
+ ���
nxi i
ka
1� P แสดงวายงมแวว
อยากใหนกเรยนลองคดดเองวาทาไมถงเปนเชนนน และลองเพมเงอนไขใหมากกวาน ซงสงใหสามารถเลมตนไมไดมากขน
ตวอยางท 11-14 ปญหา n ควน : กาหนดใหมตารางขนาด n�n ชอง และควน n ตว ปญหา n ควน (n–queen problem) คอปญหาการหาวธการวางควนทง n ตวบนตารางทไมทาใหควนตวใดมองเหนควนตวอนๆ 4 รปท 11–19 แสดงผลเฉลยของปญหา n ควน เมอ n=4 และ 5
Q QQ Q
Q QQ Q
n = 4 Q n = 5
รปท 11–19 ผลเฉลยของปญหา n ควน
รปแบบของผลเฉลยมหลายแบบ ดงน
� แบบท 1 : กาหนดใหแตละชองในตารางมหมายเลขกากบไลจาก 1, 2, ..., n2 จะไดรปแบบของผลเฉลย เปน n สงอนดบ ( x1, x2, ..., xn ) โดยท xi �{ i | 1 � i � n2} นนคอเราบรรยายผลเฉลยดวยตวเลข n ตวทระบหมายเลขชองทวางควน n ตว ผลเฉลยจะมคาได n2n แบบ รปแบบนม n สงอนดบมากมายทมคาซงไมมทางเปนคาตอบของปญหาได เชนกรณ xi ซาคากบ xj โดยท i � j
4 ควนในหมากรกฝรงนนจะสามารถวงไดทงขนบนลงลาง ทางซายทางขวา และตามแนวทแยง ไดระยะทางไกลถงขอบตาราง
270 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
� แบบท 2 : เราเพมเงอนไข xi < xi+1 เพอแกปญหาไมมคา xi ซากนของแบบแรก นนคอเปนการเลอกเลข n ตวจากตวเลขทเปนไปได n2 ตว ดงนนรปแบบของผลเฉลยเปน ( x1, x2, ..., xn ) โดยท xi �{ i | 1 � i � n2} และ xi < xi+1 1 � i < n จงมผลเฉลยทงสน C(n2, n) แบบ รปแบบนกมปญหาเชนมหลายๆ ผลเฉลยทวางควนมากกวาหนงตวในแถวแนวนอนเดยวกน เปนตน
� แบบท 3 : เพอความมนใจวาจะไมมการวางควนมากกวาหนงตวในหนงแถวแนวนอน เราจะเลกใหหมายเลขกบแตละชอง แตจะกาหนดหมายเลขใหแตละแถวแนวตงเปน 1 ถง n แลวใหผลเฉลยเปนตวเลข n ตวแทนหมายเลขแถวแนวตงของตาแหนงควนในแตละแถวแนวนอน รปแบบของผลเฉลยเปน ( x1, x2, ..., xn ) โดยท xi �{ i | 1 � i � n } เหมอนกบการกาหนดพกดใหควนตวท i อยตาแหนง ( i, xi ) ดงนนจะมผลเฉลยทเปนไปได nn แบบ แตเหนไดวามกรณทหนงแถวแนวตงมควนไดหลายตว ซงไมมทางเปนคาตอบได
� แบบท 4 : กาหนดรปแบบของผลเฉลยใหเปนวธเรยงสบเปลยน (permutation) ของ {1,2,..., n} นนคอกาหนดใหเปน ( x1, x2, ..., xn ) โดยท xi �{ i | 1 � i � n} และ xi � xj เมอ i �j ซงจะสามารถขจดปญหากรณทควนอยแนวตงเดยวกนไปไดโดยอตโนมต และมจานวนผลเฉลยทงสน n! แบบ แตกยงมปญหาวาบางผลเฉลยนนเปนคาตอบไมไดเพราะมควนเกนหนงในแนวทแยงเดยวกน
เราไดแสดงใหเหนถงการกาหนดรปแบบของผลเฉลยทมผลตอจานวนผลเฉลยทเปนไปได รปแบบทตองการคอรปแบบทไดจานวนผลเฉลยทงหมดนอยๆ สาหรบปญหา n ควน เราเลอกแบบสดทายเพราะ n2n � C(n2, n) � nn � n!
จากรปแบบของผลเฉลยในแบบท 4 เรากสามารถอาศยการแจงกรณและตรวจสอบวธเรยงสบเปลยน (EnumPermutations ในหนาท 243) เพอหาคาตอบได ถา n = 4 จะจาลองไดดวยตนไมปรภมสถานะในรปท 11–20
ผลเฉลย (x1, x2, ..., xk) กคอตาแหนงของการวางควน k ตว ใน k แถวแรก (แถวละหนงตว) โดยท xi กคอหมายเลขชองของควนในแถวท i (x1, x2, ..., xk) มแววกเมอควนทง k ตวนไมมตวใดเหนกนเลยตามแนวทแยง (แนวอนไมตองไปคด เพราะรปแบบของผลเฉลยนนบงคบใหไมเหนกน) ถาเราขยายผลเฉลยเปน (x1, x2, ..., xk, xk+1) ผลเฉลยนจะมแววกเมอ xk+1 ซงคอตาแหนง
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 271
ของควนตวท k+1 นนไมอยในแนวทแยงใดๆ กบควน k ตวกอนหนา ดงนนสามารถเขยนการคนคาตอบของปญหา n ควนดวยการยอนรอยเปนรหสเทยมไดดงน
x1=
x2=
x3=
x4=
3
4 3
4 2
4 2
4 3
2 3
2
2 3 4
3
4 3
4 1
4 1
4 3
1 3
1
1 3 4
1
4 1
4 2
4 2
4 1
2 1
2
2 1 4
3
1 3
1 2
1 2
1 3
2 3
2
2 3 1
1 2 3 4
รปท 11–20 ตนไมปรภมสถานะของปญหา 4 ควน
01: nQueen_BT( x[1..n], k )02: {03: if ( k == 0 ) for(i=1 to n) x[i] = i04: if ( k == n ) print( x[1..n] )05: else {06: for (i=k+1 to n) {07: Swap( x[k+1], x[i] );08: if ( promising( x[1..k+1] ) )09: nQueen_BT( x[1..n], k+1 )10: Swap( x[i], x[k+1] );11: }12: }13: }14:15: promising( x[1..k] )16: {17: for (j=1 to k–1)18: if (abs(x[j]–x[k])==abs(j–k) ) return FALSE19: return TRUE20: }
โครงการทางานมลกษณะเหมอนการแจงกรณวธการเรยงสบเปลยน (EnumPermutationsในหนาท 243) เพยงแตเพมการตรวจสอบการขยายผลเฉลยวามแววหรอไมในบรรทดท 8 โดยเรยกฟงกชน promising ขอใหนกเรยนไปดรายละเอยดของ promising กนเองในบรรทดท 15 ถง 20
รปท 11–21 แสดงจดทมการแวะผานและเสนเชอมทมการแตกกงระหวางการคนคาตอบดวยการยอนรอย ตนไมนมจานวนจดทงสน 65 จด แตพอเราคนแบบยอนรอย จะเลมตนไมเหลอแคทแสดงดวยสเขมในรปท 11–21 คอมการแวะผานจดเพยง 17 จดเทานนกไดคาตอบการวางควนสองรปแบบ
272 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
2
x4= 3 2
x3= 1 4 3
x2= 3 4 4 1 12
x1= 1 2 3 4
รปท 11–21 การยอนรอยในตนไมปรภมสถานะของปญหา 4 ควน
หากจะลองเปรยบเทยบการคนดวยการยอนรอย กบการแจงกรณและตรวจสอบวธเรยงสบเปลยน (EnumPermutations ซงกคอการคนตามแนวลกนนเอง) จะพบวาการยอนรอยคนพบคาตอบไดเรวกวามากๆ ตารางท 11–3 เปรยบเทยบจานวนจดทแวะผานในตนไมปรภมสถานะในการยอนรอย กบจานวนวธเรยงสบเปลยนทตองตรวจสอบในการแจงกรณ จนกวาพบคาตอบแรก กบจนกวาจะพบทกคาตอบ
ตารางท 11–3 การเปรยบเทยบจานวนจดทแวะผานในการยอนรอยกบจานวนวธเรยงสบเปลยนทตรวจสอบในการแจงกรณ
Backtracking EnumPermutationsnFirst Soln All Soln First Soln All Soln
4 9 17 12 246 33 153 188 7208 117 2,057 2,830 40,320
10 103 35,538 59,034 3,628,80012 262 856,189 4,546,044 479,001,60014 1,915 27,358,553 572,457,587 87,178,291,200
ถงแมการยอนรอยจะใหคาตอบไดเรวกวาการแจงกรณและตรวจสอบกตาม แตกยงทางานชามากเมอ n มคามาก (อยากใหนกเรยนลองเขยนโปรแกรมแลวสงคนคาตอบกรณ n = 100 ด) ในบทถดไปเราจะนาเสนอกลวธอนๆ ทหาคาตอบของปญหา n ควนนในเวลาเรวกวาการยอนรอยมากๆ
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 273
ตวอยางท 11-15 ปญหา 0/1 Knapsack : กาหนดใหมของอย n ชน ชนท i หนก wi และมมลคา vi เรามถงอยหนงใบทรบนาหนกไดไมเกน W ปญหา 0/1 knapsack กคอจะเลอกหยบของชนใดใสถงด จงจะไดมลคารวมสงสด โดยทถงไมขาด ปญหานสามารถหาผลเฉลยเหมาะทสดไดดวยกาหนดการพลวต (ใหนกเรยนลองคดดเองวาจะทาอยางไร) ซงใชเวลาการทางานเปน �(nW) เปนเวลาซงแปรตามคาของ W ดงนนยอมแปรเปนฟงกชน exponential ของขนาดของ W
คราวนเราจะมาลองแกปญหานกนดวยการยอนรอย ผลเฉลยของปญหานกเปนเซตยอยของของทใหเราเลอก จะขอแทนเซตยอยหนงดวยหมายเลขลาดบสมาชกในเซตทอยในเซตยอยนนโดยเขยนหมายเลขลาดบทงหลายเรยงจากนอยไปมาก (นนคอผลเฉลยอยในรปแบบท 2 ทไดนาเสนอในตวอยางท 11-2) จะไดตนไมปรภมสถานะของปญหานในลกษณะเดยวกบของปญหา sum of subsets (ตวอยางท 11-13) ดงนนจงมโครงของการทางานคลายกน จะตางกนกตรงทปญหา 0/1 Knapsack นนเปนปญหาการหาคาเหมาะทสด ดงนนจงตองคนตนไมทงตนเพอหาผลเฉลยทไดมลคารวมสงทสด
แตความจรงเรากคงไมตองวงคนทงตนหรอก เพราะวาการยอนรอยชวยเลมตนไมยอยออกบางสวนทงได การตรวจสอบวาการขยายผลเฉลยจาก (x1, x2, …, xk) เปน (x1, x2, …, xk, xk+1) วามแววหรอไมนน กระทาไดงายๆ คอการตรวจสอบวาถงรบนาหนกไหวหรอไม ถาไหวกมแวว เขยนไดเปนรหสเทยมดงน01: Knap_BT( v[1..n], w[1..n], W, x[1..n], k, Vmax )02: {
03: sumV = ��
ki
ixv1
]][[ ; sumW = ��
ki
ixw1
]][[
04: if ( sumV > Vmax ) {05: Vmax =sumV06: optSoln[1..k] = x[1..k]07: }08: for (i=x[k]+1 to n) {09: x[k+1] = i10: if ( sumW + w[x[k+1]] <= W )11: Knap_BT( v[1..n], w[1..n], W, x[1..n], k+1, Vmax)12: }13: }
Knap_BT รบผลเฉลย x[1..k] ทมแวว ถามมลคารวมมากกวาผลเฉลยทเคยพบมา (Vmax) กจะปรบคา Vmax พรอมทงจาผลเฉลยนไวดวย (บรรทดท 4 ถง 6) จากนนขยายผลเฉลยเพอคนตอ
274 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
ตามแนวลก แตกอนจะลงไปคนตอกตรวจสอบกอนวาผลเฉลยทขยาย x[1..k+1] นมแววหรอไม (บรรทดท 10)
มาดตวอยางการคนคาตอบโดยใชการยอนรอย กาหนดใหมของ 6 ชน ซงมมลคาและนาหนกดงแสดงขางลางน และถงทใชใสของรบนาหนกไดมากสด 23
1 2 3 4 5 6vi 10 12 6 10 2 6wi 10 14 7 12 6 24 W = 23
10 14 7 12 6
7 12 6 7 6 12 6 6
0
10 12 6 10 2
16 12 18
18
16 8 1220 14
6
w
x1 =
w
x2 =
w
x2 =
รปท 11–22 ตวอยางการคนคาตอบของปญหา 0/1 knapsack ดวยวธการยอนรอย
รปท 11–22 แสดงการคนคาตอบในตนไมปรภมสถานะ จานวนในวงกลมซงแทนจดของตนไมคอมลคารวมของของทงหมดทไดเลอกมา จานวนกากบกงคอนาหนกของของชนซงตดสนใจเลอก (จานวนตรงนไมไดแทน xi เหมอนกบทเคยเขยนมา แตแทน w
xi เพราะจะสอความหมายกวา) เสนประสเทาแทนกงทลองแตกไปแตไมมแวว ทกๆ จดทมแววทแวะผานนนมสถานะเปนผลเฉลยทงสน แตเมอคนจนยอนรอยกลบมาทรากแลว จะพบวาจดทแสดงดวยสดาทบนนคอจดทมมลคารวมสงทสด ดงนนคาตอบคอ (x1, x2, x3) = (1,3,5) มนาหนกรวมเปน 22 มลคารวมเปน 20
ตนไมปรภมสถานะทงตนของตวอยางนมจานวนจดทงสน 26 จด การยอนรอยดวยวธการตรวจสอบจดวามแววหรอไมอยางงายๆ ทไดนาเสนอมาน สามารถเลมตนไมยอยออกไปจนเหลอใหแวะผานเพยง 15 จดเทานน
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 275
การขยายและจากดเขตการคนคาตอบดวยวธการยอนรอยทไดนาเสนอในหวขอทแลวนน มลกษณะการคนตามแนวลก โดยจะลงไปคนตามแนวลกตอเฉพาะกบจดทมแววเทานน นนคอจะเลมตนไมออกเมอพบจดทไมมแวว ประสทธภาพการทางานจงขนกบวธการตรวจสอบความมแววของจด การคนตามแนวลกนนเลอกลงไปทางกงซายกอน รอจนยอนรอยเสรจกลบมาทเดมแลวจงลงคนตอกงถดไป กระทาเชนนจากซายไปขวา จงอาจมคนตงขอสงเกตแลวถามวา “ทาไมตองเลอกลงกงซายกอน ?” คาตอบกคอ “เพราะวางายด เขยนโปรแกรมกสนด (ใชการเรยกแบบเวยนเกด) เนอทหนวยความจากใชไมมาก (แปรตามความลกของตนไม)” แตถาเรายอมเขยนโปรแกรมยงขน ใชเนอทมากขน แตตองการใหคนพบคาตอบไดเรวๆ จะทาอยางไร คาตอบกคอใหเลอกใชการคนทเรยกวาการขยายและจากดเขต (branch and bound)
การขยายและจากดเขตเหมาะกบปญหาการหาคาเหมาะทสด โดยอาศยการคานวณขอบเขตลางของตนทน5 กากบจด live node ตางๆ แลวใชขอบเขตนเปนปจจยในการเลมตนไม
55
60 65 68
65
121
65100 70 90
85
110
1
2
3
4
5
6
รปท 11–23 ตวอยางการใชขอบเขตของผลเฉลยเพอเลมตนไม
ขอยกตวอยางประกอบในรปท 11–23 วงกลมขาวแทนจดในตนไมทแตกกงเสรจหมดแลว วงกลมดาแทน live node สเหลยมแทนจดทเปนสถานะผลเฉลย จานวนภายในวงกลมคอขอบเขตลางของตนทนทคานวณได ณ จดนน จานวนภายในสเหลยมคอตนทนของผลเฉลยทไดคนพบ และ ตวเลขกากบขางนอกวงกลมคอลาดบของจดทถกแตกกง (อยาเพมไปสนใจตอนนวาทาไมลาดบการแตกกงมนแปลกๆ) จากรปพบวาระหวางการคนเราไดพบผลเฉลยมา 3 ผลเฉลยแลว 5 หรอเปนขอบเขตบนของกาไรกได ทงนกขนกบลกษณะของฟงกชนจดประสงควาตองการคานอยทสดหรอมากทสด แตในการบรรยายนจะขอสมมตใหเรากาลงสนใจหาตนทนนอยสด
276 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
ตวทมตนทนนอยสดคอ 85 (ซงอาจมผลเฉลยอนทนอยกวาทจะพบในอนาคตกได) ถอไดวา 85เปนขอบเขต “บน” ของผลเฉลยทเราสนใจ (นนคอจะไปสนใจผลเฉลยทมากกวา 85 ทาไมในเมอเรากาลงหาผลเฉลยทมตนทนนอยสด) และตอนนเราม live node อย 3 จด (จดดาในรป) ซงมขอบเขตลางของตนทนกากบคอ 100, 70, และ 90 ยอมแสดงวาไมจาเปนตองไปแตกกงตอจาก live node จดแรก และจดทสาม เนองจากมขอบเขตลางของตนทนมากกวา 85 ปวยการทจะลงไปคน (นนคอคนแลวกไมมทางไดนอยกวา 100 กบ 90 ตามลาดบ ซงแยกวาผลเฉลยทไดพบมา) จงเทากบเปนการเลมตนไมยอยออกไดสองตน
กลาวโดยสรป เราคานวณขอบเขตลางของตนทนเพอกากบไวทจดตางๆ เราจาตนทนของผลเฉลยดทสดทไดคนพบมาเปนขอบเขตบนของตนทน เพอเลมตนไมยอยซงรากมขอบเขตลางของตนทนสงกวาตนทนของผลเฉลยดทสดทไดพบมา
การคานวณและใชขอบเขตในการเลมตนไมในลกษณะน สามารถใชรวมกบการคนทงตามแนวลก ตามแนวกวาง และตามตนทนนอยสด โดยทวไปพบวาจะใชคกบการคนตามตนทนนอยสด โดยใชขอบเขตลางของตนทนทกากบจดเปนปจจยในเลอกจดทเหมาะสมทจะแตกกงเปนจดถดไปนน ซงกเหนไดวามเหตมผล เพราะเรากอยากเลอกแตกกงทจดซงมสทธจะไดตนทนนอยสดไวกอน (ลาดบของจดทถกแตกกงในรปท 11–23 กเปนการคนตามตนทนนอยสด) เหนไดวาการขยายและจากดเขตผสมผสานทงการเลอกไปคนทจดทเหมาะสม และการเลมตนไมออก ซงใชลกษณะเฉพาะของทงตวปญหาเอง และของตวอยางปญหาทกาลงคนคาตอบ
ตวอยางท 11-16 ปญหา 0/1 Knapsack : กาหนดใหมของอย n ชน ชนท i หนก wi และมมลคา vi เรามถงอยหนงใบทรบนาหนกของไดไมเกน W ปญหา 0/1 knapsack กคอจะเลอกหยบของชนใดใสถงด จงจะไดมลคารวมสงสด โดยทถงไมขาด
ปญหานเปนการหาคาเหมาะทสดแบบตองการกาไรมากทสด (ซงจะตรงขามกบแบบตนทนนอยสดทไดอธบายมา) ดงนนเราตองมวธคานวณขอบเขตบนของมลคารวม ณ จดตางๆ ในตนไม และคอยจามลคารวมของผลเฉลยทพบมาแลวไวเปนขอบเขตลางของคาตอบ
ถาเราอนญาตใหเฉอนของออกเปนบางสวนไดปญหานเรยกวา fractional knapsack ทสามารถหาผลเฉลยเหมาะทสดไดในเวลาอนรวดเรวดวยอลกอรทมแบบตระกลาม (ตามทไดนาเสนอในบททแลว) โดยเลอกของทมมลคาตอนาหนกสงสดกอน แนนอนวาการอนญาตใหเฉอนของ
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 277
ออกไดบางสวนใน fractional Knapsack ยอมตองไดของมลคารวมไมนอยไปกวาคาตอบทไดจาก 0/1 knapsack ดงนนเราสามารถใชคาตอบของปญหา fractional knapsack มาเปนขอบเขตบนของมลคารวมเพอใชกากบจดตางๆ ในตนไมได
ผลเฉลยของ 0/1 knapsack อยในรปแบบของเซตยอย ดงนนจะขอแทนเซตยอยหนงดวยหมายเลขลาดบสมาชกในเซตทอยในเซตยอยนนโดยเขยนหมายเลขลาดบทงหลายเรยงจากนอยไปมาก (เชนเดยวกบทใชในตวอยางท 11-15) กาหนดใหจด u มผลเฉลย (x1, x2, ..., xk) กากบอย หมายความวาเราพจารณาเลอกของมาแลว k ชน (ชนท x1, ชนท x2, …, ชนท xk) มมลคารวมเปน �
�
ki xi
v1
และมนาหนกรวมเปน��
ki xi
w1
ยงเหลอชนท xk+1 ถงชนท n ทยงไมไดพจารณา ดงนนถาให Vf คอมลคารวมของผลเฉลยเหมาะทสดของปญหา fractional knapsack สาหรบการเลอกของชนท xk+1 ถงชนท n ใสถงทรบนาหนกได W–�
�
ki xi
w1
จะไดวา
��
ki xi
v1
+Vf คอขอบเขตบนของมลคารวมทจด u
มาดตวอยางกนดกวา กาหนดใหมของ 6 ชน ซงมมลคาและนาหนกดงแสดงขางลางน และถงทใชใสของรบนาหนกไดมากสด 23
1 2 3 4 5 6vi 10 12 6 10 2 6wi 10 14 7 12 6 24 W = 23
รปท 11–24 แสดงขนตอนการขยายและจากดเขตจนไดคาตอบ ภายในทกๆ วงกลมมจานวนสองจานวนกากบ จานวนดานบนคอขอบเขตบนของมลคารวมทจดนน สวนจานวนดานลางคอมลคารวมของสงทไดเลอกมา ตวเลขกากบขางๆ วงกลมระบลาดบของการแวะผานจด วงกลมขอบดาทบคอ live node วงกลมเทาคอจดทถกเลมออก จานวนทกากบเสนเชอมคอนาหนกของชนทเลอก และจานวนทเขยนตรงขางลางวงกลมคอคา Vmax ซงคอมลคารวมสงทสดของผลเฉลยทไดคนพบมาขณะทจดนนถกสรางขน
เรมทราก (รป ก) แทนสถานะทยงไมไดเลอกอะไร มมลคารวมเปน 0 มขอบเขตของมลคารวมเปน 21.1 ซงจดนคอผลเฉลยทเพงพบมมลคารวมเปน 0 ดงนน Vmax = 0 ตอมา (รป ข) รากนถกเลอกเปน E–node แตกกงได 5 จดใหม (กงท 6 แตกไมไดเพราะนาหนกเกน W) ใหสงเกตคาของ Vmax ทเพมเปน 10 เมอจด 2 เกด และเปลยนเปน 12 เมอจด 3 เกด พอจด 4 5 และ 6 เกดไมเปลยน Vmax (เพราะมลคารวมไมมากกวา Vmax) ใหสงเกตวาพอจด 6 เกด กลบพบวาขอบเขตบนของมลคารวมทจดนเปน 6.25 ซงนอยกวา Vmax = 12 ดงนนจงสามารถตดจดนออกจากการ
278 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
พจารณาได ถงตรงนม live node เหลออย 4 จด เลอกจดทมขอบเขตบนของมลคารวมสงทสดมากเปน E–node เพอแตกกงตอ ไดจดท 3 แตกกงตอผลตจดขนมาอก 3 จด (รป ค) (ความจรงมอกกงหนงกอนกงแรกทแสดง ซงแทนการเลอกของชนทหนก 14 แตเลอกไมไดเพราะนาหนกรวมจะเกน จงไมแตกกงน) ตรงนถงตอนสาคญ แตกกงแรกไดจด 7 เปลยนคา Vmax เปน 16 สงผลใหตดจด 5 ได (เพราะ 13.3 < 16) พอแตกกงทสองไดจด 8 กเปลยนคา Vmax ไดอกเปน 20 คราวนจะพบวาสามารถตดจด 3 และ 4 ออกได (เพราะวา 19.7 < 20 และ 17.3 < 20 ตามลาดบ) และพอแตกกงทสามไดจด 9 กถกตดทนท (เพราะ 13.8 < 20) ถงตรงนเหลอ live node อย 2 จด (มขอบเขตบนของมลคารวมเทากนเสยดวยคอ 21.0) สมมตวาจด 7 ถกเลอกใหเปน E–node พบวาแตกกงไดกงเดยว (ทนาหนกรวมไมเกน) แตพอแตกไดจด 10 (รป ง) กพบวาถกตดออกทนทอกเชนกน (เพราะ 18.0 < 20)
เลอก live node ทเหลอจดถดไปทมขอบเขตบนของมลรวมสงทสดมาเปน E–node ตอ (ตอนนความจรงเหลอแคจดเดยวเทานน) ไดจด 8 ซงแตกกงตอไมได อกแลว live node กหมดแลว ดงนน Vmax (พรอมทงจดทไดผลเฉลยทมมลคารวมเปน Vmax) กคอคาตอบ
021.11
Vmax = 0
(ก)
0021.1
1021.1
1219.7
617.3
1013.3
26.252 3 4 5 6
Vmax = 10 12 12 12 12
10 14 7 12 6
(ข)
7 8 9
0021.1
1021.1
1219.7
617.3
1013.3
26.25
1621.0
2021.0
1213.8
Vmax = 16 20 20
7 12 6
(ค)
0021.1
1021.1
1219.7
617.3
1013.3
26.25
1621.0
2021.0
1213.8
1818.0
10
Vmax = 20
6
(ง)รปท 11–24 ตวอยางการขยายและจากดเขตสาหรบปญหา 0/1 knapsack
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 279
ในประเดนของการเขยนโปรแกรมนน เราไมสามารถเขยนการคนตามตนทนนอยสด (หรอกาไรมากทสด) ทมการขยายและจากดเขตไดงายๆ สวยๆ เหมอนกบการยอนรอย (ซงเขยนแบบเวยนเกด) ได ในทนเราเลอกคนตามมลคาสงทสด กตองจดเกบ live node ตางๆ ระหวางการคนใน max–heap โดยมวงวนเพอดงจดทมขอบเขตบนของมลคารวมสงสด (ดวยการ ExtractMax ออกจากฮป) มาแตกกงตอ ขอสงเกตประการหนงกคอ การใชมลคารวมสงทสดทเคยพบมาเปนตวเลม live node ทมขอบเขตบนของมลคารวมไมมากกวา ดวยการลบออกจากฮปนน เหนจะทาไดไมคอยดนกในทางปฏบต เนองจากการหาจดในฮปทควรถกเลม แลวลบจดเหลานนจะเสยเวลาแปรตามขนาดของฮป ถาจะคดใหละเอยดหนอย เราไมตองไปพะวงกบจดเหลานกได เพราะการจดเกบจดเหลานใน max–heap นนหมายความวาเมอไรท ExtractMax ออกมาไดจดทมขอบเขตบนของมลคารวมไมมากกวามลคารวมสงทสดทเคยพบมา แสดงวาทกๆ จดในฮป ณ ขณะนนกตองมคาไมมากกวาเชนกน แสดงวาไมตองไปแตกกงตออกแลว เพราะไมมทางไดคาตอบทดกวา จงสามารถยตการคนได และคาตอบทใหมลคารวมสงสดทไดพบมานนกคอคาตอบทตองการของตวอยางปญหา สามารถเขยนเปนรหสเทยมไดดงน
01: Knapsack01_BB( v[1..n], w[1..n], W )02: {03: H = empty max–Heap04: VUB = FracKnap( v[1..n], w[1..n], W )05: Insert( H, x[1..0], VUB )06: Vmax = 007: while ( isNotEmpty( H ) ) {08: (x[1..k], VUB) = ExtractMax( H )09: if ( VUB � Vmax ) break;10: for ( i=x[k]+1 to n ) {11: x[k+1] = i
12: sumW = ��
ki
ixw1
]][[ + w[x[k+1]];
13: sumV = ��
ki
ixv1
]][[ + v[x[k+1]];
14: if ( sumW � W ) {15: if ( sumV > Vmax ) {16: Vmax = sumV17: optSoln[1..k+1] = x[1..k+1]18: }19: VUB = sumV +FracKnap(v[k+2..n],w[k+2..n],W–sumW)20: Insert( H, x[1..k+1], VUB )21: }22: }23: }24: print( optSoln )25: }
280 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
Knapsack01_BB รบแถวลาดบ v, w ซงเกบมลคาและนาหนกตางๆ (กาหนดให ขอมลใน vและ w นนเรยงลาดบตามคาของมลคาตอนาหนกของสงของตางๆ จากมากไปนอย) W คอนาหนกรวมทถงรบได เรมดวยการเตรยม max–heap วางๆ H (บรรทดท 3) จากนนเพมรากเขาไปใน H (บรรทดท 4 และ 5) โดยมการคานวณขอบเขตบนของมลคารวมดวย FracKnap (ซงเปนอลกอรทมแบบตระกลามทหาคาตอบไดในเวลาทแปรตามจานวนสงของ) เพอใชเปนตวกากบความสาคญของขอมลในฮป ตามดวยการตงคาเรมตนใหกบ Vmax (เปน 0) ซงเกบมลคารวมสงทสดของคาตอบทไดพบมา จากนนเขาสวงวน เรมดวยการ ExtractMax ไดจดทมขอบเขตบนของมลคารวมสงทสดเกบไวใน VUB และผลเฉลย x[1..k] ทจดนน (บรรทดท 8) ถาจดทไดม VUB ไมมากกวา Vmax กแสดงวาเราสามารถเลม live node ตางๆ ในฮป ออกไดหมด และ Vmax กเปนมลคารวมสงทสดของปญหา ดงนนจงสามารถออกจากวงวนได (บรรทดท 9) ถาไมเปนเชนนน กตองแตกกงตอ ในแตละกรณกตองตรวจสอบวานาหนกรวมตองไมเกน W (บรรทดท 14) ถาไมเกนและเปนผลเฉลยทมมลคารวมทสงกวา Vmax (บรรทดท 15) กตองปรบคา Vmax
และจาคาตอบนไวดวย (บรรทดท 16 และ 17) จากนนคานวณขอบเขตบนของมลคารวมจดใหมทถกแตกกงน และเพมเขาไปในฮป (บรรทดท 19 และ 20) แลวกลบไปเรมทาในวงวนในรอบถดไป
ตวอยางท 11-17 ปญหา assignment : ในโครงการหนงเราตองมอบหมายงาน (ม n ประเภท) ใหคน n คนทา (คนละประเภท) โดยมตนทนการมอบหมายงาน j ให i ทาเปน cij จงหาวธการมอบหมายงานซงมตนทนรวมตาทสด เราสามารถบรรยายตนทนการมอบหมายงานดวยเมตรกซ ตวอยางเชนตนทนการมอบหมายงาน 4 งานให a, b, c, และ d ทาเปนดงน
1 2 3 4a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
ประเดนแรกทตองคดถงกอนเลยกคอรปแบบของผลเฉลย เหนไดชดเลยวาผลเฉลยคอวธเรยงสบเปลยนงาน {1,2,3,4} ให a,b,c,d ทา เชน (2,1,4,3) แทนการมอบหมายให a, b, c, และ dทางาน 2, 1, 4, และ 3 ตามลาดบซงมตนทนรวมเปน 12+15+23+8 = 58 ถาแจกแจงวธเรยงสบเปลยนทกๆ แบบ หาตนทนรวมของแตละแบบ กยอมไดคาตอบในทสด แตการแจงกรณทกๆ วธเรยงสบเปลยนนนใชเวลาเปน �(n!)
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 281
ปญหานเปนปญหาการหาคาเหมาะทสด จงเหมาะกบการขยายและจากดเขต ดงนนสงทตองพจารณากคอจะคานวณขอบเขตลางของตนทนไดอยางไร เมอเราทราบผลเฉลยบางสวน ขอบเขตลางของตนทนรวมเมอเรารผลเฉลยบางสวน กคอตนทนรวมของการมอบหมายงานทกระทาไปแลว บวกกบขอบเขตลางของตนทนรวมของการมอบหมายงานทเหลอ
แลวเราจะรขอบเขตลางของการมอบหมายงานทเหลอไดอยางไร ? สมมตวาเราไดมอบหมายให a ทางาน 2 แลว นนคอกาลงพจารณาผลเฉลย (2,?,?,?) กเปนทแนนอนวาเราไมตองสนใจ aและงาน 2 อก หรอพดงายกคอตดแถวในเมตรกซออกเปนดงแสดงขางลางน
1 2 3 4a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
วธงายทสดกบอกวาตนทนของการมอบหมายงานทเหลอกตองไมตากวา 0 ซงกไมผด แตไมสรางสรรคอะไรเลย ! ถาดจากเมตรกซทเหลอขางบนนในแตละแถวแนวนอน จะพบวา แถว bประกอบดวยตนทน 15, 14, และ 25 มคานอยทสดในแถวคอ 14 แสดงวาจะให b ทางานใดกตามอยางนอยกตองใชตนทน 14 ในทานองเดยวกนตองใชตนทนอยางนอย 10 และ 8 สาหรบ c และ d ตามลาดบ ดงนนการมอบหมายงานทเหลอให b, c, และ d ตองใชตนทนรวมอยางนอย 14+10+8 = 32 สรปไดวาผลเฉลย (2,?,?,?) มขอบเขตลางของตนทนรวมเปน 12+32=44
อนง แทนทเราจะหาคานอยทสดในแตละแถวแนวนอนทเหลอมารวมกนตามททามาขางบนน เรากสามารถนาคานอยทสดในแตละแถวแนวตงทเหลอ มารวมกนเพอใชเปนขอบเขตลางของตนทนรวมของการมอบหมายงานทเหลอกได (ลองคดดวาทาไม ?) ซงถาทาแบบนกบตวอยางขางบนนจะได 10+8+23=41 เมอนามารวมกบการมอบหมายงานททาไปแลว 12 จะไดขอบเขตลางของตนทนรวมของ (2,?,?,?) คอ 53 ทง 0, 44, และ 53 ตางกเปนขอบเขตลางของตนทนรวมของ (2,?,?,?) แต 53 นนดกวา (เพราะมคามากสด) อยางไรกตามไมไดหมายความวาการพจารณาหาผลรวมของคานอยทสดตามแถวแนวตงจะดกวาเสมอไป เพราะทงนขนกบคาตางๆ ในเมตรกซ สาหรบทจะอธบายตอไปนจะขอใชวธการหาผลรวมของคานอยทสดตามแถวแนวนอน6 ดงนนสามารถเขยนขอบเขตลางของตนทนรวมของผลเฉลย (x1, x2, ..., xk) ไดดงน
6 จะหาทงสองแบบแลวเลอกตวมากกวากได
282 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
� �����
���
��� �
��
�
�
���
�
�
�n
kiij
kpxjnj
k
iix cc
p
i1 1,
11min
ตองขอชแจงตรงนการใชสญลกษณตางๆ สกเลกนอยตรงนจะไดไมสบสน เราเขยนผลเฉลยในรปแบบ (x1, x2, ..., xk) xi ตางๆในผลเฉลยน i เปนหมายเลขแทนคน xi เปนหมายเลขงานทให i ทา ในทางปฏบตเราแทนทงคนและงานดวยหมายเลข แตทไดนาเสนอดวยตวอยางกอนนเราใชตวอกษรแทนคน เพราะจะไดไมสบสน
เราจะมาเรมใชการขยายและจากดเขต เพอคนคาตอบสาหรบเมตรกซตนทนทแสดงไวตอนตน1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
จากตวอยางปญหาน (1,2,3,4) เปนผลเฉลยหนงแนนอน มตนทนรวมเปน 14+10+17+40 = 81 ซงสามารถถกใชเปนคาเรมตนของตนทนรวมตาทสดทเคยพบมา เพอใชเลมตนทนระหวางคน
เรมจากผลเฉลย (?,?,?,?) เปนราก ซงยงไมมอบหมายงานใดๆ สามารถคานวณขอบเขตลางของตนทนรวมไดเปน 40
ผลเฉลย เมตรกซตนทน ขอบเขตลางของตนทนรวม
(?,?,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(0) + (12+10+10+8) = 40
เนองจากตอนนมแคจดเดยว นามาแตกกงไดผลเฉลย (1,?,?,?), (2,?,?,?), (3,?,?,?), และ (4,?,?,?) ซงสามารถคานวณหาของเขตลางของตนทนรวมเปน 49, 44, 51, และ 48 ตามลาดบ
(1,?,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(14) + (10+17+8) = 49
(2,?,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(12) + (14+10+8) = 44
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 283
(3,?,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(15) + (10+10+16) = 51
(4,?,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(20) + (10+10+8) = 48
ตอนนเราม 4 จด เนองจากจด (2,?,?,?) มขอบเขตลางนอยทสด จงถกนามาแตกกงตอ ได (2,1,?,?), (2,3,?,?), (2,4,?,?) ซงมขอบเขตลางของตนทนรวมเปน 52, 52, และ 55 ตามลาดบ
(2,1,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(12+15) + (17+8) = 52
(2,3,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(12+14) + (10+16) = 52
(2,4,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(12+25) + (10+8) = 55
ถงตรงนมจดเหลออย 7 จด จดทมขอบเขตลางนอยทสดคอ (4,?,?,?) จงนามาแตกกงตอ ได (4,2,?,?), (4,3,?,?), และ (4,1,?,?) ซงมขอบเขตลางของตนทนรวมเปน 48, 60, และ 60 ตามลาดบ
(4,2,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(20+10) + (10+8) = 48
(4,3,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(20+14) + (10+16) = 60
284 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
(4,1,?,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(20+15) + (17+8) = 60
คราวนจด (4,2,?,?) มขอบเขตลางนอยทสด แตกกงตอได (4,2,3,?) และ (4,2,1,?) ซงมขอบเขตลางของตนทนรวมเปน 63 และ 48 ตามลาดบ
(4,2,3,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(20+10+17) + (16) = 63
(4,2,1,?)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(20+10+10) + (8) = 48
จด (4,2,1,?) มขอบเขตลางนอยทสด นามาแตกกงได (4,2,1,3) มขอบเขตลางเปน 48
(4,2,1,3)1 2 3 4
a 14 12 15 20b 15 10 14 25c 10 19 17 23d 16 18 8 40
(20+10+10+8) + (0) = 48
จด (4,2,1,3) นมสถานะผลเฉลย มตนทนรวมจรงคอ 48 นอยกวา 81 (ซงเปนผลเฉลยตอนตนทเราม) ดงนนจงตองปรบผลเฉลยทมตนทนรวมนอยทสดทพบเปน (4,2,1,3) มตนทนรวมเปน 48
กตองขยายและจากดเขตกนตอ แตถงตรงนพบวาจด live node ตางๆ ทยงเหลออยตอนนมขอบเขตลางของตนทนรวมมากกวา 48 ทงสน จงสรปไดทนทวา (4,2,1,3) เปนการมอบหมายงานทมตนทนรวมตาทสด (รปท 11–25 แสดงตนไมทแตกกงไดระหวางการคน ภายในวงกลมทแทนจดของตนไมมจานวนสองจานวนกากบ จานวนดานบนคอตนทนรวมจากงานทไดมอบหมายแลว และจานวนดานลางคอขอบเขตลางของตนทนรวมทผลเฉลยน)
การขยายและจากดเขตสาหรบปญหาการมอบหมายงานทไดนา เสนอมานเขยนไดเปนรหสเทยมดงน
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 285
1 2 3 4
040
1449
1244
1551
2048
4763
4048
4848
3048
3460
3560
2752
2652
2055
1 3 4 2 3 1
3 1
3
x1 =
x2 =
x3 =
x4 =
รปท 11–25 ตวอยางตนไมปรภมสถานะทไดจากการขยายและจากดเขต01: Assignment_BB( c[1..n, 1..n] )02: {03: H = empty min–Heap04: CLB = LowerBoundCost( c[1..n, 1..n], x[1..0] )05: Insert( H, x[1..0], CLB )06: Cmin = 007: for (i=1 to n) { optSoln[i] = i; Cmin += c[i,i] }08: for (i=1 to n) x[i] = i09: while ( isNotEmpty( H ) ) {10: (x[1..k], CLB) = ExtractMin( H )11: if ( CLB � Cmin ) break;12: for (i=k+1 to n) {13: Swap( x[k+1], x[i] );
14: sumC = ��
�
11
ki x[i]]c[i,
15: if ( k+1 == n AND sumC < Cmin ) {16: Cmin = sumC17: optSoln[1..n] = x[1..n]18: }19: CLB = LowerBoundCost( c[1..n, 1..n], x[1..k+1] )20: Insert( H, x[1..k+1], CLB )21: Swap( x[i], x[k+1] );22: }23: }24: print( optSoln )25: }26:27: LowerBoundCost( c[1..n, 1..n], x[1..k] )28: {
29: return � �����
���
��� ��
�
�
�
���
�
��
n
ki kppxjnj
k
i 1 1],[11min j]c[i,x[i]]c[i,
30: }
286 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
แบบฝกหด1. จงเขยนรหสเทยมของการแจงกรณวธเรยงสบเปลยน ซงวธเรยงสบเปลยนสองวธใดทถกแจกแจงถดกนจะตางกนเพยงแคการสลบขอมลหนงคเทานน
2. จงเขยนรหสเทยมของการแจงกรณวธจดหม (combination) ซงคอการเลอกขอมล k ตวออกจากขอมล n ตว
3. จงเขยนอลกอรทมแบบคนตามแนวกวางสาหรบปญหาการคณสองหารสาม (ทไดนาเสนอในตวอยางท 11-9)
4. จงเสนอวธการตรวจสอบความมแววของจดระหวางการคนแบบยอนรอย สาหรบปญหาผลรวมของเซตยอย เพมเตมจากทไดนาเสนอในตวอยางท 11-10
5. จงเขยนโปรแกรมดวยวธการยอนรอยสาหรบปญหา n ควน เพอหาวาจะตองแวะผานจดในตนไมปรภมสถานะเปนจานวนกจดกอนจะพบคาตอบแรก เมอ n = 20, n = 30 และ n = 35 (จะไดนาผลนเพมในตารางท 11–3)
6. จงเสนอวธการตรวจสอบความมแววของจดระหวางการคนแบบยอนรอย สาหรบปญหา0/1 Knapsack เพมเตมจากทไดนาเสนอในตวอยางท 11-15
7. กาหนดให G = (V, E) คอกราฟๆ หนง เราตองการหาเซตยอย VC � V โดยทเสนเชอมทกเสนของกราฟมจดปลายอยใน VC เราเรยกเซต VC นวา vertex cover จงเขยนรหสเทยมของอลกอรทมแบบยอนรอยเพอหา vertex cover ทมขนาด k จด
8. การเรยงยายตาแหนง (derangement) คอวธเรยงสบเปลยน (permutation) ของตวเลข 1, 2, ..., n ทสาหรบทกๆ i (1� i � n) ตวท i ไมใชคา ตวอยางเชนการเรยงยายตาแหนงทงหมดของ (1,2,3) คอ (2,3,1) และ (3,1,2) จงเขยนรหสเทยมของอลกอรทมแบบยอนรอยซงพมพการเรยงยายตาแหนงทกรปแบบของ 1, 2, ..., n
9. คดวานกเรยนแทบทกคนคงเคยเหน (ดรป) แผนพลาสตดสเหลยมจตรสมพนท 4�4 ตารางหนวยขนาดเลกกวาฝามอ ซงประกอบดวยแผนพลาสตกเลกๆ 15 ชน แตละชนมตวเลขกากบตงแตเลข 1 ถง 15 มขนาด 1�1 วางตอกนอย และเหลอชองวางขนาด 1�1 ปญหา 15-puzzle นกาหนดใหหาวธการเลอนแผนพลาสตกเลกๆ จนในทสดไดเลขเรยงจาก 1 จนถง
Draft 1.0 : 30/10/00 5:37 : [email protected] บทท 11 การคนคาตอบในตนไมและกราฟ 287
15 ไลจากซายไปขวาและบนลงลาง เหลอชองวางไวทมมขวาลาง จงเขยนโปรแกรมทใชอลกอรทมแบบคนตามตนทนนอยสดสาหรบปญหาน
6 2 4 1 2 3 41 5 3 8 5 6 7 8
13 10 7 11 9 10 11 1214 9 15 12
�13 14 15
10. เกม Hi-Q ประกอบดวยตาแหนงบนกระดาน 33 ตาแหนง (ดงรปซาย) โดยเรมตนจะมลกแกววางอยในตาแหนงตางๆ ทกๆตาแหนงยกเวนตาแหนงตรงกลางผเลนจะทาการเคลอนยายลกแกว โดยยายลกแกวลกหนงขามลกแกวขางเคยงหนงลกไปยงชองทวาง ลกแกวทถกขามจะถกนาออกจากกระดาน เกมจะจบลง (ดวยชยชนะ) กตอเมอสามารถหาลาดบการเคลอนยายลกแกว จนกระทงเหลอลกแกวเพยงหนงลก วางไวทตาแหนงตรงกลาง
ก) จงออกแบบอลกอรทมพรอมกบโครงสรางขอมลทจาเปนในการแกไขปญหาดงกลาว
ข) จงออกแบบอลกอรทมสาหรบปญหา Hi-Q กรณทวไปทมคา m และ n กาหนดลกษณะของกระดานดงรปดานขวา
m n m
11. จากคาของจานวนเตมบวก n ทใหเปนขอมลขาเขา จงออกแบบอลกอรทมแบบยอนรอยเพอหาเซตของจานวนเตมบวก (ทมคาแตกตางกนหมด) ทกๆ รปแบบทมผลรวมเทากบ n ตวอยางเชน n = 10 จะไดวาผลลพธดงน 1+2+3+4, 1+2+7, 1+3+6, 1+4+5, 1+9, 2+3+5, 2+8, 3+7, 4+6, และ 10
12. จงออกแบบอลกอรทมเพอแสดงวงจรแบบแฮมลตนทงหมดของกราฟ G (วงจรแบแฮมลตนคอวงจรซงผานทกๆ จดในกราฟ จดละหนงครง)
13. จงออกแบบอลกอรทมแบบขยายและจากดเขตสาหรบปญหาการเดนทางของพนกงาน โดยนาเสนอวธการคานวณขอบเขตลางของความยาวของการเดนทาง อยางละเอยด
288 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 30/10/00 5:37 : [email protected]
14. จงเขยนโปรแกรมเพอแกปญหา 0/1 Knapsack ดวยวธดงตอไปน จากนนทาการทดลองเพอแกปญหาขนาดตางๆ กน (n = 30, 40, 50, 100, ...) โดยเปรยบเทยบเวลาการทางานจรง (และสามารถนาผลลพธทไดของแตละโปรแกรมมาใชทวนสอบคาตอบกนและกนไดดวย)
ก) แจกแจงทกๆ เซตยอยข) ยอนรอยค) ขยายและจากดเขตง) กาหนดการพลวต
Draft 1.0 : 27/10/00 21:56 : [email protected] 289
บทท 12
อลกอรทมทเราไดศกษากนมาตงแตตนเปนอลกอรทมทเรยกกนวา อลกอรทมเชงกาหนด(deterministic algorithm) คอเปนอลกอรทมทพฤตกรรมการทางานถกกาหนดโดยขอมลขาเขาทไดรบเทานน ดงนนจงมการทางานทเหมอนกนทกครงทไดรบขอมลขาเขาทเหมอนกน ซงถายงจากนไดเราเคยใหคานยามของอลกอรทมไววา เปนลาดบของขนตอนเชงคานวณซงแปลงตวอยางขอมลขาเขาของปญหาไปเปนผลลพธทถกตอง ภายในเวลาอนจากด สาหรบทกๆ ตวอยางปญหา เราคงไมตองการอลกอรทมทมพฤตกรรมไมแนนอนใหคาตอบทถกบางผดบาง หรอทางานนานมากๆ โดยไมรวาจะไดคาตอบหรอไม เมอไร แตสงทเราจะมาเรยนรกนในบทน คออลกอรทมประเภทหนงทฝาฝนความตองการสองขอดงกลาว นนคอบางครงกใหคาตอบทผด บางครงกทางานไมสนสด แตพฤตกรรมดงกลาวเกดขนดวยโอกาสทนอยมาก จนยอมรบไดในทางปฏบต เราเรยกอลกอรทมประเภทนวาอลกอรทมเชงสม (randomized algorithm) เนองจากพฤตกรรมการทางานไมไดถกกาหนดโดยขอมลขาเขาเพยงอยางเดยว แตจะถกกาหนดโดยกระบวนการสมทเกดขนระหวางการทางานดวย (ดรปท 12–1)
DeterministicAlgorithm
problem instance
output
RandomizedAlgorithm
problem instance
output
randomnumber
generator
รปท 12–1 ความแตกตางระหวางอลอรทมเชงกาหนดและอลกอรทมเชงสม
อลกอรทมเชงสม
290 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
เหตผลหลกทใชอลกอรทมเชงสมมสองประเดนคองายกบเรว อลกอรทมเชงสมสาหรบหลายๆ ปญหา (เชนปญหาทางกราฟ ทางเรขาคณตเชงคานวณ) ใชเวลาการทางานเทยบเทากบอลกอรทมเชงกาหนดทมอยแตมแนวการทางานทงายกวา ซบซอนนอยกวามากๆ และกมหลายปญหาซงไมมอลกอรทเชงกาหนดใดหาคาตอบไดอยางมประสทธภาพ แตมอลกอรทมเชงสมทใหคาตอบไดอยางรวดเรว (เชนปญหาการทดสอบจานวนเฉพาะ)
แรกเรมอลกอรทมเชงสมไดรบความสนใจสาหรบปญหาเชงจานวน เชนการทดสอบจานวนเฉพาะ แตกไดมผออกแบบอลกอรทมเชงสมทใชสาหรบปญหาทางสาขาอนมากขน ๆ เปนลาดบ เชนปญหาเชงเรขาคณต ปญหาทางกราฟ รวมถงการออกแบบโครงสรางขอมล เปนตน
ความจรงเราเคยพบอลกอรทมเชงสมมาสองอลกอรทมแลว ครงแรก (ในบทท 1) คออลกอรทมสาหรบปญหา majority และครงทสอง (ในบทท 8) คอ randomized quicksort อลกอรทมเชงสมในการหา majority นนอาศยความจรงทวา ถารายการขอมลทสนใจม majority กยอมมขอมลทเปน majority เปนจานวนมาก การสมเลอกขอมลมาหนงตวแลวลองนบดในรายการวามเกนครงหรอไม กนาจะมโอกาสสงทจะสมไดตวทเปน majority มานบ โดยเราสามารถเพมความมนใจในคาตอบดวยการสมแลวลองนบหลายๆ หน มปญหามากมายทใชหลกการนในการออกแบบอลกอรทมเชงสม เนองจากมขอมลทยนยนความถกตองของคาตอบ (เรยกวาเปนพยาน – witness) มากมายใหสมเลอก
สวน quicksort แบบปกตนนใชเวลาการทางานทขนกบการเลอกตวหลก (pivot) และลาดบของขอมลขาเขา ประสทธภาพการทางานของกรณเลวสดและกรณเฉลยนนมอตราการเตบโตทตางกนมาก (เปน n2 และ n log n ตามลาดบ) เราใชการเลอก pivot แบบสมเพอลดโอกาสใหเหลอนอยมากๆ ทจะโชครายใช pivot ทเกดกรณเลวสดตลอดการเรยงลาดบ หรอเราจะอาศยการจดลาดบขอมลขาเขาเสยใหมแบบสมกอนทจะไป quicksort แบบปกต กจะเปนการทาลายโอกาสทจะเกดกรณเลวสดไดเชนกน มปญหาอนๆ อกทมพฤตกรรมการทางานทขนกบลาดบของขอมลขาเขา ซงเราสามารถใชหลกการจดลาดบขอมลขาเขาใหมลาดบสมๆ เพอลดโอกาสทจะเกดกรณเลวๆ
ในบทนเราจะมาแตะเนอหาผวๆ ของอลกอรทมเชงสมกนสองลกษณะคอแบบมอนตคารโล(Monte Carlo) และแบบลาสเวกส (Las Vegas) อลกอรทมทงสองลกษณะนตางกนในเชงพฤตกรรม อลกอรทมแบบมอนตคารโลนนใหคาตอบเรว แตอาจเปนคาตอบผดดวยความนาจะเปน
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 291
ทตา (ตวอยางเชนอลกอรทมในกาหา majority ) สวนอลกอรทมแบบลาสเวกสนนใหคาตอบทถกตองเสมอ แตอาจชาดวยความนาจะเปนทตา (เชน randomized quicksort)
การศกษาเนอหาของอลกอรทมเชงสมนน อาศยทฤษฎความนาจะเปนและสถตเปนเครองมอมากมายในการพสจนประสทธภาพเชงเวลาของอลกอรทม บทนมจดประสงคเพอใหนกศกษาเหนแนวคด หลกการทางาน และความมหศจรรยของอลกอรทมเชงสม โดยอาจจะละเลยการพสจนผลบางในบางเรอง ซงอยนอกเหนอขอบเขตของหนงสอเลมน
อลกอรทมแบบมอนตคารโลอลกอรทมแบบมอนตคารโลนนเปนอลกอรทมเชงสมประเภททใหคาตอบเสมอ แตมโอกาสทจะใหคาตอบทผดได ฟงตอนแรกแลวไมนาสนใจเลย ถาจะใหนาสนใจกตองพดใหละเอยดขนสกนดเกยวกบการตอบผดตอบถก กาหนดให p เปนจานวนจรงซง 0<p<1 เราเรยกอลกอรทมหนงวาเปน p–correct ถาอลกอรทมนนใหคาตอบทถกตองดวยความนาจะเปนอยางนอย p ไมวาจะรบขอมลขาเขาใดๆ กตาม ตวอยางเชนอลกอรทมเชงสมทหา majority ขางลางนเปน ½–correct เพราะวาถา A[1..n] ไมม majority อลกอรทมนจะใหคาตอบถกตอบเสมอ (ไมวาจะสมไดตวใดมานบกยอมไมใช majority) แตถา A[1..n] ม majority กจะคนคาตอบทถกตองดวยความนาจะเปนอยางนอย ½ (เพราะขอมลทเปน majority ตองมจานวนตวเกนครง โอกาสทจะสมไดตวทเปน majority มานบกยอมเกนครง)
01: isThereMajority_MC( A[1..n] )02: {03: r = random(1,n)04: c = 005: for (i=1 to n)06: if ( A[i] == A[r] ) ++c07:08: if ( c > n/2 ) return TRUE else return FALSE09: }
อานถงตรงนหลายคนอาจถามวา เอะถาเราแคโยนเหรยญ ถาไดหวกตอบวาม majority ถาไดกอยกตอบวาไมม majority จะเปนอลกอรทม ½–correct และไดผลการทางานเหมอนกบ isThereMajority_MC หรอไม คาตอบกคอการโยนเหรยญ นนใหโอกาสทจะไดคาตอบถกหรอผดเทากนซงเทากบ 0.5 ซงถอไดวาเปน ½–correct แตจะไมเหมอนอลกอรทม isThereMajority_MC ซงโอกาสไดคาตอบถกมเกน 0.5 แตประเดนนไมใชจดเดนมากนก
292 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
ของ isThereMajority_MC จดทนาสนใจอยตรงทวา isThereMajority_MC เปนอลกอรทมแบบเอนเอยง (biased) บางทเรยกวาแบบขอผดพลาดดานเดยว (one-sided error)
อลกอรทมแบบเอนเอยงคออลกอรทมทใหคาตอบหนงซงเรามนใจไดแนนอนวาถกตอง เชนเมอ isThereMajority_MC ตอบวา TRUE เรามนใจวาตองม majority แนเพราะไดพบพยานทยนยนคาตอบนนแลว ความเอนเอยงนเองทาใหเราสามารถเรยก isThereMajority_MCซาหลายๆ หนเพอลดโอกาสทจะไดคาตอบผด ดงน
01: isThereMajority_MC_Repeat( A[1..n], k )02: {03: for (i=1 to k) {04: if ( isThereMajority_MC( A[1..n] ) == TRUE )05: return TRUE06: }07: return FALSE;08: }
ในทนเราวนเรยก isThereMajority_MC หลายๆ หน (มากทสด k หน) เมอใดทไดคาตอบเปน TRUE เรากมนใจไดเลยวาม majority แน ถารอบแรกไดคาตอบเปน FALSE กมนใจแคเกน ½ วาไมม majority ถายงไมมนใจพอ กวนเรยกตอ ถารอบทสองกยงไดคาตอบวา FALSE อก คราวนกมนใจเกน 1– (½ )2 = ¾ วาไมม majority ถายงไมมนใจพออก กวนเรยกตออก การทเราไดคาตอบวา FALSE ในแตละรอบนนเปนการเพมความมนใจวาไมม majority มากขนเรอยๆ จนในทสดหลงจากเรยกครบ k หนแลวพบวาไดคาตอบเปน FALSE ตลอด กจะสรปวานาจะไมม majority ดวยความนาจะเปนซงมากกวา (1–2–k ) นนคอโอกาสทคาตอบจะผดมเพยง 1 ใน 2k แสดงวา isThereMajority_MC_Repeat เปนอลกอรทมแบบ (1–2–k )–correct
หวขอยอยทจะนาเสนอตอไปนเปนตวอยางของอลกอรทมแบบมอนตคารโลสาหรบปญหาแบบตางๆ
การทวนสอบการคณเมทรกซกาหนดใหมเมทรกซขนาด n�n สามตวคอ A, B, และ C อยากทราบวา C = AB หรอไม วธงายๆ กคอลองคณ A กบ B ไดผลลพธแลวกนาไดเทยบกบ C การคณเมทรกซแบบตรงไปตรงมาใชเวลาเปน �(n3) บวกกบเวลาในการเปรยบเทยบผลลพธกบ C อก �(n2) ดงนนใชเวลารวมเปน �(n3) หรอถาจะใชอลกอรทมการคณของสแตรสเสนกใชเวลาเปน O(n2.81) หรอใชอลกอรทมการคณเมทรกซทดทสดทไดพบกนมาของ Coppersmith และ Winograd กใชเวลา O(n2.376) แต
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 293
ทเราจะนาเสนอในทนใชอลกอรทมเชงสมแบบมอนตคารโลซงทางานเรวกวา ( O(n2) ) ดวยความนาจะเปนทจะไดคาตอบผดไมเกน � สาหรบคาคงตว � > 0 ใดๆ
กาหนดให D = C – AB และ X คอเวกเตอรขนาด 1�n ซงแตละสมาชก xi แทนการเลอกหรอไมเลอกพจารณาแถวท i ในเมทรกซ D (นนคอให xi = 0 หรอ 1) ดงนน XD กคอเวกเตอรขนาด 1�n ทไดจากการนาแถวตางๆ ทเราสนใจใน D (กาหนดโดย X) มาบวกกน เชน X = [0, 0, 1, 0, 1] และ
������
�
�
������
�
�
�
��
0121020000612000000000000
D
จะไดวา XD = [ 0, 1, 0, 0, 6 ]
ถา C = AB สรปไดวา XD = [0, 0, ..., 0] แนๆ ไมขนกบคาของ X แตถา C � AB กเปนทแนนอนวา D � 0 หมายความวาตองมสกแถวหนงใน D ทมสมาชกบางตวซงมคาไมใช 0 ถากาหนดให k คอแถวๆ หนงใน D ทมสมาชกบางตวซงมคาไมใช 0 จะไดวาสาหรบ X ใดๆ ถาให Y คอเวกเตอรขนาด 1�n ซงมคาเหมอนกบ X ยกเวนเฉพาะ yk ใหมคาเทากบ kx (หมายความวาถา xk = 0แลว yk = 1 และถา xk = 1 แลว yk = 0) จะไดวา XD และ YD จะเปนเวกเตอรศนย ทงคไมได (ลองคดดเอง) จากผลตรงนจงเกดแนวคดวา ถากาหนดคาใหกบ xi ตางๆ ใน X เปนเลข 0 หรอ 1 แบบสม โอกาสทแถวท k จะถกเลอกหรอไมถกเลอกใน X มพอๆ กน เนองจากอาจมไดหลายๆ แถวใน D ทมสมาชกทไมใช 0 ดงนนความนาจะเปนท XD � 0 จงมคาอยางนอย ½
จากแนวคดขางตนน กเพยงแตสมคาของเวกเตอร X จากนนคานวณ XD แลวทดสอบวามคาเปน ศนยหรอไม ถาไมเปนศนยกมนใจแนๆ วา C � AB แตถา XD เปนศนยกมนใจเกนครงวา C = AB เทานกไดอลกอรทม ½–correct แบบเอนเอยงซงสามารถเพมความมนใจไดอกดวยการทาซาๆ
หลายคนคงตะขดตะขวงใจวาเนองจาก D = C – AB แสดงวาตองมการคานวณ AB กยอมใชเวลาเชนเดยวกนการคณ AB แลวเปรยบเทยบกบ C แบบตรงไปตรงไปมา มาคดอะไรกนมากมายแลวไดอลกอรทมเชงสมทมโอกาสผด ใจเยนๆ ทอธบายขางบนนเปนแนวคด ความจรงแลวเราไมคานวณ D หรอก การตรวจสอบวา XD เปนศนยหรอไมนนจะใชการเปรยบเทยบวา
294 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
XC กบ XAB เทากนหรอไมแทน การคานวณ XC นนกระทาไดในเวลา �(n2) สวนการคานวณ XAB นนถาใสวงเลบระบลาดบการคณเปน (XA)B กจะใชเวลาเปน �(n2) เชนกน ดงนนอลกอรทมเชงสมแบบมอนตคารโล ½–correct แบบเอนเอยง เพอการทวนสอบวา C = AB หรอไม เขยนไดดวยรหสเทยมดงน
01: isEqual_MC( A[1..n,1..n], B[1..n,1..n], C[1..n,1..n] )02: {03: for (i=1 to n) X[i] = random(0,1)04: if XC == (XA)B return TRUE else return FALSE05: }
เนองจากอลกอรทมนเอนเอยงจงสามารถทาซาเพอเพมความมนใจไดงายๆ ดงน01: isEqual_MC_Repeat( A[1..n,1..n], B[1..n,1..n],02: C[1..n,1..n], � )03: {04: k = �lg 1/��05: for (i=1 to k) {06: if ( isEqual_MC( A, B, C ) == FALSE )07: return FALSE08: }09: return TRUE;10: }
เมอไรท isEqual_MC คนคา FALSE (บรรทดท 6) แสดงวาไดพบพยานทมนใจแนวา C � AB แตถาคนคา TRUE กจะทาซาเพอเพมความมนใจ หากทาซาไป k ครงแลว isEqual_MC ตอบวา TRUE ทกครง กมนใจดวยความนาจะเปน (1–2–k) วา C = AB ดงนนหากเรารบคา � ซงคอคาสงสดของความนาจะเปนทจะใหคาตอบผด นนคอ � = 2–k
ดงนนกสามารถคานวณจานวนรอบทตองทาซาไดวา k = �lg 1/�� (บรรทดท 4)
สวนตดนอยสดกาหนดให G = (V, E) คอกราฟไมระบทศทางทตอกน ซงอาจมเสนเชอมมากกวาหนงเสนระหวางคจดใดในกราฟ โดยท n คอจานวนจดของกราฟ เรานยามสวนตด (cut) ใน G คอเซตของเสนเชอมซงเมอลบเสนเชอมเหลานออกแลวจะแยก G ออกเปนมากกวาหนงองคประกอบ และนยามสวนตดนอยสด (min–cut) คอสวนตดซงมขนาดเลกทสด (คอมจานวนเสนเชอมนอยทสด) หลายคนคงคนเคยกบทฤษฎการไหลมากสดสวนตดนอยสด (Max Flow – Min Cut Theorem) ของขายงาน ซงสามารถนามาใชหาสวนตดนอยสดไดในเวลา O(mnlog(n2/m)) ดวยอ
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 295
ลกอรทมเชงกาหนดทดสดทไดพบกนมา 1 โดยท m เปนจานวนเสนเชอม แตเราจะมานาเสนออลกอรทมเชงสมซงหาสวนตดนอยสดกนในทน
เราอาศยการหดเสนเชอม (edge contraction) ซงคอการรวมจดสองจดในกราฟทมเสนเชอมตอถงกนเขาดวยกน แลวลบเสนเชอมทตอระหวางคจดทรวมกนทงหมดทงไป (รปท 12–2 แสดงตวอยางการหดเสนเชอม (c,d) ในรป ก ไดผลเปนรป ข ) แนวคดการทางานกคอการสมเสนเชอมมาหดเชนนไปเรอยๆ จนกวาจะเหลอเพยงสองจดในกราฟ (เนองจากการหดเสนเชอมหนงครงเปนการลดจานวนจดในกราฟลงหนงจด ดงนนจงวนสมเสนเชอมมาหดจานวน n–2รอบ) กจะไดเสนเชอมตางๆ ทตอระหวางสองจดทเหลอนเปนสวนตดของกราฟ (และมโอกาสเปนสวนตดนอยสดดวย) อยากใหนกเรยนลองเขยนอลกอรทมในรายละเอยดทใชเวลาการทางานเปน O(n2)
a
bc
d e
a
b
(c,d) e
(ก) (ข)รปท 12–2 ตวอยางการหดเสนเชอม
ขอสงเกตทนาสนใจของการหดเสนเชอมกคอวา การหดเสนเชอมไมไดลดขนาดของสวนตดนอยสดใน G ทงนเนองจากวาสวนตดทกๆ สวนของกราฟ ณ ขณะใดๆ กยงคงเปนสวนตดของกราฟเดม
กมาถงชวงทตองวเคราะหอลกอรทมเชงสมขางตนกน กาหนดให C คอสวนตดนอยสดใน Gโดยท k คอจานวนเสนเชอมใน C เนองจากสวนตดนอยสดของกราฟ G ตองมจานวนเสนเชอมไมเกนดกรนอยทสดของจดใน G (ลองคดด) และจากคณสมบตของกราฟทวาผลรวมของดกรของทกๆ จดในกราฟยอมเทากบสองเทาของจานวนเสนเชอม (ลองกลบไปทบทวนทฤษฎกราฟดเอง) สรปไดวา
1 A.V. Goldberg and R.E. Tarjan, A new approach to the maximum flow problem. Journal of the ACM,
35:921–940, 1988.
296 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
k � min{ d(v1), d(v2), ..., d(vn) }
2m = � d(vi)
� nk
m � nk2
โดยท m คอจานวนเสนเชอม n คอจานวนจด และ d(vi) คอดกรของจด vi
ขอถามวาในรอบแรกของการสมเสนเชอมเพอนามาหดนน โอกาสทจะไมเลอกเสนเชอมใน Cเปนเทาไร ? เนองจาก C ม k เสน กราฟ G มเสนเชอมอยางนอย nk/2 เสน ดงนนความนาจะเปนทจะไมเลอกเสนเชอมใน C มาหดกเปนอยางนอย (1 – k/(nk/2) ) = (1 – 2/n) คดในทานองเดยวกนจะไดวาความนาจะเปนทจะไมเลอกเสนเชอมใน C มาหดในรอบทสองกเปนอยางนอย 1 – 2/(n–1) ดงนนหลงจากผานการสมเสนเชอมมาหดจานวน n–2 เสน กจะเหลอสองจด โดยมความนาจะเปนทเสนเชอมทกเสนใน C จะหลดรอดพนการถกสมเลอกมาหดไดตลอด เปนอยางนอย
)1(2
321
221
12121
���
�
���
���
�
���
�
���
�
���
�
���
�
���
��
nnnnn�
สรปไดวาความนาจะเปนทจะไดสวนตดนอยสดมมากกวา 2/n2 ดงนนถาเราหาสวนตดดวยวธนซาๆ กน q หน แลวเลอกสวนตดทมขนาดเลกสด โอกาสทสวนตดนจะไมใชสวนตดนอยสดจะเปนอยางมาก (1–2/n2)q สมมตให q = n2/2 จะไดความนาจะเปนทไมไดสวนตดนอยสดนอยกวา 1/e � 1/ 2.718 < 0.368 (เพราะวา ex x
x/1)1(lim /1
��
��
ลองใชความรแคลคลสหาดเอง)
ถาเราวนทาซามากกวานกยอมสามารถลดโอกาส ทจะไมไดสวนตดนอยสดลงไปไดตามตองการ แตกตองแลกกบเวลาการทางานทนานขน เชนถาทาซาเปนจานวน O(n2log n) หน กจะใชเวลาทงสนเปน O(n4log n) อยางไรกตามดวยแนวคดของการหดเสนเชอมน เราสามารถลดเวลาการทางานลงไดเหลอแค O(n2logO(1)n) ซงจะไมขออธบายในทน
อยากใหสงเกตวาการหาสวนตดนอยสดเชงสมทนาเสนอมาน เราไดอลกอรทมทไมใชแบบ p-correct (เพราะหาคา p ทคงตวไมได) ไมเอนเอยง (เพราะเราไมรแนวาคาตอบทไดคาตอบใดถกตอง) แตกสามารถทาซาเพอลดโอกาสทจะไมพบสวนตดนอยสดเลยลง โดยขณะทาซากตองจาสวนตดทไดทมขนาดเลกสดเทาททามา
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 297
การทดสอบความเปนจานวนเฉพาะถาจะวาไปแลวอลกอรทมเชงสมแบบมอนตคารโลทไดรบกลาวขานถงมากทสดกเหนจะเปนอลกอรทมทออกแบบมาเพอทดสอบวาจานวนเตมคทกาหนดใหนน เปนจานวนเฉพาะหรอไม ในปจจบนยงไมมอลกอรทมเชงกาหนดใดทแกปญหานไดในเวลาทรวดเรว แนวคดของอลกอรทมเชงสมแบบมอนตคารโลทจะนาเสนอตอไปนอาศยทฤษฎจานวนมาชวยการในสมเลอกพยานทแสดงความเปนจานวนประกอบของจานวนทกาลงทดสอบ ถาหาพบกสรปไดทนทวาเปนจานวนประกอบ (นนคอเปนอลกอรมแบบเอนเอยง) แตถาพยายามหามาพอสมควรกยงไมพบพยาน จงสรปวาเปนจานวนเฉพาะดวยความนาจะเปนทสง (จะสงเพยงใดกขนกบความพยายามในการเลอกพยานมาตรวจสอบ)
เรมดวยการใชทฤษฎบทเลกของแฟรมาต (Fermat’s Little Theorem) ทบอกวา
ถา n เปนจานวนเฉพาะแลว an–1 � 1 (mod n) สาหรบทกๆ a > 0 ทเฉพาะสมพทธกบ n
ดงนนการพสจนวา n เปนจานวนประกอบกระทาไดโดยหาคา a (สกหนงคา) มาเปนพยานทแสดงวา an–1 mod n � 1 หรออกนยหนง n จะเปนจานวนเฉพาะไดกตองแสดงใหเหนจรงวา an–1 mod n = 1 สาหรบทกๆ คา a = 1,2,3,...,n–1 เขยนเปนรหสเทยมไดดงน
01: isPrime_Fermat( n )02: {03: for (a = 1 to n–1)04: if ( an–1 mod n � 1 ) return FALSE05: return TRUE06: }
ถงแมวาเราสามารถคานวณคาของ an–1 mod n (ในบรรทดท 4) ไดรวดเรวดวยการใชการยกกาลงมอดลาร (ใชเวลาเปน O(�3) โดยท � คอจานวนบตในการแทนคา n) แตอลกอรทมขางบนนตองคานวณคา an–1 mod n เปนจานวน O(n) = O(2�) ครง แสดงวาอลกอรทมนใชเวลาเปนฟงกชนเลขชกาลงของขนาดของขอมลขาเขา ซงชามาก เชนถา n = 2521–1 (ซงเปนจานวนเฉพาะ) กตองคานวณ an–1 mod n โดยท a มคาตงแต 1 ถง n-1 จนครบทกกรณกวาจะสรปไดวาเปนจานวนเฉพาะ ถาการคานวณ an–1 mod n ครงหนงกระทาไดในเวลาประมาณ 1 นาโนวนาท (10–9 วนาท) การทดสอบใหครบทกกรณตองใชเวลาทงสนประมาณ 3�1060 ป !!! (อานถงตรงนหลายคนคงรสกวาทาไมตองทดสอบ an–1 mod n == 1 ดวย ทดสอบดวย a | n หรอ gcd(a,n) == 1 จะงายกวามากๆ แตในทนมจดประสงคเพยงใหเหนทมาของอลกอรทมทจะนาเสนอตอไป)
298 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
ทฤษฎบทเลกของแฟรมาตบอกเราวาการแสดงวา n เปนจานวนประกอบนนขอพยาน a แคตวเดยวกพอ แตการแสดงวา n เปนจานวนเฉพาะนนเหนอยมากๆ (จากทแสดงขางบน) อยางไรกตามยงมขาวดอยตรงทวา “มจานวนประกอบ n ทม a ซงใหคา an–1 mod n = 1 อยจานวนนอยมาก” เราเรยกจานวนประกอบ n แบบนวาจานวนเฉพาะเทยมฐาน a (base–a pseudoprime) และเรยก a นวาพยานเทจ (false witness) ตวอยางเชน 341 เปนจานวนประกอบ (341=11�31)แต 2340 mod 341 = 1 ถาลองแจกแจงดจะพบวามจานวนเฉพาะเทยมฐาน 2 อยเพยง 22 ตวเทานนทมคานอยกวา 10,000 หรอถาพจารณากรณทใหญกวานจะพบวาถาสมเลขขนาด 50 หลก จะมโอกาสเพยงหนงในลานเทานนทเปนจานวนเฉพาะเทยมฐาน 2 หรอถาสมเลขขนาด 100 หลก จะมโอกาสเพยงหนงในสบลานลาน (1013) ทเปนจานวนเฉพาะเทยมฐาน 2 เปนตน ขาวดนจงเปนแนวคดใหเกดอลกอรทมทยอมเสยงทจะใหคาตอบผด (ซงคาดวานอย) ดวยการทดสอบเพยงแค 2n–1 mod n มคาเทากบ 1 หรอไม ถาไมเทากมนใจแนวาเปนจานวนประกอบ ถาเทากมความมนใจสงวาเปนจานวนเฉพาะ เขยนเปนรหสเทยมไดดงน
01: isBase2Pseudoprime( n )02: {03: if ( 2n–1 mod n � 1 ) return FALSE; else return TRUE04: }
อลกอรทมขางบนนมขอเสยอยตรงทวา ไมสามารถเรยกซาเพอลดโอกาสทจะไดคาตอบผดลงได ตวอยางเชน 341 เปนจานวนเฉพาะเทยมฐาน 2 เราเรยก isBase2Pseudoprime(341)สกกหนกไดคาตอบเหมอนกนคอ TRUE (เราไมเรยกอลกอรทมขางบนนวาเปนอลกอรทมเชงสมเพราะมนมพฤตกรรมการทางานทเหมอนกนทกครงทเรยกใช)
ดวยความรทวาจานวนประกอบตวทเปนจานวนเฉพาะเทยมในฐานหนง อาจไมเปนจานวนเฉพาะเทยมในอกฐานหนงกเปนได เชนถงแมวา 2340 mod 341 = 1 แต 3340 mod 341 = 56 ดงนนจงเกดแนวคดวานาจะใชวธสมพยาน a ในชวง 2 ถง n–2 มาทดสอบ 2 เขยนเปนอลกอรทมเชงสมแบบมอนตคารโลไดดงน
2 เราไมสนใจกรณ a = 1 และ a = n–1 เพราะวา 1n–1 mod n = 1 สาหรบทกๆ n และ (n–1)n–1 mod n = 1สาหรบทก n � 3 ทเปนจานวนค)
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 299
01: isPrime_Fermat_MC( n )02: {03: a = random( 2, n–2 )04: if ( an–1 mod n � 1 ) return FALSE; else return TRUE05: }
ดวยวธนเราไดอลกอรทมทเอนเอยงกบคาตอบ FALSE (คอถาตอบวาไมใชจานวนเฉพาะกมนใจในคาตอบไดแนวาถก เพราะพบพยานแลว) และสามารถเรยกซาได เพอเพมความมนใจในคาตอบกรณท เปน TRUE วาคงเปนจานวนเฉพาะจรงๆ คาถามทนาสนใจกคอแลว isPrime_Fermat_MC เปนอลกอรทมแบบ p–correct หรอไม ถาเปนแลว p มคาเทาไร
อลกอรทม isPrime_Fermat_MC นนงาย รวดเรว และใชไดดทเดยวในการทดสอบความเปนจานวนเฉพาะ แตกมจานวนประกอบอยประเภทหนงท เ รยกวาจานวนคารไมเคล(Carmichael number) ซงผานการทดสอบของแฟรมาตในทกๆ a ทเฉพาะสมพทธกบ n แสดงใหเหนวามจานวนประกอบอยประเภทหนงทมพยานเทจมากมาย ดงแสดงเปนตวอยางในตารางท 12–1 โดยทสดสวนของจานวนพยานเทจมเพมขนเรอยๆ ตามคาของจานวนคารไมเคล (651693055693681 มพยานเทจถง 99.9965%) อกทงเปนทคาดเดากนวามจานวนคารไมเคลอยเปนอนนต ดงนนจงไมสามารถระบ p เพอบอกไดอยางมนใจวา isPrime_Fermat_MC เปนอลกอรทมแบบ p–correct ได สรปไดวามจานวนประกอบอยมากมายทเราไมสามารถเรยก isPrime_Fermat_MC ซาเพอลดความนาจะเปนทจะใหคาตอบผดลงได
ตารางท 12–1 จานวนพยานเทจของจานวนคารไมเคล 3 ตวแรกCarmichael Number จานวน false withness (2 ถง n–2)
561 318 (57%)1105 766 (69%)1729 1294 (75%)
แลวจะทาอยางไรด ? ดวยความรในทฤษฎจานวน เราสามารถอาศยทฤษฎการผกผนมอดโลจานวนเฉพาะขางลางนเสรมเขาไประหวางการทดสอบของแฟรมาต กลายเปนการทดสอบอกแบบทเรยกกนวาการทดสอบของมลเลอร–ราบน (Miller–Rabin’s primality test)
ให n เปนจานวนเฉพาะและ 1� d � n–1 จะไดวา d 2 � 1 (mod n) กตอเมอ d � �1 (mod n)
เพอใหเขาใจกระบวนการทดสอบของมลเลอรและราบน จะขอขยายรายละเอยดของการหาคา an–1 mod n ใน isPrime_Fermat_MC แสดงไดดวยรหสเทยมดงน
300 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
01: isPrime_Fermat_MC( n )02: {03: a = random( 2, n–2 )04: <bk,bk–1,...,b1,b0> = the binary representation of n–105: d = 106: for (i=k downto 0) {07: d = d2 mod n08: if (bi == 1) d = (d�a) mod n09: }10: if (d � 1) return TRUE else return FALSE11: }
บรรทดท 4 ถง 9 คอรายละเอยดของการหาคา an–1 mod n แทนทจะใชการเรยกแบบแวยนเกดตามทไดเคยนาเสนอมา (ในบทท 8) จะขอเขยนในอกลกษณะหนง (เรยกวาการยกกาลงสองซา– repeated squaring) ทไดผลเหมอนกนแตทางานในรปวงวน กาหนดให <bk, bk–1, ..., b1, b0>คอรหสฐานสองของ n–1 นนคอ n–1 = bk2k + bk–12k–1 +...+ b121 + b020 ดงนน
� � 011
00
11
11
00
11
11
2222
2222
)2222(1
bbbb
bbbb
bbbbn
aaaa
aaaa
aa
kk
kk
kk
kk
kk
���
�
�
���
�
�
��
�
�
��
�
���
���
��
�
�
�
�
�
�
������
�
�
�
ซงเปนทมาของการทางานในวงวน for ทบรรทดท 6 ถง 9 เพยงแตมการ mod n เสรมตามหลงทกๆ การยกกาลงสอง และการคณ เมอคานวณ an–1 mod n เสรจผลทไดเกบใน d ซงถกทดสอบในบรรทดท 10 วา n เปนจานวนประกอบหรอเปนจานวนเฉพาะเทยมฐาน a
ใหสงเกตวาในทกๆ รอบของวงวน for ขางบนนมการคานวณ d2 mod n เนองจากเรากาลงสนใจทดสอบวา n เปนจานวนเฉพาะหรอไม ดงนนเมอใดท d2 mod n = 1 กตองทดสอบตอทนทวาแลว d = 1 หรอ d = n–1 ดวยหรอไม 3 ถาไมเทากบ 1 และไมเทากบ n–1 จะสรปไดทนทเลยวา n เปนจานวนประกอบแนๆ (ดวยความรจากทฤษฎการผกผนมอดโลจานวนเฉพาะ) ไดอลกอรทมเชงสมแบบมอนตคารโลเขยนไดเปนรหสเทยมดงน
3 เนองจากระหวางการทางานในวงวนนน 0 � d � n–1 แนๆ ดงนนการท d � 1 (mod n) มสองกรณคอ d =1 และ d = n–1
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 301
01: isPrime_MillerRabin_MC( n )02: {03: a = random( 2, n–2 )04: <bk,bk–1,...,b1,b0> = the binary representation of n–105: d = 106: for (i=k downto 0) {07: x = d08: d = d2 mod n09: if ( d == 1 AND x � 1 AND x � n–1 ) return FALSE10: if (bi == 1) d = (d�a) mod n11: }12: if (d � 1) return FASLE else return TRUE13: }
ซงกเพยงแตเพมบรรทดท 7 เพอเกบคา d กอนยกกาลงสองและเพมการทดสอบในบรรทดท 9 ตามทฤษฎทอธบายขางตน
มาดกนสกตวอยาง ให n = 1729 จะได (1728)10 = (11011000000)2 ดงนนการเปลยนแปลงคาตางๆ ของตวแปรตางๆ ในอลกอรทมขางบนนจะเปนดงน กาหนดใหสมได a = 3
i bi xd (บรรทดท 9) d (บรรทดท 10)
10 1 1 1 13 mod 1729 = 39 1 3 32 mod 1729 = 9 93 mod 1729 = 278 0 27 272 mod 1729 = 729 7297 1 729 7292 mod 1729 = 638 6383 mod 1729 = 1856 1 185 1852 mod 1729 = 1374 13743 mod 1729 = 6645 0 664 6642 mod 1729 = 1
ในรอบท i = 5 การตรวจสอบทบรรทดท 9 พบวา d = 1 แต x = 664 (ซงไมเทากบ 1 และ 1728) ดงนนสรปไดวา 1729 เปนจานวนประกอบแนๆ
และกอกเชนเคย การทดสอบของมลเลอรราบนกไมสมบรณรอยเปอรเซนต เชนให n = 1729 แตคราวนสมได a = 9 การเปลยนแปลงคาตางๆ ของตวแปรตางๆ ในอลกอรทมเปนดงน
i bi xd (บรรทดท 9) d (บรรทดท 10)
10 1 1 1 19 mod 1729 = 99 1 9 92 mod 1729 = 81 819 mod 1729 = 7298 0 729 7292 mod 1729 = 638 6387 1 638 6382 mod 1729 = 729 7299 mod 1729 = 13746 1 1374 13742 mod 1729 = 1537 15379 mod 1729 = 15 0 1 12 mod 1729 = 1 14 0 1 12 mod 1729 = 1 13 0 1 12 mod 1729 = 1 12 0 1 12 mod 1729 = 1 11 0 1 12 mod 1729 = 1 10 0 1 12 mod 1729 = 1 1
302 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
จากตวอยางขางบนน ไมสามารถสรปไดวา 1729 เปนจานวนประกอบ เพราะพยานทสมมา (a = 9) ไมสามารถยนยนความเปนจานวนประกอบได ดงนนการสรปวาเปนจานวนเฉพาะจงใหผลผดในกรณน เราเรยกจานวนประกอบทผานการทดสอบของมลเลอรราบนเมอใช a เปนพยานวาเปนจานวนเฉพาะเทยมเขมฐาน a (base–a strong pseudoprime) และเรยก a ในเหตการณเชนนวาเปนพยานเทจเขม (strong false witness)
ถงแมวาการมจานวนเฉพาะเทยมเขมในการทดสอบของมลเลอรราบน บอกเราวาการทดสอบนมโอกาสทางานผดพลาด (เหมอนกบการมจานวนเฉพาะเทยมในการทดสอบของแฟรมาต) แตขาวดคอจานวนพยานเทจเขมนนมนอยมากๆ ดงตวอยางทแสดงในตารางท 12–2 อกทงสามารถพสจนไดวา (จะไมพสจนใหด ผสนใจหาอานไดในหนงสอทางทฤษฎจานวนทวไป)
มจานวนพยานเทจเขมไมเกน (n–9)/4 ตว ในการทดสอบจานวนประกอบค n > 4
สรปไดวาการทดสอบของมลเลอรราบน (isPrime_MillerRabin_MC) มโอกาสใหคาตอบผดนอยกวา ¼ (เพราะวามพยานเทจเขมนอยกวา n/4 จากพยานทงหมดทมตงแต 2 ถง n–2) ดงนนจงเปนอลกอรทมมอนตคารโลแบบ ¾–correct ทเอนเอยงดวย
ตารางท 12–2 จานวนพยานเทจและพยานเทจเขมของจานวนคารไมเคล 3 ตวแรกCarmichael Number
(n)จานวน false withness
(2 ถง n–2)จานวน strong false withness
(2 ถง n–2)561 318 (57%) 8 (1.4%)1105 766 (69%) 28 (2.5%)1729 1294 (75%) 160 (9.3%)
ดงนนจงสามารถเรยกการทดสอบนซาไดเพอลดโอกาสผดพลาดลงไดตามความพอใจ ถาตองการใหความนาจะเปนทจะไดคาตอบผดไมเกน � กตองเรยกซา k ครงเพอให 4–k � � นนคอ ให k = �(lg 1/�) / 2� ดวยอลกอรทมขางลางน
01: isPrime_MillerRabin_MC_Repeat( n, k )02: {03: for(i=1 to k) {04: if ( isPrime_MillerRabin_MC(n) == FALSE)05: return FALSE06: }07: return TRUE08: }
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 303
ในทฤษฎจานวนเชงวเคราะหนน มขอความคาดเดาทไดรบการกลาวขานกนมากขอความหนงเรยกวา “generalized Riemann hypothesis” ซงใหผลทนกทฤษฎจานวนทงหลายเชอวาเปนจรงแตยงพสจนไมไดวา
มพยาน a ทยนยนความเปนจานวนประกอบในการทดสอบของมลเลอรราบนแนๆ ในชวง
1 < a < 70(lg n)2
ดงนนเราสามารถออกแบบการทดสอบความเปนจานวนเฉพาะได โดยการลยทดสอบดวยวธเดยวกบมลเลอรราบนเพยงแตวาคราวนใชวธแปรคา a ตงแต 2 ถง 70(lg n)2 ถาผานหมดกมนใจเตมรอยวาเปนจานวนเฉพาะ กลายเปนอลกอรทมเชงกาหนด (ไมใชแบบเชงสมแลว) แตตองอยาลมวาตรงนตงอยบนขอความคาดเดาทยงไมไดรบการพสจน เนองจากการทดสอบของมลเลอรราบนหนงครง คอการยกกาลงมอดลารใชเวลาแปรตามกาลงสามของจานวนบตซงกคอ O( (lg n)3 ) เราตองทาการทดสอบโดยเปลยนพยาน a เปนจานวน O( (lg n)2 ) หน ผลทไดกคออลกอรทมททางานในเวลา O( (lg n)5 ) ซงเปนฟงกชนแบบพหนามของขนาดของขอมล
การจบคสตรงการจบคสตรง (string matchng) คอปญหาทรบสตรง X = x1x2x3... xn และ Y = y1y2y3... ym โดยท n � m โดยมจดประสงคเพอหาวามสตรง Y ปรากฎอยทใดในสตรง X กาหนดให X(j) คอxjxj+1...xj+m–1 ซงกคอสตรงยอยของ X ความยาว m ซงเรมทตาแหนงท j ใน X อลกอรทมเชงกาหนดแบบงายใชวธลย โดยการลองเทยบสตรง X(j) กบ Y สาหรบ j = 1,2, ...,n–m+1 ซงใชเวลาเปน O(nm) เพราะการเทยบสตรงแตละครงใชเวลาแปรตามขนาดของ Y เปน O(m) และเราตองเทยบเปนจานวน O(n) ครงตามคา j อยางไรกตามมอลกอรทมเชงกาหนดอยหลายวธดวยกนทสามารถจบคสตรงไดในเวลา O(m+n) เชนอลกอรทม KMP (Knuth–Morris–Pratt) 4 และ BM (Boyer Moore) 5 เปนตน แตอลกอรทมเหลานมขนตอนวธคอนขางยงยาก ในหวขอยอยน
4 D. E. Knuth, J. H. Morris, Jr., and V. R. Pratt, “Fast pattern mathcing in strings” SIAM Journal of
Computing, vol. 6, no. 1, pp. 323–350, 19775 R. S. Boyer and J. S. Moore, “A fast string searching algorithm,” Communications of the ACM, vol. 20,
no. 10, pp 762–772, 1977
304 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
เราจะนาเสนออลกอรทมเชงสมแบบมอนตคารโลทมขนตอนการทางานทงายมาก (แตวเคราะหยงหนอย) ซงมคาคาดหวงของเวลาการทางานเปน O(n+m) เชนกน
เพอความงายในการนาเสนอจะพจารณาสตรง X และ Y ในลกษณะทเปนสตรงของบต (นนคอ xi และ yj ใดๆ ในสตรงมคาเปน 0 หรอ 1) ลองคดดเลนๆ กอนวาถา Y เปนสตรงความยาวไมเกน 32 บต แทนทเราจะเปรยบเทยบ X(j) กบ Y บตตอบต เปนจานวนอยางมาก 32 บต ทาไมเราไมมอง 32 บตนเปนจานวนเตม ซงเราสามารถเกบในรจสเตอรของหนวยประมวลผล (ซพยแบบ 32 บตกจะสามารถประมวลผลขอมลไดครงละ 32 บต) แลวใชคาสงเปรยบเทยบจานวนเตมซงหนวยประมวลผลสามารถเปรยบเทยบทง 32 บตไดพรอมๆ กนทนท ถอไดวาการเปรยบเทยบ X(j) กบ Y ใชเวลาคงตว ดวยขอกาหนดขางตนการจบคสตรงกใชเวลา O(n)
แตถา m มคามากกวา 32 บต แลวจะทาอยางไร ? ถาจะใชกลวธขางตน กแสดงวาเรามอง X(j) กบ Y เปนเลขขนาด m บต การเปรยบเทยบจานวนเตมขนาด m บตสองจานวนโดยคอยๆ เปรยบเทยบทละ 32 บต (ตามขนาดของรจสเตอรในระบบ) กตองใชการเปรยบเทยบรจสเตอรเปนจานวน �m/32� ครง ซงกคอ O(m) นนเอง เวลาโดยรวมของการจบคสตรงกเปน O(nm)
กลวธการจบคสตรงทจะนาเสนอนใชวธการมองสตรงเปนจานวนเตมเชนเดยวกน โดยจะไมนา X(j) กบ Y มาเปรยบเทยบโดยตรง แตอาศยการนา X(j) กบ Y ไปผานฟงกชน Fp ซงเปลยนจากจานวนเตมในชวง [0, 2m–1] ไปเปนจานวนเตมในชวง [0, p–1] ทมชวงเลกกวามาก เลกพอทจะเกบในรจสเตอรจานวนคงทได (ประเดยวคอยบอกวา Fp เปนอยางไร และ p คออะไร) เมอไดผลลพธเปนจานวนเตม Fp(X(j)) กบ Fp(Y) แลวกสามารถนามาเปรยบเทยบแทนการเปรยบเทยบ X(j) กบ Y ในเวลารวดเรวกวามาก
ผลลพธของฟงกชน Fp นเปรยบเสมอนเปนตวแทนของสตรง ดงนนจงเรยก Fp วาเปนฟงกชนลายนวมอ (fingerprint function) โดยให Fp(Y) = Y mod p เปนฟงกชนงายๆ ทใชคานวณคาลายนวมอของจานวนเตม Y โดยท p เปนจานวนเฉพาะ (คาของ p จะคอยบอกในภายหลง) เราคงตองการให Fp(X(j)) � Fp(Y) เมอ X(j) � Y และ Fp(X(j)) = Fp(Y) เมอ X(j) = Y แตเนองจากฟงกชน FP นนเปลยนจานวนเตมในชวงกวางไปเปนจานวนในชวงทแคบกวา ดงนนจงมโอกาสท Fp(X(j)) = Fp(Y) โดยท X(j) � Y เราเรยกเหตการณเชนนวาเปนการจบคเทจ (false
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 305
match) 6 ดวยการตงคา p ใหมคาเหมาะสม สามารถทาใหโอกาสทจะเกดการจบคเทจเปน O(1/n) (จะแสดงใหเหนจรงตอไป) สาหรบกรณ Fp(X(j)) � Fp(Y) กเปนอนแนใจไดวา X(j) � Y
ถงตรงนมอยสองคาถามทนาสงสยคอ p มคาเทาไร ? และเราจะคานวณ Fp(X(j)) สาหรบ j = 1, 2, ..., n–m+1 อยางรวดเรวไดอยางไร ? จะขอตอบคาถามขอหลงกอน กอนอนเราคานวณ Fp(Y) เพยงครงเดยวเพราะสตรง Y ไมเปลยนแปลง แตสาหรบ X(j) นนเปลยนแปลงไปเรอยตามคา jถาสงเกตดๆ จะพบวา X(j+1) กคอ m–1 บตทางขวาของ X(j) ตอทายดวยบต xj+m ของ X นนคอ
X(j+1) = 2[ X(j) – 2m–1xj ] + xj+m
จาก Fp(X(j)) = X(j) mod p ดงนนFp( X(j+1) ) = ( 2[ Fp(X(j) – 2m–1xj ] + xj+m ) mod p
แสดงใหเหนวาการคานวณ Fp( X(j+1) ) นนใชผลของ Fp( X(j) ) มาชวยลดภาระการคานวณลงไปเปน O(1) จะมกแต Fp(X(1)) เทานนทตองเสยเวลาคานวณเปน O(m)
กมาถงคาถามวาแลว p มคาเทาไร จงจะทาให Pr[ เกดการจบคเทจ ] = O(1/n) นนคอโอกาสทจะเกดการจบคเทจลดลงเรอยตามขนาดของสตรงตนแบบทตองการจบค กอนอนขอยอนอดตไปสความรในเรองทฤษฎจานวน ดงตอไปน (ทไมขอพสจน)
� มจานวนตวหารเฉพาะ (prime divisor) อยไมเกน m ตวของจานวนทมคานอยกวา 2m
� กาหนดให �(�) คอจานวนของจานวนเฉพาะทมคาไมเกน � ทฤษฎบทจานวนเฉพาะ (The Prime Number Theorem) บอกเราวา �(�) � � /ln �
เนองจากการจบคเทจคอ X(j) � Y (mod p) แตวา X(j) � Y ซงเกดขนไดเมอ p หารผลตางของ X(j) กบ Y ลงตว ผลตางนเปนจานวนทมขนาดไมเกน 2m (เพราะวา X(j) และ Y มขนาด m บต) ดงนนจงมจานวนเฉพาะทหารผลตางนลงตวไมเกน m ตว ถาเราสมเลอกจานวนเฉพาะ p ทมคานอยกวา � และ กาหนดให � = n2m log (n2m) จะไดวา
Pr[ Fp(X(j)) = Fp(Y) | X(j)) � Y ] � m�(�) = O�
���mlog (n2m log n2m)
n2m log n2m = O��
��1
n2
เนองจากม X(j) เปนจานวน O(n) ตวทตองพจารณา ( j =1,2,..., n–m+1 ) แสดงวา
6 อยากใหนกเรยนเทยบเคยงการจบคเทจกบการชนในเรองของการแฮช จะพบวามแนวคดเบองหลงการทางานคลายกน
306 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
Pr [ เกดการจบคเทจ ] = O�� ��n
n2 = O�� ��1
n
จากขอกาหนดขางตนทให � = n2m log (n2m), n > m และ p < � สรปไดวา p เปนจานวนเฉพาะทมขนาดเปน O( log n )
ในทางปฏบตเรามกกาหนดใหสมเลอก p ทมจานวนบตประมาณเทากบขนาดของรจสเตอรของหนวยประมวลผลทใช เพราะการคานวณ Fp จะกระทาไดสะดวกและรวดเรว สมมตวาเราใชหนวยประมวลผลแบบ 64 บต จะไดวา �(264) � 4�1017 ตว ดงนนโอกาสทจะเกดการจบคเทจจะเปน nm
4�1017 ลองให n = 108 m = 103 จะได Pr[ เกดการจบคเทจ ] นอยกวา 1 ใน 106
วธการจบคสตรงขางบนนเปนวธของ Rabin และ Karp 7 เขยนเปนรหสเทยมสนๆ ไดดงน01: StringMatching_Rabin_Karp_MC( X[1..n], Y[1..m] )02: {03: p = bigRandomPrime()04: fy = Fp( Y[1..m] )05: fx = Fp( X[1..m] )06: j = 107: while ( j < n–m+1 && fy != fx ) {08: ++j09: fx = ((2*fx – 2m X[j]) + X[j+m]) mod p10: }11: if ( fy == fx ) return j else return 012: }
อลกอรทมแบบลาสเวกสอลกอรทมเชงสมแบบลาสเวกสเปนอลกอรทมคนคาตอบทถกตองเสมอ เพยงแตวามเวลาการทางานทไมแนนอน บางครงเรวมาก บางครงชามาก บางครงชามากๆ จนไมรวาทางานตดในวงวนไมสนสดหรอไม เราสามารถแบงอลกอรทมแบบลาสเวกสไดเปนสองแบบคอแบบทไมตองเรยกซา กบอกแบบทอาจตองเรยกซาหลายครง แบบไมตองเรยกซานนอาศยการปรบปรงจากอลกอรทมเชงกาหนดทมอยเดมโดยเพมการเลอกเชงสมเขาไประหวางการทางาน ผลทไดจะเปนอลกอรทมทเราเรยกใชครงเดยวกไดคาตอบเสมอ สวนแบบทอาจตองเรยกซานนอาศยอ
7 R. M. Karp and M. O. Rabin, “Efficient randomized pattern–matching algorithms,” IBM Journal of
Research and Development, 31:249–260, 1987
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 307
ลกอรทมเชงสมซงอาจใหคาตอบทถกตองหรอยอมรบวาหาคาตอบไมได เมอใดทรวาหาคาตอบไมไดกเพยงแตเรยกซาใหม กระทาเชนนจนกวาจะหาคาตอบพบ หวขอยอยถดไปนจะนาเสนอรายละเอยดของอลกอรทมของทงสองแบบนพรอมตวอยางตางๆ
อลกอรทมแบบลาสเวกสทไมตองเรยกซาอลกอรทมแบบลาสเวกสในลกษณะนอาศยการปรบปรงอลกอรทมเชงกาหนดทมอย โดยเพมวธการเลอก หรอการตดสนใจเชงสมบางอยางเขาไประหวางการทางาน โดยทวไปเรามกใชกบอลกอรทมเชงกาหนดซงมเวลาการทางานในกรณเฉลยและกรณเลวสดซงตางกนมาก เมอเพมการเลอกสมเขาไป จะมผลทาใหคาคาดหวงของเวลาการทางานมคาเทยบเทากบเวลาการทางานในกรณเฉลยของอลกอรทมเชงกาหนดนน
ตวอยางเชน QuickSort ซงใชวธการเลอกขอมลตวแรกในชดขอมลเปน pivot นน เปนอลกอรทมเชงกาหนดซงมเวลาการทางานในกรณเลวสดเปน O(n2) และในกรณเฉลยเปน O(n log n)ถาเปลยนวธการเลอกขอมลตวแรกเปน pivot มาเปนการสมเลอกขอมลมาเปน pivot (ซงคอ RandomizedQuickSort) จะไดผลดงน
� ไมมขอมลขาเขาชดเลวสด เพราะเราไมรลวงหนาวาขอมลตวใดบางจะถกสมเปน pivot ระหวางการทางาน
� ถาเรยกใช RandomizedQuickSort กบขอมลชดเดยวกน หลายๆ ครงจะใชเวลาตางกน เนองจากสมได pivot ตางกน ซงมคาคาดหวงของเวลาการทางานเทากบเวลาการทางานของ QuickSort ในกรณเฉลยซงเปน O(n log n)
ตองขอเนนตรงนวา เมอเราพดถงเวลาการทางานในกรณเฉลยของอลกอรทมเชงกาหนดหนงๆ นน คอเวลาเฉลยนวเคราะหมาจากเวลาการทางานสาหรบขอมลขาเขาในทกๆ ลกษณะ โดยตองอาศยการแจงแจงโอกาสขอมลขาเขาในตละลกษณะ ทจะปรากฎขนจรงในทางปฏบตเขามาเกยวของดวยซงเปนสงทมกไมร หรอถารกอาจเปลยนแปลงได (โดยทวไปกเลยเฉลยแบบใหโอกาสทแตละลกษณะจะเกดขนมเทาๆ กน) แตถาเราพดถงคาคาดหวงของเวลาการทางานของอลกอรทมแบบสม จะเปนเวลาการทางานสาหรบขอมลขาเขาใดๆ ซงหาไดจากเวลาการทางานของอลกอรทมกบขอมลขาเขานนๆ กระทาซาแลวซาเลา (เนองจากเวลาการทางานในแตละครงนนไมเหมอนกน ขนการผลทไดจาการสมระหวางการทางาน) การวเคราะหไมไดอาศยความนาจะเปนทขอมลขาเขานนจะเกดขนเลย แตจะขนกบการแจงแจงผลทไดจากการสมในอ
308 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
ลกอรทมซงเปนสงทเราสามารถวเคราะหได (เชนกรณการเลอกตวหลกแบบสมนนตความไดวาขอมลแตละตวในรายการมสทธถกเลอกเปนตวหลกไดเทาๆ กน)
อลกอรทมแบบลาสเวกสทอาจตองเรยกซาเราสามารถสรางอลกอรทมแบบลาสเวกสในอกรปแบบหนงทใหคาตอบถกตองเสมอ โดยนาผลทไดจากอลกอรทมแบบมอนตคารโลมาตรวจสอบความถกตองของคาตอบ ถาถกตองกเปนการเสรจสนการทางาน แตถาผดกเพยงแตเรยกใชอลกอรทมแบบมอนตคารโลใหมซา (ซงจะมพฤตกรรมการทางานตางจากการเรยกครงทแลว เพราะเปนอลกอรทมเชงสม) จนกวาจะไดคาตอบทถกตอง แตเราจะทาเชนนใหไดผลดกเมอมวธตรวจสอบคาตอบจากอลกอรทมแบบมอนตคารโลอยางรวดเรววาถกตองหรอไม ดงแสดงดวยรหสเทยมขางลางน
01: Algorithm_LV( x )02: {03: do {04: a = Algorithm_MC( x )05: } while( isNotCorrect( x, a ) )06: return a07: }
กาหนดให tMC คอคาคาดหวงของเวลาการทางานของ Algorithm_MC tV คอเวลาทใชในการตรวจสอบคาตอบวาถกตองหรอไม (ฟงกชน isNotCorrect) p คอความนาจะเปนท Algorithm_MC จะใหคาตอบทถกตอง และ tLV คอคาคาดหวงของเวลาการทางานของ Algorithm_LV จะไดวา
tLV = p(tMC + tV) + (1–p)(tMC + tV + tLV)
= (tMC + tV)
p
หรออกวธหนงทมลกษณะการทางานคลายกน แตคราวนใหออกแบบอลกอรทมเชงสมซงไดผลลพธสองรปแบบคอ ใหผลลพธทเปนคาตอบทถกตอง หรอไมกใหผลลพธทระบวา "หาคาตอบไมได" 8 เรยกใชอลกอรทมเชงสมน ถาใหคาตอบออกมากเสรจสนการทางาน (เพราะพบคาตอบทถกแนแลว) แตถาผลทไดคอการยอมรบวาหาคาตอบไมได กเรยกซาทาใหมจนกวาจะไดคาตอบ (อยาลมวาเนองจากเปนอลกอรทมเชงสมการเรยกใหมกมพฤตกรรมการทางานแบบใหม) แสดงดวยรหสเทยมไดดงน
8 บางคนกนยามลกษณะของอลกอรทมเชงสมแบบนวาเปนอลกอรทมแบบลาสเวกส
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 309
01: Algorithm_LV( x )02: {03: do {04: (a, success) = Algorithm_Randomized( x )05: } while( NOT success )06: return a07: }
กาหนดให tS และ tF คอคาคาดหวงของเวลาการทางานของ Algorithm_Randomizedสาหรบกรณทหาคาตอบได และกรณทยอมรบวาหาคาตอบไมไดตามลาดบ p คอความนาจะเปนท Algorithm_Randomized จะใหคาตอบ และ tLV คอคาคาดหวงของเวลาการทางานของ Algorithm_LV จะไดวา
tLV = p�tS + (1–p)(tF + tLV)
= tS + tF��
��1-p
p
ปญหาการเลอกปญหาการเลอก (selection) คอปญหาการเลอกขอมลตวทเลกทสดเปนอนดบท m ในรายการซงเราไดนาเสนออลกอรทมเชงกาหนดทหาคาตอบไดในเวลา O(n) มาแลว (QuickSelect) โดยอาศยการแบงสวนแบบทเลอกตวหลกดวยวธ “มธยฐานของมธยฐานของหา” ซงประกนคณภาพการแบงสวนแบบ 30%–70% ในกรณเลวสด ทาใหสามารถหาคาตอบไดในเวลาทเปนเชงเสนกบปรมาณขอมล ถาหนกลบไปใชการแบงสวนแบบใชขอมลตวแรกในรายการเปนตวหลก กจะไดเวลาการทางานในกรณเลวสดเปน O(n2) แตในกรณเฉลยกลบใชเวลาเปน O(n) พฤตกรรมของอลกอรทมเชงกาหนดเชนน (ซงเหมอนกบกรณ QuickSort) สงผลใหสามารถสรางอลกอรทมแบบลาสเวกสทสมเลอกขอมลในรายการมาเปนตวหลก กจะไดคาคาดหวงของเวลาการทางานเปน O(n) เชนกน (ขอใหกลบไปดวธวเคราะหในบทท 8)
การจบคสตรงจากทไดนาเสนออลกอรทมการจบคสตรงของ Rabin–Karp แบบมอนตคารโลมาแลว พบวาโอกาสทจะเกดการจบคเทจนนมนอยมาก แตอยางไรกตามกยงมโอกาสผด เราสามารถสรางอลกอรทมแบบลาสเวกสทใหคาตอบในการจบคสตรงทถกตองเสมอ โดยการนาผลทไดจาก StringMatching_Rabin_Karp_MC มาตรวจสอบวาเมอ Fp(X(j)) มคาเทากบ Y แลว X(j) เหมอนกบ Y หรอไม ซงภาระการตรวจสอบตรงนเสยเวลา O(m) หากพบวาเทากบกจบ แตถา
310 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
พบวาไมเทากน กสามารถเรยก StringMatching_Rabin_Karp_MC ซา แสดงดวยรหสเทยมขางลางน ซงมคาคาดหวงของเวลาการทางานเปน O( (m+n) / (1–1/n) ) = O( m+n )01: StringMatching_Rabin_Karp_LV( X[1..n], Y[1..m] )02: {03: do {04: j = StringMatching_Rabin_Karp_MC( X[1..n], Y[1..m] )05: if ( j == 0 ) break;06: i = 107: while ( i <= m && X[j+i–1] == Y[i] )08: ++i09: } while( X[j+1–1] � Y[i] )10: return j11: }
หรอจะใชหนกลบไปใชวธการลยจบคแบบ brute force ปกต ซงใชเวลาเปน O(mn) กได โดยมคาคาดหวงของเวลาการทางานเปน O( (m+n)(1–1/n) + mn(1/n) ) = O( m+n ) เชนกน
ปญหา n ควนกาหนดใหมตารางขนาด n�n ชอง และควน n ตว ปญหา n ควน ตองการหาวธการวางควนทง n ตวบนตารางโดยไมมควนตวใดมองเหนควนตวอนๆ เราไดศกษาปญหานพรอมทงวธหาคาตอบดวยการยอนรอยในบททแลว การยอนรอยเปนวธทงาย แตสามารถหาคาตอบไดเฉพาะกรณท n มขนาดเลกๆ ในกรณท n เปนหลกรอย เหนจะใชการยอนรอยไมไดแนๆ (แคลองให n=30 กตองตรวจสอบสถานะในตนไมปรภมสถานะเปนจานวน 56,429,620 จดกวาจะพบคาตอบแรก) ทงนเพราะวาการยอนรอยมระเบยบเกนไป !!! คอลองวางควนไลจากซายไปขวาในแตละบรรทด การลองวางจากซายไปขวาทเปนระเบยบน มไดเปนตวชในเหนวาจะพบคาตอบไดรวดเรว ทาไมเราไมเลอกชองทวางไดแบบสม ไลไปทละบรรทด ดงน01: nQueen_Rand( x[1..n] )02: {03: for ( k=1 to n ) {04: c = 0;05: for ( j=1 to n ) {06: x[k] = j07: if ( promising( x, k ) ok[++c] = j08: }09: if ( c == 0 ) return FAILURE10: x[k] = ok[ random(1,c) ]11: }12: return SUCCESS;13: }
วงวนรอบนอกทาหนาทวางควนหนงตวในแตละรอบ วงวนรอบใน (บรรทดท 5 ถง 8) ทาหนาทหาชองทวางไดซงไมชนกบค วนทไดเคยวางมาแลวในแถวดานบนๆ โดยเกบชองทวางไดไว
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 311
ในแถวลาดบ ok โดยตวแปร c เกบจานวนชองทวางได ถา c เปน 0 แสดงวา "ตน" ไมมชองทวางไดกเลกเพราะลมเหลว (บรรทดท 9) แตถามชองทวางไดกสมเลอกชองหนงมาวางควนลงไป (บรรทดท 10) อลกอรทมมโอกาสไดคาตอบผดจงเปนแบบมอนตคารโลแตเนองจากเราสามารถตรวจสอบคาตอบวาผดหรอถกไดงาย ดงนนจงสามารถเรยกซาไดในกรณทไดคาตอบทผด ไดเปนอลกอรทมแบบลาสเวกสดงน01: nQueen_LV( n )02: {04: while ( nQueen_Rand( x[1..n] ) == FAILURE ) { }05: return x[1..n]06: }
ผเขยนไดลองใช nQueen_LV หาคาตอบของปญหา 30 ควน และ 100 ควน แลวเกบสถตของจานวนการวางควน (บรรทดท 10 ของ nQueen_Rand) จานวนการเรยก nQueen_Rand(บรรทดท 4 ใน nQueen_LV) จากนนคานวณคา davg ซงแทนจานวนควนเฉลยทวางสาเรจในการเรยก nQueen_LV หนงครง แสดงดงตารางท 12–3
ตารางท 12–3 การทดลองใช nQueen_LV หาคาตอบของกรณ n=30 และ100#การวางควน #การเรยกซา davgการทดลอง
ครงท n = 30 n = 100 n = 30 n = 100 n = 30 n = 100
1 2099 9851 84 108 24.9 91.22 1649 40805 66 449 24.9 90.93 1292 4179 51 46 25.3 90.84 616 33406 25 366 24.6 91.35 3983 38320 160 420 24.9 91.2
จากผลการทดลองแสดงใหเหนวา nQueen_LV นนสามารถหาคาตอบของ n ควนไดอยางรวดเรวมาก แตเวลาการทางานจะไมแนนอนแปรเปลยนไดมากในการทดลองแตละครง (กเพราะวาเวลาไปขนกบการสมระหวางการทางาน ) สงทน าสนใจกคอวาในการทางานของ nQueen_Rand นนสวนใหญเกอบจะสาเรจ วางควนไปไดเปนจานวนมาก แลวกมาพบวาตน จงวางแถวตอไปไมได (ดจากคาของ davg เมอ n = 30 พบวาโดยเฉลยวางสาเรจไปไดประมาณ 25 ตว ในขณะทเมอ n = 100 พบวาโดยเฉลยวางสาเรจไปไดประมาณ 91 ตว)
จากพฤตกรรมของการวางควนทเกอบสาเรจเชนน นาไปสการนากลวธการวางสมไปใชรวมกบการยอนรอย โดยวางควนจานวนมาก (แตไมครบ) แบบสมกอน (ซงมโอกาสสาเรจสง) แลวคอยวางควนทเหลอตอดวยวธการยอนรอย ซงพบวเปนวธทสามารถหาคาตอบของปญหา nควนไดอยางรวดเรว (อยากใหนกเรยนไปลองทาด)
312 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
การแฮชเชงจกรภพแนวคดของการแฮช (hashing) ถกนาเสนอโดย Dumey ในป ค.ศ. 1956 9 สาหรบปญหาตารางสญลกษณ (symbol table) ทใชเกบชอตวแปร และชอฟงกชนตางๆ ของโปรแกรมระหวางการแปล (compile) โปรแกรมคอมพวเตอร ปจจยทมผลอยางมากตอประสทธภาพในการจดเกบขอมลในตารางแฮชนน กคอฟงกชนแฮชทเลอกใช (ตามทไดนาเสนอไวในบทท 6) ฟงกชนแฮชทดตองเปนฟงกชนทคานวณไดรวดเรวลดจานวนการชน นนคอควรมคณสมบตทแตละคยทเปนไปไดมโอกาสเทาๆ กนทจะไปอยในชองใดๆ ในตาราง (เรยกคณสมบตเชนนวา simple uniform hashing) แตไมวาเราจะออกแบบฟงกชนไวดเพยงใด กคงมขอมลบางชดซงสรางปญหาใหเกดการชนเปนจานวนมากกบฟงกชนแฮชทเลอกใชนนได
ตวอยางเชนตวแปลภาษาคอมพวเตอร (compiler) ทตองใชตารางสญลกษณในการจดเกบชอตวแปร ชอฟงกชนตางๆ ในโปรแกรมทกาลงถกแปล สมมตวาฟงกชนแฮชทเลอกใชนนตดชอตวแปรเฉพาะ 7 ตวอกษรทางซายมาคานวณ ถาหากเราโชครายไปตงชอตวแปรตางๆ ในโปรแกรม โดยปดทายชอตวแปรทกๆ ตวดวย Somchai เชน counterSomchai, tempSomchai เปนตน กเหนไดชดวายอมเกดการชนเปนจานวนมากในตารางแฮชทใชในตวแปลภาษาน หมายความวาตองเสยเวลาในการแปลโปรแกรมนมากผดปกต ทงๆ ทสาหรบโปรแกรมโดยทวไป (ซงไมไดตงชอเจดตวทายเหมอนกนเชนน) สามารถแปลไดอยางรวดเรว เราอาจวเคราะหเหตการณในลกษณะเชนนวาเปนเรองปกตสาหรบอลกอรทมเชงกาหนดโดยทวไป วาตองมบางชดขอมลททางานชาจนกอใหเกดกรณเลวสดขนได แตถาสาหรบขอมลขาเขากรณเฉลยนนทางานไดอยางมประสทธภาพ กยอมรบกนได แตตองขอเตอนวาการวเคราะหกรณเฉลยนนมกใชสมมตฐานวา ขอมลขาเขาในแตละลกษณะนมโอกาสเกดขนเทาๆ กน ซงอาจไมจรงกได ในทางปฏบตอาจมกลมคนทชอบตงชอตวแปรทลงทายดวยตวอกษรทเหมอนๆ กนกได
จะทาอยางไรดจงจะออกแบบการจดเกบซงมเวลาทางาน ไมขนกบลกษณะของชดขอมลทไดรบ ความตองการนเองนามาซงการใชอลกอรทมเชงสม (ในทนเปนแบบลาสเวกสซงใหผลลพธถกตองเสมอ) เราสามารถหลกเลยงการทตองเผชญกบขอมลขาเขาทไมพงประสงคได โดยแทนทจะใชฟงกชนแฮชทออกแบบไวลวงหนาเพยงหนงฟงกชนในระบบ กออกแบบใหมฟงกชนแฮชจานวนมากๆ ใหสมเลอกใชไดกอนเรมทางาน (ตองขอเนนวาเมอเลอกใชฟงกชนแฮชใด ก
9 A. L. Dumey, Computers and Automation 5 (1956) 6–9.
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 313
ตองใชฟงกชนนนตลอดการประมวลผล เชนสาหรบกรณตวแปลภาษากหมายความวา ตวแปลภาษาจะสมฟงกชนแฮชใหมทกครงทเรมแปลโปรแกรมใหม) เนองจากฟงกชนแฮชถกสมมาใชขณะทางาน ดงนนโอกาสทจะไดฟงกชนแฮชททางานไมดกบขอมลขาเขาทไดรบกนอยมาก
สงทจะนาเสนอตอไปนจะสรางความกระจางในประเดนทผอานคงนกสงสยในใจวา กลมของฟงกชนแฮชทถอวาดนนมลกษณะเชนไร ? ถาดแลวสงผลตอเวลาการทางานอยางไร ? และตวอยางกลมของฟงกชนแฮชทดทมใชกนพรอมทงวธการสม
แนวคดการสมเลอกฟงกชนแฮช สรางปญหาตามมาคอเราตองมกลมของฟงกชนแฮชตางๆ ใหเลอกใช การออกแบบฟงกชนแฮชสกตวกยงอยแลว แตนตองมเปนกลม จะออกแบบอยางไร เพอใหไดกลมของฟงกชนแฮชทด กอนอนเรามานยามคาวากลมของฟงกชนแฮชทดกนกอน เราเรยกกลมของฟงกชนแฮช H วาเปนเชงเอกภพ "universal class of hash functions" เมอจานวนของฟงกชน h � H ซงทาให h(x) = h(y) มทงสน |H| / m สาหรบแตละคของคย x และ yทไมเหมอนกน และ m คอขนาดของตาราง ดวยนยามของกลมเชงเอกภพนตความไดวา ถาเราสมเลอก h จาก H มาใช โอกาสทคย x และ y ทไมเหมอนกนจะชนกนนนม 1/m นนคอ
Pr[ h(x) = h(y) | x � y ] = 1m
สาหรบคย x และ y ใดๆ ทไมเหมอนกนและ h เปนฟงกชนทสมเลอกจาก H
คราวนมาดวา H ซงเปนกลมของฟงกชนแฮชเชงจกรภาพนนมดอะไร กอนอนขอกาหนดให Sคอเซตของคยตางๆ ทเราจะจดเกบ n คอขนาดของเซต S c(x, S) คอคาคาดหวงของจานวนการชนทเกดขนระหวาง x กบคยอนๆ ใน S และ Xx, y คอตวแปรเชงสมทมคาเปน 1 เมอ h(x) = h(y) มฉะนนมคาเปน 0 จะไดวา
���
�
xySyyxXSxc
,,),(
จากคณสมบต linearity of expectation จะไดวา
� � � ����
�
xySyyxXESxcE
,,),(
จากนยามกลมเชงจกภพจะไดวา E(Xx, y ) = 1/m ดงนน
� �m
nm
SxcExySy
11),(,
�
�� ���
314 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
ตความไดวาถาเราใชฟงกชนแฮช h ทไดจากการสมเลอกจาก H เพอเกบขอมลจานวน n ตวในตารางแฮชขนาด m จะไดวาคาคาดหวงของจานวนการชนระหวางคย x กบคยอนๆ ทเกบอยในตารางแฮชจะมคาประมาณเทากบ load factor ของตารางนน ซงเปนสงทผใชตารางแฮชปรารถนา เนองจาก load factor เปนตวกาหนดเวลาการทางานของ การเพม ลบ และหาคย อกทงเราสามารถออกแบบใหตารางแฮชมการขยาย (หรอหด) ขนาดของตารางดวยขบวนการ rehashing เพอควบคมคา load factor ไมใหเกนขอบเขตทกาหนดไวได ทาใหเราสามารถควบคมเวลาการทางานของแตละการดาเนนการใหเปน O(1) ได
หลงจากรแลววาการสมเลอกฟงกชนแฮชมาใช จากกลมของฟงกชนแฮชเชงจกรภาพนนเปนเรองด ปญหาทตามมากคอแลวเราจะหากลมของฟงกชนทวานไดอยางไร ? กาหนดใหคยตางๆ เปนจานวนเตมในชวง [0, U–1] และ m คอขนาดของตารางแฮช ดงนนฟงกชนแฮชใดๆ ตองแปลงจานวนเตมในชวง [0, U–1] เปนจานวนเตมในชวง [0, m–1] ถาจะลองคดดตรงนสกคร กจะพบวาเซตของฟงกชนทกๆ รปแบบจาก {0,1,...,U–1} � {0,1,..., m–1) (ซงมจานวนทงสน mU ฟงกชน) กคอกลมเชงจกรภพนนเอง (เนองจากสาหรบคของคย x และ y ใดๆ ผลของการแฮชมชนกนได m ตาแหนงในตาราง และ mapping ของคยทเหลอซงมจานวน U–2 มไดทงสน mU–2 แบบ ดงนนจานวนฟงกชนทาให x ชน y มทงสน m� mU–2 = mU–1 แบบซงมคาเทากบ mU/m) อยากใหนกเรยนลองคดตอนนวาจะแทนเซตของฟงกชนทกๆ รปแบบจาก {0,1,...,U–1} � {0,1,..., m–1) ไดอยางไร สมเลอกอยางไร และเมอเลอกไดแลวจะแทนฟงกชนทเลอกไดอยางไร สามประเดนน (เมอนกเรยนทราบคาตอบแลว) ชใหเหนวากลมเชงจกภพแบบนใชไมไดในทางปฏบต
ในป ค.ศ. 1979 Carter และ Wegman 10 ไดนยามกลมของฟงกชนแฮชเชงจกรภพแบบสอง (2–universal) วาเปนเซต H ของฟงกชน
Pr[ h(x) = h(y) | x � y ] � 1m
10 J.L. Carter and M.N. Wegman, Universal classes of hash functions, J. Comp. Sys Sci. 18 (1979), 143–154.
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 315
สาหรบคย x และ y ใดๆ ทไมเหมอนกนและ h เปนฟงกชนทสมเลอกจาก H เหนไดชดจากนยามวากลมเชงจกภพแบบสองนไมดอยกวากลมเชงจกรภพทไดนยามไวตอนตน (แถมอาจดกวาดวยซาไป) โดย Carter และ Wegman ไดพสจนวาฟงกชนแฮชในรปแบบดงน
ha,b(x) = ((ax + b) mod p ) mod m
เปนกลมเชงจกรภพแบบสอง โดยท x คอคาของคย m เปนขนาดของตาราง p เปนจานวนเฉพาะทมคาในชวง [U, 2U ) 11 ฟงกชนแฮชตางๆ ในกลมมลกษณะตางกนตามคาของ a และ bโดยท 0 < a < p และ 0 � b < p กลมฟงกชนนบรรยายงาย ตวฟงกชนกไมซบซน อกทงสามารถเลอกสมไดสะดวก โดยเพยงสมคา a และ b ในชวงทกาหนด
คราวนเราจะมาแสดงใหเหนจรงวากลมฟงกชนทไดนาเสนอมานเปนกลมเชงจกรภพแบบสอง จะขอเขยนฟงกชนขางตนใหมเปนดงน
ha,b(x) = g( fa,b(x) ) โดยท fa,b(x) = (ax + b) mod p และ g(j) = j mod m
กอนอนขอเรมดวยการแสดงใหเหนวาการชนกนนนเปนผลของ g(k) เทานน โดยจะแสดงใหเหนวา fa,b(x) � fa,b(y) สาหรบทกๆ x และ y ทตางกน ดวยวธการขดแยง ถา fa,b(x) = fa,b(y) จะไดวา (ax + b) mod p = (ay + b) mod p แสดงดวยสมภาค (congruence) ไดเปน
ax + b � ay + b (mod p)
ตด b ออกทงสองขางได และเนองจาก 0 < a < p ดงนน gcd( a, p ) = 1 จะเขยนใหมไดเปน 12
x � y (mod p)
ซงเปนไปไมได เนองจาก x � y ทง x และ y เปนคยมคาในชวง [0,U–1] และ p � U จงเปนไปไมไดท x จะสมภาคกบ y สรปไดวาถาคยตางกน ผลของฟงกชน fa,b จะใหคาตางกน
คราวนเรากจะมานบจานวนคของคา a และ b (ซงกคอจานวนฟงกชนในกลม) ททาให ha,b(x) = ha,b(y) สาหรบคย x และ y ทตางกน กาหนดให k เปนจานวนเตมในชวง [0, p–1] จะพบวามคา a และ b ททาให fa,b(x) = k อย p–1 แบบ (ทงนเพราะวาเราเลอกคา a ไดตงแต 1 ถง p–1 และ
11 ในทฤษฎจานวนนนมขอความคาดเดาทระบวาตองมจานวนเฉพาะสกตวแนๆ ในชวง [U, 2U) โดยท Uคอจานวนเตมใดๆ ทมากกวา 1
12 จากความรในทฤษฎจานวนทวา ถา ax � ay (mod p) แลวจะได x � y (mod p / gcd(a,p) )
316 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
สาหรบแตละ a ทเลอกได เราสามารถหาคา b ททาให fa,b(x) = k ไดเสมอ) สาหรบคาของ aและ b ในแตละแบบนนจะใหผลของ fa,b(y) � k (จากผลทไดในยอหนาทแลว) แตเมอนาผลจาก fa,b(y) จานวน p–1 ตวทตางกนเหลานไปผาน g จะไดวามอยไมเกน �(p–1)/m� ตวทได g(fa,b(y)) = g(k) (จากนยามของฟงกชน g(j) = j mod m) แสดงวาสาหรบคา k ใดๆ ในชวง [0, p–1] จะมคาของ a และ b อยางมาก �(p–1)/n� คททาใหเกดการชนกน ha,b(x) = ha,b(y) ของคย x และ y ทตางกน เนองจาก k มคาทเปนไปไดทงสน p คา ดงนนจานวนฟงกชนททาใหเกดการชนกนของคย x และ y ทตางกนจงมคาไมเกน
mpp
mpp )1(1 �
���
���
� �
ดงนนถาสมเลอกคา a และ b ในชวง 0 < a < p และ 0 � b < p ตามขอกาหนด (ซงเลอกไดเเปนจานวนทงสน (p–1)p แบบ) จะมอยไมเกน (p–1)p/m แบบซงกอใหเกดการชน สาหรบคของคยใดๆ ทตางกน นนคอ
Pr[ ha,b(x) = ha,b (y) | x � y ] � p(p-1)/n(p-1)p =
1m
แสดงวา ha,b(x) เปนกลมของฟงกชนแฮชเชงจกรภพแบบสอง
ทอธบายมาทงหมดนเพอแสดงใหเหนวาการนาแนวค ดของอลกอรทมแบบลาสเวกสในการสมเลอกฟงกชนแฮชมาใชจากกลมของฟงกชนเชงจกรภพแบบสอง (แทนทจะใชเพยงฟงกชนเดยวในระบบ) สงผลใหคาคาดหวงของเวลาการทางานเปน O(1) โดยไมขนกบลกษณะของชดขอมลทจดเกบ
แบบฝกหด1. กาหนดให X คอเวกเตอรของเลขฐานสองขนาด 1�n และ Y คอเวกเตอรขนาด 1�n ซงมคาเหมอนกบ X ยกเวนเฉพาะชองท k ชองหนง ซง Y[k] ใหมคาเทากบ ][kX และ D คอเมทรกซขนาด n�n ซงไมใชเมทรกซศนย จงพสจนวา XD และ YD จะเปนเวกเตอรศนย ทงคไมได
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 317
2. จงออกแบบอลกอรทมแบบมอนตคารโล สาหรบตรวจสอบวา A และ B ซงคอเมทรกซขนาด n�n นน A เปนเมทรกซผกผนของเมทรกซ B หรอไม อธบายดวยวาอลกอรทมทนาเสนอมาเปนแบบเอนเอยง และ p-correct หรอไม
3. จงเขยนรหสเทยมของอลกอรทมแบบมอนตคารโลซงคนจานวนเฉพาะทม k หลก
4. กาหนดให A เปนอลกอรทมซงใหคาตอบสองแบบ คอ Y กบ N A เปนอลกอรทมแบบมอนตคารโลซงไมเอนเอยง (หมายความวาคาทคนทงสองแบบนมโอกาสผดทงค) สมมตวาโอกาสท A คนคาตอบถก (ของทงสองแบบ) เปน 3/4 ถาเราใชวธเรยก A สามครง แลวดวาได Y หรอ N แบบใดมากกวากนกถอเอาคาตอบนนเปนหลก จงคานวณความนาจะเปนทไดคาตอบถกดวยการเรยก A สามครงในลกษณะขางตนน
5. ปญหา 2SAT รบ f ซงคอนพจนบลน (Boolean expression) ซงเขยนอยในรปแบบบรรทดฐานแบบเชอม (conjunctive normal form – CNF หรอบางทเรยกกนวาผลคณของผลบวก – product of sums) เชน )()()( 213231 xxxxxxf ������ โดยแตละวงเลบมเพยงสองตวแปรเทานน จากนนตรวจสอบวามวธกาหนดคาใหกบตวแปรบลนตางๆ ใน f ททาให f มคาเปนจรงไดหรอไม
สมมตวามทางทาให f เปนจรงได เราสามารถออกแบบอลกอรทมเชงสมแบบมอนตคารโลซงหาคาของตวแปรตางๆ ททาให f เปนจรงไดในเวลาคาดหวงแบบพหนามดงน กาหนดคาแบบสมใหกบตวแปรตางๆ จากนนตรวจสอบดวามวงเลบใดบางทไดคาเปนเทจ ถาไมมกจบการทางาน แตถายงมบางวงเลบทไดคาเปนเทจ กสมเลอกขนมาหนงวงเลบ จากนนสมเลอกหนงในสองตวแปร (ทตองเปนเทจทงค) แลวกลบคาทาใหเปนจรง (กยอมทาใหวงเลบนเปนจรง) กระทาการสมวงเลบทเทจ สมตวแปรในวงเลบแลวกลบคา เชนนไปเรอยๆ จนได f เปนจรง
จงพสจนวาคาคาดหวงของเวลาการทางานขางตนเปน O(n2) ในการหาคาของตวแปรตางๆ ททาให f เปนจรง โดยท n คอจานวนตวแปร
6. จงออกแบบอลกอรทมเชงสมมอนตคารโลแบบเอนเอยง ซงตรวจสอบวานพจนบลน f ในปญหา 2SAT นนมทางทาใหเปนจรงหรอไม
318 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
7. กาหนดให ��
�
n
i
ii xaxA
0)( , �
�
�
n
i
ii xbxB
0)( และ �
�
�
n
i
ii xcxC
2
0)( เปนฟงกชนพหนาม
ทมดกรเปน n, n และ 2n ตามลาดบ เราสามารถตรวจสอบไดงายๆ วาผลคณของ A(x) กบ B(x) เทากบ C(x) หรอไม ดวยการลองคณ polynomial A(x) กบ B(x) กนจรงๆ จากนนกนาสมประสทธตางๆ ของ xi ในผลคณทไดมาเปรยบเทยบกบสมประสทธตางๆของ xi ใน C(x) กทราบผล เชน A(x) = (1–x), B(x) = (1+x), C(x) = (1+x2) ลองคณ (1–x)(+x) = (1–x2) เทยบสมประสทธกบ (1+x2) กพบวาไมเทา วธนตรงไปตรงมาแตชา มาดอกวธดกวา
คณ Freivalds เสนอวาเราใชวธลองแทนคา x ในฟงกชนทงสามดวยจานวนทสมมาจากเซตของจานวนทมขนาด 4n ตว จากนนคานวณคาของฟงกชนทงสาม แลวลองคณ A กบ B เพอตรวจสอบคาทไดกบ C เชนลองแทน x ดวย 3 ใน A(x) = (1–x), B(x) = (1+x), C(x) = (1+x2) จะได A(3) = –2, B(3) = 4, C(3) = 10 กสรปไดทนทวา A(x)B(x) � C(x) วธนกมโอกาสโชคราย ถาเราลองแทน x ดวย 0 กจะพบวาเทากน
อยากทราบวาอลกอรทมแบบมอนตคารโลของคณ Freivalds ขางบนนเเอนเอยงหรอไม และเปน p-correct โดยท p มคาเทาใด
8. จงวเคราะหคาคาดหวงของจานวนจดในตนไมปรภมสถานะทจะตองแวะผาน ของอลกอรทมแบบลาสเวกสสาหรบปญหา n ควน ถากาหนดให p คอความนาจะเปนทจะทาสาเรจ และ f คอระดบความลกเฉลยทลงไปจนพบวาลมเหลว
9. ในการสรางรายการโยง (linked list) นนโดยทวไปเราจะสรางดวยตวแปรแบบตวชเพอการโยง และใชการจองหนวยความจาแบบพลวตในการจองเนอทเกบชอมล แตเรากสามารถสรางรายการโยงไดดวยแถวลาดบสองชแถว data[] และ next[] data นนมไวเกบขอมล ในขณะท next เกบเลขดชนของชองในแถวลาดบทขอมลตวถดไปอย (เรยกวธสรางแบบนวา cursor-based) มตวแปร head เกบเลขดชนของแถวลาดบทเกบขอมลตวแรกในรายการโยง ดงนนขอมลตวทสองกคอ data[next[head]] เมอใด next[i] = 0 กแสดงวาไมมตวถดไปแลว ถาเราจดเกบรายการโยงนโดยเกบในขอมลเรยงจากนอยไปมาก และถารายการโยงมขอมล n ตว กใชแถวลาดบตงแตชองท 1 ถง n ขอเสยของรายการโยงกคอไมสามารถคนขอมลแบบทวภาคได แตเรากอลกอรทมแบบลาสเวกสคนไดรวดรวกวา ซงสามารถกระทาดงน สมเลอกขอมลมา n ตว จากนนหาตวทคามากสดทไมมากกวา x สมมตวาเกบอยทดชนท k จากนนเรมวงคนแบบลาดบตามรายการโยงเรม
Draft 1.0 : 27/10/00 21:56 : [email protected] บทท 12 อลกอรทมเชงสม 319
จาก data[k], data[next[k]], … เปนตนไป จงแสดงใหเหนจรงวาคาคาดหวงของเวลาในการคนคอ O( n )
10. กาหนดให A และ B เปนอลกอรทมมอนตคารโลแบบเอนเอยงซงแกปญหาเดยวกน โดยท A เปนอลกอรทมแบบ p-correct และเอนเอยงไปทางคาตอบ “จรง” ในขณะท B เปนอลกอรทมแบบ q-correct และเอนเอยงไปทางคาตอบ “เทจ” จงนาเสนอวธการใช A และ Bเพอออกแบบอลกอรทมลาสเวกส (ซงใหคาตอบกตองถก หรอไมกยอมรบวาหาคาตอยไมได) อลกอรทมดงกลาวควรเรยกใช A และ B อยางมากเพยงหนงครง และถาอลกอรทมนใหคาตอบถกดวยความนาจะเปน r อยากทราบวาอลกอรทมทนาเสนอนม r ซงมคามากสดเทาทจะเปนไปไดเทาไร
320 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 27/10/00 21:56 : [email protected]
Draft 1.0 : 28/10/00 20:44 : [email protected] 321
บทท 13
ตงแตบทแรกจนถงบทลาสด เราไดนาเสนอวธการวเคราะหและออกแบบอลกอรทม เพอแกไขขอปญหาทไดรบ สาหรบในบทนเราจะมองกนอกมมหนง คอมองทตวปญหาวาจะสามารถแยกแยะปญหาตางๆ ออกเปนกลมๆ ตามความยาก ความงาย หรอความซบซอนของตวปญหาไดอยางไร สมมตวาโรงงานตดแผนเหลกแหงหนง รบงานตดแผนเหลกออกเปนชนสวนยอยๆ มรปทรงหลากหลายตามความตองการของลกคา ดงตวอยางในรปท 13–1ก
1
2
3
4
56
7
1 2
56 7
34
(ก) (ข)รปท 13–1 ตวอยางการวางรปทรงทตองการ
เพอใหเกดกาไรสงสด เรากควรวางรปแบบตางๆ ทตองการบนแผนเหลก เพอใหเหลอเศษเหลกหลงการตดนอยทสด (รปท 13–1ข) ถาเราตองออกแบบอลกอรทมเพอแกปญหาน กเหนจะมเรองใหคดมากมาย สมมตเราใชเวลาผานไปหนงอาทตย สองอาทตย สามอาทตย หนงเดอนแลว กไดแตอลกอรทมทใหผลลพธตามตองการเฉพาะกรณทจานวนรปแบบบนแผนเหลกมนอยๆ ถามมากกจะทางานชามากๆ จนทนรอคาตอบไมได หรอไมกไดอลกอรทมททางานเรวแตไมไดคาตอบทดทสด (คอเหลอเศษเหลกไมนอยสด) จะโทษวาปญหามนยากเกนความสามารถกเหนจะไมคอยดนก แลวเราจะทาอยางไรด ? คงเปนการดถาเราจะพสจนไดวาปญหานยากในระดบททกๆ คนในวงการในปจจบนกแกไมไดเหมอนเรา (จงไมนามเหตผลจางคนอน
เอนพบรบรณ
322 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
มาออกแบบแทนเรา) ดงนนเราจงควรแนะนาใหทางเจาของเปลยนจดประสงค ใหเราออกแบบอลกอรทมทไดผลลพธทเหลอเศษเหลก “นอยๆ” เทาทจะนอยได แตอาจไมนอยทสด
มปญหามากมายทพบกนในสารพดวงการทมลกษณะเชนน คอยากในระดบทยงไมมใครในโลกออกแบบอลกอรทมทใหผลเฉลยไดเรวๆ เราจะไดศกษากลมปญหาทมลกษณะเชนนซงมชอเรยกวากลมปญหาเอนพบรบรณ (NP–Complete) โดยจะนาเสนอนยามในเรองประสทธภาพของอลกอรทมนยามความยากงายของปญหา ปญหาการตดสนใจ กลมปญหา P, NP, NP–hard และ NP–complete การลดรปปญหา และกลวธทใชในการออกแบบอลกอรทมทจดการเกยวกบปญหาในกลมน
อลกอรทมทมและทไมมประสทธภาพจะขอเรมดวยการสรปเวลาการทางานของอลกอรทมตางๆ ทไดนาเสนอมาในบทกอนๆ ตารางท 13–1 แสดงตวอยางของปญหาและประสทธภาพของอลกอรทมตางๆ โดยเรยงตามปญหาซงเราไดอลกอรทมทมอตราการเตบโตของเวลาการทางานนอยไปยงมาก ไลจากบนลงลาง มทงแบบ log n, n, n log n, n2, n3, ไปจนถงแบบ 2n และ n! ขอเนนวาอลกอรทมทไดนาเสนอมานนอาจจะไมใชอลกอรทมทดทสดสาหรบปญหานนๆ กได (เชนปญหา longest increasing subsequence นนสามารถแกไดดวยอกอลกอรทมทไมไดนาเสนอ แตใชเวลาเปน O(n log n)) ถา A เปนอลกอรทมซงมเวลาการทางานเปน O(nk) โดยท n คอขนาดของขอมลขาเขา และ kคอคาคงท นนคอมขอบเขตบนของเวลาการทางานเปนฟงกชนพหนาม (polynomial–time algorithm) กเปนทยอมรบกนในวงการวา A เปนอลกอรทมทมประสทธภาพ หมายความวา Aจะทางานไดรวดเรว และมอตราการเตบโตของเวลาการทางานทยอมรบได และในทางตรงกนขามถา B เปนอลกอรทมทมเวลาการทางานทโตเรวเกนกวาฟงกชนพหนาม เชน nlog n 2n หรอ n! เปนตน ซงจะขอเรยกเหมาวาเปนฟงกชนเลขชกาลง (exponential–time algorithm) เพอความสะดวก เรากเรยก B วาเปนอลกอรทมทไมมประสทธภาพ 1
1 Edmonds เปนผใหนยามนในบทความ “Paths, trees, and flowers” Canad. J. Math, 17, 449–46, 1965
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 323
ตารางท 13–1 ตวอยางประสทธภาพของอลกอรทมตางๆ ทไดนาเสนอปญหา เวลาการทางานของ
อลกอรทมทไดนาเสนอsearch (comparison–based) O(log n)selection (comparison–based) O(n)sorting (comparison–based) O(n log n)closest point in 2D O(n log n)fractional knapsack O(n log n)single–source shortest path O(e+vlog v)minimum spanning tree O(e log e)longest increasing subsequence O(n2)matrix multiplication O(n2.81)optimal binary search tree O(n3)all pair shortest path O(v3)sum of subset O(2n)0/1 knapsack O(2n)assignment O(n!)
หลายคนคงอยากจะแยงวาถานยามคาวา “มและไมมประสทธภาพ” เปนในลกษณะนกหมายความวาอลกอรทมทใชเวลาเปน 1000000�n100 กยอมมประสทธภาพมากกวาอลกอรทมทใชเวลาเปน 0.0000001�2n ซงไมคอยยตธรรมเทาไรนก ตองขอชแจงใหกระจางตรงนวาการใชเกณฑตรงทวาเปนพหนามหรอไมเปนตวแบงวามหรอไมมประสทธภาพนน ทาใหเราสามารถศกษาเรองของความซบซอนของปญหาเชงเวลาการทางานได โดยไมขนกบลกษณะการเขารหสขอมล หรอลกษณะของเครองคอมพวเตอรซงใชทางาน อกทงในทางปฏบตกมกไมคอยพบอลกอรทมทมลกษณะตามตวอยางขางตน เอาเปนวาเราใชความเปนพหนามนเปนเสนแบงการมประสทธภาพหรอไม ซงแนนอนวากคงตองมกรณยกเวนบาง แตกถอไดวามนอย (ตวอยางทเหนเดนชดกเหนจะเปนการแกปญหา linear programming ดวยวธ simplex ซงมเวลาการทางานในกรณเลวสดแบบเลขชกาลง ในขณะทสามารถแกไดดวยวธ ellipsoid ซงมเวลาการทางานแบบพหนาม แตวธแรกนนเรวกวาวธหลงมากๆ ในทางปฏบต)
324 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
ปญหางายและยากหลงจากทไดนยามวาอะไรคออลกอรทมทมประสทธภาพและไมมประสทธภาพแลว คราวนกจะมานยามคาวาปญหางายและปญหายาก เราเรยกปญหาหนงวางาย (tractable problem) กเมอเรามอลกอรทมทมประสทธภาพซงใชแกไขปญหานได และเรยกวาปญหาหนงวายาก (intractable problem) กเมอเราพสจนไดวาตองใชอลกอรทมทไมมประสทธภาพแนๆ ในการแกปญหาน
จากนยามขางตนกยอมสรปไดวาปญหาตางๆ ยกเวนสามปญหาสดทายในตารางท 13–1 นนเปนปญหางายทงสน ทงนกเพราะวาเราไดพบอลกอรทมทมประสทธภาพซงแกปญหาเหลานไดแลว แตเรายงไมสามารถดวนสรปไดวาสามปญหาสดทายในตารางท 13–1 นนเปนปญหายาก กเพราะวาอาจมอลกอรทมอนๆ ทมประสทธภาพซงแกปญหาเหลานไดทเรายงไมรจกกได ความจรงแลวในปจจบนกยงไมมใครหาอลกอรทมทมประสทธภาพซงแกสามปญหานได เรากยงไมสามารถพดไดเตมปากวาเปนปญหายาก ทงนกเพราะวายงไมมใครพสจนไดเลยวาไมมอลกอรทมทมประสทธภาพใดๆ แกปญหาเหลานได กลมปญหาประเภทนมมาก ซงจะวาไปแลวเปนกลมปญหาหลกทเราจะไดศกษากนในบทน
แลวมปญหาอะไรบางทรวายากแนๆ หลายคนคงนกถงปญหาทผลตคาตอบซงมขนาดมโหฬารเปนฟงกชนเลขชกาลง เชนปญหาการแจกแจงทกๆ เซตยอยซงตองแจงทงสน 2n แบบ หรอปญหาการหาวธการยายจานของหอคอยฮานอย ซงตองยายจาน 2n–1 ครง เปนตน กโดยอตโนมตตองเปนปญหายากตามนยาม เพราะเวลาทจะแสดงผลลพธใหครบถวนกเปนฟงกชนเลขชกาลงอยแลว แตวาปญหายากทเขาสนใจกนในวงการจะเปนปญหาทคาตอบไมไดมขนาดใหญแบบน แตมขนาดเปนแคฟงกชนพหนามของขนาดปญหา และตองใชเวลาเปนฟงกชนเลขชกาลงเพอคดหาคาตอบ (พดงายๆ กคอคดคาตอบนานๆ ไมใชแสดงคาตอบยาวๆ) ตวอยางเชนปญหาการหาวธเดนหมากในเกมหมากรกหรอหมากฮอสเพอใหชนะ เปนตน หรอทยากขนไปอกกคอปญหาประเภททพสจนไดเลยวาไมมอลกอรทมใดๆ หาคาตอบได (เรยกวาปญหา noncomputable) เชนขอปญหาทสบของฮลแบรต (Hilbert’s tenth problem) 2 ซงตองการหาคา
2 นกคณตศาสตรชาวเยอรมนชอดาฟด ฮลแบรต (David Hilbert) ไดตงคาถามนไวในป ค.ศ. 1900 และไดรบการพสจนวาเปนปญหาแบบคานวณไมไดในป 1971 โดย Mateyasevic
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 325
ตอบของสมการไดโอแฟนไทนใดๆ (diphantine equation) 3 ปญหาการหยด (halting problem) 4 ซงรบโปรแกรมคอมพวเตอร P และขอมลขาเขา I ของโปรแกรมน จากนนถามวาการทางานของ P เมอรบ I ไปประมวลผล ในทสดแลวจะหยดการทางานหรอไม เปนตน
ปญหาการตดสนใจเพอใหสามารถจดกลมปญหางายขน จะขอสนใจแตเฉพาะปญหาทใหคาตอบวา ใช/ไมใช ได/ไมได ม/ไมม จรง/เทจ นนคอมเพยงสองคาตอบ เราเรยกวาปญหาประเภทนวาปญหาการตดสนใจ (decision problem) จะขอเสรมดวยตวอยางดงตอไปน
ตวอยางท 13-1 Relatively Prime : กาหนดให a และ b เปนจานวนเตมบวก อยากทราบวา a และ b เฉพาะสมพทธกนหรอไม (นนคอตวหารรวมมากของ a และ b เทากบ 1 หรอไม)
ตวอยางท 13-2 Satisfiability (SAT) : กาหนดให f คอนพจนบลน (Boolean expression) ซงเขยนอยในรปแบบบรรทดฐานแบบเชอม (conjunctive normal form – CNF หรอบางทเรยกกนวาผลคณของผลบวก – product of sums) เชน )()()( 2132321 xxxxxxxf ������� อยากทราบวามวธกาหนดคาใหกบตวแปรบลนตางๆ ใน f ททาให f มคาเปนจรงไดหรอไม
สาหรบนพจนบลนในตวอยางนกเหนจะตอบวาได โดยกาหนดให x1 x2 และ x3 เปนจรงหมด
ตวอยางท 13-3 Hamiltonian Circuit (HAM) : กาหนดให G คอกราฟ อยากทราบวา G มวงจรแบบแฮมลตนหรอไม (นนคอมวงจรบน G ทผานทกๆ จดๆ ละหนงครงหรอไม)
3 ตวอยางเชนจงหาวามคาตอบจานวนเตมของตวแปร x , y และ z ในสมการ 42x2y + 34xz = 112 หรอไม ?4 นกคณตศาสตรชอ Alan Turing เปนผพสจนวา halting problem เปนปญหาแบบคานวณไมได ในปค.ศ.1937
326 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
รปท 13–2 แสดงกราฟสองกราฟ โดยทกราฟทางซายมวงจรแฮมลตน และกราฟทางขวาไมม (ขอใหนกเรยนลองพสจนกนเอาเอง)
1
25
4 3
10
1
13 4
7 8 9
5
2 3
611
รปท 13–2 ตวอยางกราฟทมวงจรแฮมลตน และไมมวงจรแฮมลตน
ตวอยางท 13-4 Vertex Cover (VC) : กาหนดให G = (V, E) คอกราฟ และ k คอเลขจานวนเตมบวก อยากทราบวาม vertex cover ของ G ซงมขนาดไมเกน k หรอไม (นยามให vertex คอเซต VC � V โดยทเสนเชอมทกๆ เสนใน E มจดปลายอยางนอยหนงจดทเปนสมาชกของ VC)
พจารณากราฟดานซายในรปท 13–2 กจะม vertex cover ขนาดไมเกน 3 แตจะไมม vertex cover ขนาดไมเกน 2 (นนคอไมม 2 จดใดในกราฟทตดกบทกๆ เสนเชอม)
ตวอยางท 13-5 Subset Sum (SS) : ปญหานกคอผลรวมของเซตยอย (sum of subset) ทไดเคยนาเสนอในบททแลวนนเอง แตคราวนขอคาตอบแบบมหรอไมมเทานน นนคอกาหนดให Sเปนเซตของตวเลขจานวนเตมบวก และ k คอจานวนเตมบวกอกหนงตว อยากทราบวามเซตยอย SS � S ซงมผลรวมของตวเลขใน SS เทากบ k หรอไม
ตวอยางท 13-6 Travelling Salesperson Problem (TSP) : กาหนดให G คอกราฟ อยากทราบวามวงจรในกราฟนซงผานทกๆ จดในกราฟจดละหนงครงโดยความยาวรวมของวงจรมคาไมเกน k หรอไม
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 327
การจดกลมปญหาทเราจะนาเสนอตอไปน เปนการจดกลมปญหาทเปนปญหาการตดสนใจทงสน ทเปนเชนนเพราะวาจะทาใหจดกลมงาย บรรยายลกษณะของปญหาในเชงภาษารปนย (formal language) ไดงาย อกทงนาไปสทฤษฎของเอนพบรบรณทเปนประเดนหลกของบทน
เนองจากเรามกพบปญหาการหาคาเหมาะทสด (optimization problem) ในทางปฏบต เรากสามารถแปลงปญหาเหลานใหอยในรปของปญหาการตดสนใจได โดยการระบขอบเขตของคาตอบ ในกรณของปญหาการคานอยทสด (minimization) เชนปญหาการหา vertex cover ขนาดเลกทสดนน แทนทจะถามวา vertex cover ขนาดเลกทสดคอเซตยอยใด กเปลยนเปนถามวาม vertex cover ขนาดไมเกน k หรอไม หรอปญหาการหาทางเดนสนทสดของพนกงานขาย กเปลยนมาถามวามทางเดนของพนกงานขายทมความยาวรวมไมเกน k หรอไม เปนตน สาหรบปญหาการคามากทสด (maximization) กเพยงแตเปลยนการระบขอบเขตบนมาเปนการระบขอบเขตลาง นนคอแทนทจะถามในลกษณะ “ไมเกน k” กมาถามในลกษณะ “ไมนอยกวา k”
กลมปญหา Pเราเรมใหนยามปญหากลมทประกอบดวยปญหางายกนกอน เรยกชอกลมนวา P
P คอกลมของปญหาการตดสนใจทสามารถหาคาตอบไดดวยอลกอรทมเชงกาหนดในเวลาแบบพหนาม (deterministic polynomial–time algorithm)
ตว P กมาจาก p ของคาวา polynomial นนเอง ตวอยางกลมปญหา P มมากมาย ขอแสดงเปนตวอยางสกจานวนหนงดงน
� กราฟ G ม spanning tree ซงมผลรวมของนาหนกเสนเชอมไมเกน k หรอไม
� กราฟ G ซงเสนเชอมตางๆ มความยาวเปนบวก จะมทางเดนจากจด s ไป t ซงมความยาวไมเกน k หรอไม
� จานวนเตมบวก a และ b เฉพาะสมพทธกนหรอไม
328 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
� มวธกาหนดคาใหตวแปรบลนตางๆในนพจนบลน f ใหไดคาเปนจรงหรอไม ถา f เปนนพจนบลนในรปแบบบรรทดฐานแบบเลอก (disjuntive normal form – DNF หรอทเรยกกนวา sum of products)
� มวธใหสจดในกราฟ G ดวยสสองสหรอไม (โดยทไมมจดปลายสองจดของเสนเชอมใดในกราฟมสเดยวกน)
กลมปญหา NPมปญหาการตดสนใจอยมากมายทไมสามารถจดใหอยในกลม P ได ทงนกเพราะไมสามารถหาอลกอรทมเชงกาหนดทใหคาตอบไดในเวลาแบบพหนาม และปญหาเหลานกยงพสจนไมไดอกเชนกนวา ดวยเวลาแบบพหนามนนไมเพยงพอทจะหาคาตอบของปญหาเหลานได ในหวขอนเราจะนาเสนอกลมปญหาหนงทมชอเรยกวากลม NP (โดยท P � NP) ปญหาการตดสนใจใดๆ ทถกจดอยใน NP ไดกเมอเปนปญหาทสามารถทวนสอบความถกตองของคาตอบไดในเวลาแบบพหนาม
การทวนสอบคณลกษณะสาคญของปญหาในกลม NP คอความสามารถในการทวนสอบไดในเวลาแบบพหนาม (polynomially verifiable) กาหนดให Q เปนปญหาการตดสนใจปญหาหนง สมมตวา AQ
เปนกลองดาวเศษทอางวาใหคาตอบของปญหา Q ไดถกตองเสมอ โดย AQ นจะไมใหคาตอบวา“ใช” หรอ “ไมใช” (ตามลกษณะของคาตอบของปญหาการตดสนใจ) แตจะใหหลกฐานยนยนสาหรบกรณทตอบวา “ใช” ตวอยางเชนถาเปนปญหา SAT (ตวอยางท 13-2) หลกฐานยนยนกเปนคาของตวแปรบลนตางๆ ทอางวาจะทาใหนพจนบลนนนมคาเปนจรง หรอถาเปนปญหา TSP (ตวอยางท 13-6) หลกฐานยนยนกเปนวงจรทผานทกๆ จดๆ ละครงในกราฟซงอางวามความยาวของเสนเชอมรวมแลวไมเกน k เปนตน เนองจาก Ax เปนกลองดา เราไมรเนอใน เรากควรทวนสอบหลกฐานยนยนท Ax ใหมาวาจะเปนกรณของคาตอบ “ใช” หรอไม ตวอยางเชนสาหรบปญหา SAT กเพยงนาคาของตวแปรบลนตางๆ จากหลกฐานท Ax ใหมาแทนในนพจนบลนของตวอยางปญหา จากนนหาคาของนพจนบลนนนวาเปน “จรง” หรอไม ซงใชเวลาในการ
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 329
ทวนสอบแปรตามจานวนตวแปรและขนาดของนพจน สาหรบปญหา TSP กเพยงนาความยาวของเสนเชอมตางๆ ในวงจรทไดรบจากหลกฐานมารวมกนแลวดวามคาไมเกน k หรอไม ซงใชเวลาในการทวนสอบแปรตามจานวนเสนเชอมของวงจร เปนตน ถายอนกลบไปดปญหาการตดสนใจตางๆ ทไดนาเสนอมาในตวอยางท 13-1 ถงตวอยางท 13-6 ลวนแลวแตสามารถทวนสอบไดในเวลาแบบพหนามทงสน การทวนสอบไดอยางมประสทธภาพนเองเปนทมาของกลมปญหา NP
NP คอกลมของปญหาการตดสนใจทสามารถทวนสอบไดในเวลาแบบพหนาม
ความแตกตางของ P และ NP จงอยทวาปญหาใน P นนเราตองแกไดรวดเรวในขณะทปญหาใน NP นนตองทวนสอบไดรวดเรว จงเหนไดชดวา P กตองจดอยใน NP ดวยนนคอ P � NP ทงนเพราะวาเราสามารถนาอลกอรทมทมประสทธภาพในการหาคาตอบของปญหา มาเปนตวทวนสอบทไดรบซงกยอมกระทาไดในเวลาแบบพหนามเชนกน
อลกอรทมเชงไมกาหนดเราอาจมองความแตกตางของ P และ NP ตามประเภทของอลกอรทมทใชในการหาคาตอบ นนคอปญหาใน P นนแกไดเรวดวยอลกอรทมเชงกาหนด ในขณะทปญหาใน NP นนกสามารถแกไดเรวเชนกนแตตองอาศยอลกอรทมเชงไมกาหนด จงเปนทมาของนยามในอกแบบคอ
NP คอกลมของปญหาการตดสนใจทสามารถหาคาตอบไดดวยอลกอรทมเชงไมกาหนดในเวลาแบบพหนาม (non–deterministic polynomial–time algorithm)
(ซงเปนทมาของคาวา NP) คาถามทตามมากคอ อลกอรทมเชงไมกาหนดเปนอยางไร ? กอนอนตองขอเนนวาอลกอรทมเชงไมกาหนดทจะนาเสนอตอไปนนนเปนสงทเขยนได แตเขยนขนแลวกไมมเครองคอมพวเตอรใดในโลกทางานใหได เราอาศยรปแบบนามธรรมของอลกอรทมประเภทนเพอจดประสงคในการจดกลมปญหา สงทแปลกประหลาดเกยวกบอลกอรทมเชงไมกาหนดคอฟงกชนมหศจรรยทเรยกวา nd_choice (nd ยอมาจาก non–deterministic) ซงใชเวลาการทางานเปน O(1) ลองมาดตวอยางรหสเทยมตอไปน
330 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
01: nd_search( A[1..n], x )02: {03: i = nd_choice( 1, n )04: if( A[i] == x ) return YES05: else return NO06: }
nd_search ทาหนาทตรวจสอบวามขอมล x อยในแถวลาดบ A หรอไม สงททากคอเรยกใชฟงกชน nd_choice เพอเลอกมาหนงตาแหนงในแถวลาดบ (เปนจานวนเตมตงแต 1 ถง n) ในบรรทดท 3 จากนนนาตาแหนงทเลอกมานทวนสอบวามคาเทากบ x ทตองการหาหรอไม ถาเทากนกคน YES ถาไมเทากคน NO ซงระบผลของการทวนสอบ
เราสามารถตความการทางานของอลกอรทมเชงไมกาหนด nd_search ไดสองลกษณะคอ
� เรามฟงกชนมหศจรรย nd_choice ซงมความสามารถทจะคนหลกฐานทยนยนไดวามคาตอบ "ใช" ของตวอยางปญหาทไดรบเสมอ เมอมคาตอบ "ใช" จรงๆ ตรงนเปรยบnd_choice เสมอนกลองดาวเศษทไดเกรนไวในหวขอทแลว ดงนนเราจงตองมการทวนสอบหลกฐานทไดรบจาก nd_choice เพอยนยนวาเปนคาตอบ "ใช" หรอไม (ทงนเพราะวาถากรณทตวอยางปญหาทไดรบนนไมมหลกฐานยนยนกรณ "ใช" กยอมคนหลกฐานทผดกลบมา)
� หรอเราจะมองวาเมอใดทมการเรยก nd_choice หนงครงจะเกดการสรางสวนประมวลผลขนมาเปนจานวนเทากบจานวนกรณผลลพธทเปนไปไดของ nd_choice ซงตางกทาคาสงถดไปตอในฟงกชน nd_search โดยจะตางกตรงทผลลพธทคนจาก nd_choiceนนตางกนหมด อลกอรทมเชงไมกาหนดจะคนคา "ใช" กตอเมอมอยางนอยหนงสวนประมวลผลทคนคา "ใช"
ถาเราตความแบบแรก กดจะมหศจรรยเกนไปทจะมฟงกชนทคนหลกฐาน "ใช" ไดเสมอในเวลาคงตว หรอถาตความแบบทสองกคงจะลาบากเชนเดยวกนทการสรางสวนประมวลผลเพอทางานในทกๆ กรณทเปนไปไดพรอมๆ กน (ถงแมจะใชระบบคอมพวเตอรทมหลายหนวยประมวลผลกทาไมไดอยด เพราะหนวยประมวลผลในระบบมจานวนจากด แตสวนประมวลผลทถกสรางขนในลกษณะทสองนนมจานวนเทาใดกไดตามจานวนกรณทเปนไปได) จงขอเนนยาตรงนอกครงหนงวา เราคงไมสามารถใชงานอลกอรทมเชงไมกาหนดทเขยนมาไดจรง แตการจดกลม NP ใหประกอบดวยปญหาการตดสนใจทเราหาคาตอบไดดวยอลกอรทมเชงไม
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 331
กาหนดในเวลาแบบพหนามนน จะนาไปสการจดหมวดหมปญหา NP บรบรณทจะศกษากนตอไป
การลดรปปญหากอนทจะเขาสเนอหาของ NP บรบรณนน จะตองทาความเขาใจกบแนวคดในการลดรปปญหา (reduction) กนกอน กาหนดให Q1 และ Q2 เปนปญหาการตดสนใจสองปญหา ถาเราสามารถลดรปปญหา Q1 ไปเปนปญหา Q2 กแสดงวาเราสามารถเปลยนตวอยางปญหาใดๆ ของ Q1 ไปเปนตวอยางปญหาของ Q2 ได จากนนใชอลกอรทมทแกปญหา Q2 หาคาตอบ กจะเปนคาตอบของตวอยางปญหาของ Q1 นน (ดรปท 13–3)
วธแปลง instance ของ Q1 ไปเปน instance ของ Q2
อลกอรทมซงแกปญหา Q2
instance ของ Q1
instance ของ Q2
คาตอบของ instance ของ Q2
คาตอบของ instance ของ Q1รปท 13–3 การลดรปปญหาการตดสนใจจาก Q1 ไปเปน Q2
การลดรปปญหานนจะวาไปแลวเปนกลวธหนงในการแกไขปญหาแบบหนง สมมตวาเราตองการแกปญหา Q1 สงหนงทนกออกแบบอลกอรทมตองคดถงกคอ Q1 เปนปญหาทเรารสกวาคลายๆ กบปญหา Q2 อนทเราเคยรจกวธแกไขหรอไม ถารสกวาคลาย เราจะมวธตความปญหา Q1 ใหไปอยในรปแบบของปญหา Q2 ทเรารวธแกไขนนไดอยางไร
332 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
แตในทนเราจะอาศยการลดรปปญหา เปนเครองมอในการเปรยบเทยบความยากงายของปญหาการตดสนใจ กาหนดใหเราสามารถลดรปปญหา Q1 ไปเปน Q2 ไดโดยใชเวลา t(n) ในการแปลงตวอยางปญหา และอลกอรทมในการแกปญหา Q2 ใชเวลาเปน f(n) ยอมแสดงใหเหนวาอลกอรทมในการแกปญหา Q1 ทไดจากการลดรปปญหานกยอมใชเวลาเปน t(n) + f(n) เนองจากเรากาลงสนใจจาแนกปญหาวาเปนแบบงายหรอแบบยาก ดงนนจงสนใจเฉพาะการลดรปทใชเวลาแบบพหนามเทานนในการแปลงตวอยางปญหา นนคอ t(n) = O(nk) ทงนกเพราะวาผลของ t(n)+f(n) จะเปนฟงกชนแบบพหนามหรอไม จะไดขนกบ f(n) เพยงอยางเดยว เราเรยกการลดรปทมคณสมบตนวาการลดรปแบบพหนาม (polynomial reduction) และเขยน “Q1 �P Q2” เมอปญหา Q1 ลดรปแบบพหนามไปเปนปญหา Q2 ได
ขอสรปอกครงวาเราไดอลกอรทมในการแกปญหา Q1 ทไดจากการลดรปปญหาไปเปน Q2 ซงใชเวลาเปน t(n) + f(n) เนองจากอาจมอลกอรทมอนทแกปญหา Q1 ในเวลาทนอยกวากเปนไปได ดงนนเราสรปไดวา “Q1 ไมยากกวา Q2” หรอพดในอกมมหนงคอ “Q2 ไมงายกวา Q1” ดงนนจงมกใชสญลกษณ � ระบความสามารถในการลดรปปญหา การลดรปปญหาจงนาไปสการกาหนดความยากงายเชงสมพทธของปญหา ลองมาดตวอยางตอไปน
ตวอยางท 13-7 Cyclic String Matching (CSM) : กาหนดให A = a1a2...an และ B = b1b2...bn เปนสตรงความยาว n ปญหาทเราสนใจในทนคออยากทราบวาเราสามารถหมน A เพอใหได B หรอไม เชน “MCHAISO” ไดมาจากการหมน “SOMCHAI” ไปทางขวา 4 ครง
แทนทเราจะออกแบบอลกอรทมเพอแกปญหา CSM เราอาจหาวธเปลยนปญหานไปเปนปญหาทเรารจก จากการสงเกตวาถาเราหมน A แลวได B แสดงวา B ตองเปนสตรงยอยของสตรงทสรางมาจากการนา A ตอกบ A เชน “MCHAISO” เปนสตรงยอยของ “SOMCHAISOMCHAI” ดงนนเราจะลดรปปญหา CSM ไปเปนปญหา SM โดยปญหา SM กคอปญหาการจบคสตรง ซงหาวาสตรง Y ปรากฎเปนสตรงยอยใดใน X สมมตวา stringMatch(X,Y) คออลกอรทมหนงทเรารจกมากอนสาหรบปญหา SM เราสามารถสรางอลกอรทมเพอแกปญหา CSM ไดดงน
01: CyclicStringMatch( A, B )02: {03: X = concat(A,A)04: if ( stringMatch(X,B) == NOTFOUND ) return FALSE05: return TRUE;06: }
สรปไดวา CSM �P SM นนคอ SM ไมงายกวา CSM
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 333
ตวอยางท 13-8 การลดรปปญหาการยกกาลงสองไปเปนปญหาการคณ : กาหนดใหเรารวธการคณจานวนสองจานวน multiply(x,y) อยากทราบวธการยกกาลงสอง a2
เราสามารถหาวธการยกกาลงสองไดโดยอาศยวธการคณจากสตร a2 = a�a ดงนนกสามารถใช multiply(x,y) เพอยกกาลงสองไดโดยตงคาของทง x และ y ใหเทากบ a กเปนอนเสรจสน เขยนเปนรหสเทยมไดดงน
01: NewSquare( a )02: {03: return multiply( a, a )04: }
สรปไดวาการคณไมงายกวาการยกกาลงสอง
ตวอยางท 13-9 การลดรปปญหาการคณไปเปนปญหาการยกกาลงสอง : กาหนดใหเรารวธการยกกาลงสอง x2
square(x) แตไมรวธการคณ อยากทราบวธการคณจานวนสองจานวน a�b โดยอาศยวธการยกกาลงสอง
โดยการใชสตร a�b = (a + b)2 – (a – b)2
4 กสามารถใช square(x) เพอการคณดงน01: NewMultiply( a, b )02: {03: return (square(a+b)–square(a–b)) / 404: }
สรปไดวาการยกกาลงสองไมงายกวาการคณ และเนองจากการคณกไมงายกวาการยกกาลงสอง (จากผลของตวอยางทแลว) จงสรปวาสองปญหานมความยากงายเทากน (คาวา “ยากงายเทากน” ในทนหมายความวา ถาปญหาหนงยากอกปญหากยาก ถาปญหาหนงงายอกปญหากงายเหมอนกน)
ตวอยางท 13-10 การลดรปปญหา vertex cover (VC) ไปเปนปญหาเซตอสระ (IS – independent set) : กาหนดให G = (V,E) เปนกราฟๆ หนง vertex cover ของ G คอเซตยอย VC � V ทเสนเชอมทกเสนใน Eมจดปลายอยางนอยหนงจดอยใน VC สวนเซตอสระของ G คอเซตยอย VI � V ทไมมเสนเชอมใดใน E ซงตอระหวางจดใดๆ ใน VI พจารณากราฟตวอยางในรปท 13–4 จะไดวา {1,4}
334 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
{2,3,5} {1,2} เปนตวอยางของ vertex cover ในขณะท {1,3} ไมใชจดปก และ {2, 5} {2,3,5} {1,4} เปนตวอยางของเซตอสระ แต {2,3,4} ไมใชเซตอสระ เปนตน
1
25
4 3
รปท 13–4 กราฟตวอยาง
จากนยามขางตน จะไดวา VC = V – VI เพราะวาไมมเสนเชอมใดๆ ในกราฟตอกบจดตางๆใน VI
เสนเชอมทกๆ เสนของกราฟกยอมตองตอกบ V – VI จากคณสมบตขอนชใหเหนวาเราสามารถหา vertex ไดจากเซตอสระ
กาหนดให VC คอปญหาตดสนใจทหาวาม vertex cover ของกราฟทมขนาดไมเกน k หรอไม ในขณะท IS คอปญหาการตดสนใจทหาวามเซตอสระของกราฟทมขนาดไมนอยกวา k หรอไม ดงนนถากราฟ G = (V, E) มเซตอสระขนาด k กราฟนยอมม vertex cover ขนาด |V| – k จงนาไปสอลกอรทมของปญหา VC ซงหาไดจากอลกอรทมของปญหา IS ดงแสดงดวยรหสเทยมขางลางน
01: VertexCover( G=(V,E), k )02: {03: return IndependentSet( G, |V|–k )04: }
สรปไดวา VC �P IS นนคอ IS ไมงายกวา VC
กลมปญหา NP บรบรณจากทไดจดกลมปญหาการตดสนใจเปนกลม P และ NP โดยทรวา P � NP ปญหาตางๆ ใน P นนเปนปญหางายทงสน เพราะมอลกอรทมทหาคาตอบไดอยางมประสทธภาพ ในขณะทความยากงายของปญหาในกลม NP นนยงไมคอยเดนชดนก คอเปนปญหาทเพยงแตทวนสอบหลกฐานไดอยางมประสทธภาพ มปญหาตางๆ มากมายใน NP ซงยงไมมใครหาอลกอรทมทมประ
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 335
สทธภาพไดอาทเชน TSP, VC, IS, SAT เปนตน ในป ค.ศ. 1971 คก (Cook) 5 6 ไดแสดงใหเหนวา ปญหา SAT เปนปญหาทยากทสดใน NP โดยการพสจนวาทกๆ ปญหาใน NP นนสามารถลดรปแบบพหนามไปเปน SAT ไดหมด (จะขอไมแสดงวธพสจน เนองจากยดยาวเกนไป) และในปค.ศ. 1972 คารป (Karp) 7 ไดอาศยกลวธการลดรปเพอแสดงใหเหนวามปญหาอนๆ อกมากมายในหลากหลายรปแบบทมความยากงายเทยบเทา SAT และนเองคอกลมปญหาทมชอเรยกวา NP บรบรณ (NP–complete เขยนยอวา NPC) ซงกคอกลมของปญหาทยากทสดใน NP และหมายความดวยวาเปนกลมของปญหาทมความยากงายทดเทยมกนหมด (อนเปนทมาของคาวา “บรบรณ” ดงนนหากใครพบอลกอรทมทมประสทธภาพทแกเพยงหนงปญหาใน NP บรบรณ กยอมหมายความวาทกๆ ปญหาใน NPC เปนปญหางายทงสน (นนคอพสจนไดวา P=NP) หรอในทางกลบกน ถามใครสามารถพสจนเพยงหนงปญหาใดใน NP บรบรณวาเปนปญหายาก กสรปไดวาทกๆ ปญหาในกลมนเปนปญหายากทงสน (นนคอพสจนไดวา P � NP หรออกนยหนง P � NP) 8 ปญหาทจดอยในกลม NPC มมากมายเปนพนปญหา และเปนปญหาทพบในทางปฏบตทงสน 9 จงเปนกลมปญหาทไดรบความสนใจเปนอยางยง ตองขอเนนวาในปจจบนนกวจยในวงการตาง "รสก" วา NPC เปนปญหายาก เพราะหาอลกอรทมทมประสทธภาพไมไดกนเลย แตกยงพสจนไมไดวาเปนปญหายากจรง จงคาดเดากนวาแผนผงการจาแนกปญหาในกลม NP นาจะเปนดงรปท 13–5
5 S.A. Cook, “The complexity of theorem–proving procedure”, Proceedings of the 3rd Annual ACM Symo.
on Theory of Computing, pp. 151–158, 1971.6 ในปเดยวกนนกวจยชาวรสเซยชอ Levin กไดนาเสนอปญหาทยากทสดใน NP เชนกน แตเปนปญหาทเกยวกบการปแผน domino ใหตอกนบนระนาบ
7 R. Karp, “Reducibility among combinatorial problems”, Complexity of Computer Computations, pp. 85–104, 1972
8 Clay Mathmatics Institute ไดเสนอเงนรางวลหนงลานเหรยญดอลลารสหรฐ สาหรบบคคลแรกทพสจนไดวา P = NP หรอวา P � NP (ดรายละเอยดไดท http://www.claymath.org)
9 ผทสนใจศกษาตวอยางปญหา NPC สามารถหาอานไดจากหนงสอ "Computers and Intractability" โดยM.R. Garey และ D. S. Johnson ซงถอกนวาเปน "ตานาน” ทางดาน NPC
336 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
NPC
P
NP
รปท 13–5 การจาแนกปญหาในกลม NP (สมมตวา P � NP)
จากแนวคดของการลดรปและการจดกลมขางตน จงเปนทมาของกลมปญหา NP–hard และ NPC ซงนยามไดดงน
Q เปนปญหา NP–hard ถาทกๆ ปญหาใน NP สามารถลดรปแบบพหนามไปเปน Q ได
NPC คอกลมของปญหาการตดสนใจทเปน NP–hard และอยในกลม NP
ขอเนนตรงนวาปญหา NP–hard ไมจาเปนตองเปนปญหาการตดสนใจ และกไมจาเปนตองอยใน NP จากนยามบอกวาปญหา NP–hard ไมงายกวาทกๆ ปญหาใน NP
การพสจนวาปญหา Q อยใน NPC หรอไมนน กตองพสจนวา Q � NP และ Q เปน NP–hard การพสจนประเดนแรกนนไมคอยยาก เพยงแสดงใหเหนวาเราสามารถทวนสอบหลกฐานเพอยนยนคาตอบใชของ Q ไดในเวลาแบบพหนาม กเปนอนเสรจ แตการพสจนในประเดนหลงนน กคงจะยงยากมากทจะมาแสดงใหเหนจรงวาทกๆ ปญหาใน NP ลดรปแบบพหนามไปเปน Q ได แตโชคดทวาเรามปญหาอนๆ ทเรารวาอยใน NPC แลว (อยางนอยกปญหา SAT ทคณคกไดพสจนไว ซงถอไดวาเปนปญหาแรกทพบในกลม NPC) กเลอกมาสกหนงปญหาแลวพยายามแสดงวาสามารถลดรปแบบพหนามไปเปน Q ได กเปนอนเสรจสน เพราะนนเปนการแสดงวา Q นนไมงายกวาปญหาหนงใน NPC กยอมแสดงวา Q ไมงายกวาทกๆ ปญหาใน NP แตเนองจาก Q อยใน NP กแสดงวา Q มความยากงายทดเทยมกบปญหาอนใน NPC จงเปนสมาชกของ NPC ดวย
แตกมอยหลายปญหาซงพสจนไดวาอยใน NP แตพสจนไมไดวาเปน P หรอ NPC กนแน ตวอยางของปญหาประเภทนไดแกปญหาการทดสอบวากราฟสองกราฟสมสณฐานกนหรอไม (graph isomorphism) และปญหาการทดสอบวาจานวนเตมทกาหนดใหเปนจานวนประกอบหรอไม จะเหนไดวาเราสามารถหาวธทวนสอบสองปญหานไดไมยาก แตยงไมมใครแสดงได
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 337
วาเปน NPC ปญหากาหนดการเชงเสน (linear programming) กเคยมลกษณะเชนน จนกระทงในป ค.ศ. 1979 จงมผคนพบอลกอรทมทใชเวลาแบบพหนามสาหรบปญหานได (แสดงวามนเปนปญหาใน P )
จะขอแสดงใหเหนการพสจนความเปน NP บรบรณของปญหาจานวนหนงดวยตวอยางตอไปน ลาดบการลดรปปญหาแสดงไดดงรปท 13–6 ลกศรแสดงทศทางการลดรปนนคอจะแสดงใหเหนวา SAT �P CLIQUE �P VC �P SS และ SAT �P 3SAT โดยใชปญหา SAT เปนจดเรมตนในการพสจนปญหาอนๆ วาเปน NPC เมอเรารแลววาปญหาใดเปน NPC กสามารถนาปญหานนไปลดรปสปญหาอน เพอแสดงใหเหนวาปญหาอนนนเปน NPC ไดดวย 10
SAT
CLIQUE
VERTEX-COVER
SUBSET-SUM
3SAT
รปท 13–6 ตวอยางลาดบการลดรปปญหา
ตวอยางท 13-11 CLIQUE เปนปญหา NPC : กาหนดให G = (V, E) คอกราฟไมระบทศทาง และ k คอจานวนเตม ปญหา CLIQUE ถามวา G มคลก (clique) ขนาดอยางนอย k หรอไม (คลกคอกราฟยอยทเปนกราฟบรบรณ (complete graph) ขนาดของคลกคอจานวนจดของคลก) เชนกราฟในรปท 13–7 มคลกขนาด 5 คอกราฟยอยทประกอบดวยจด 1 2 3 4 และ 5
10 แมกระทงปญหา Minesweeper Consistency ซงเปนปญหาการตดสนใจของเกม Minesweeper ทมใหเลนกนในเครองคอมพวเตอรทวไป กเปน NPC เชนกนโดยการแสดงใหเหนจรงวา SAT สามารถลดรปไปเปนปญหานได (“Minesweeper is NP–complete”, Mathematical Intelligencer, vol.22 no. 4, 2000, pp 9–15.)
338 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
2 4
613 5
รปท 13–7 กราฟตวอยางมคลกขนาด 5
เราจะพสจนวา CLIQUE เปนปญหา NPC โดยพสจนวา CLIQUE � NP และ SAT �P CLIQUE
CLIQUE � NP : เราสามารถทวนสอบหลกฐานไดไมยาก โดยเพยงแตตรวจสอบวาเซตยอยของจดในกราฟ (ซงเปนหลกฐานในการทวนสอบ) นนมจานวนจดไมนอยกวา k จด และมเสนเชอมตอกนระหวางทกๆ คจดในเซตยอยน ซงภาระตรงนใชเวลา O( |V|2 ) เปนเวลาแบบพหนาม แสดงวา CLIQUE อยใน NP
SAT �P CLIQUE : ประเดนนยงเลกนอย คอเราตองแสดงใหเหนจรงวาสามารถเปลยนนพจนบลนในรปแบบ CNF ใดๆ ไปเปนกราฟและจานวน k (ซงเปนขอกาหนดของ CLIQUE) ใหได โดยคาตอบของตวอยางปญหาทแปลงแลว จะตองเปนคาตอบเดยวกบความเปนไปไดในการทาใหนพจนบลนทไดรบมคาเปนจรง
กาหนดให E = E1� E2 ����� Em เปนนพจนบลนใด ทม Ei เปนนพจนยอยในรปแบบการ or ตวแปรบลนตางๆ เราจะสรางกราฟทมจดตางๆ วางเรยงเปนแถวๆ แนวตงเปนจานวน m แถว นนคอหนงแถวสาหรบแตละ Ei โดยแถวแนวตงท i จะมจดเทากบจานวนตวแปรทปรากฎใน Ei จากนนกาหนดการใหมเสนเชอมระหวางจดในกราฟดงนคอ
� ไมมเสนเชอมตอระหวางจดตางๆในแถวแนวตงเดยวกน
� มเสนเชอมตอระหวางทกๆ คจดทอยคนละแนวแถวตง ยกเวนเสยแตกรณของคจดซงมาจากตวแปรบลนในรปแบบทเปนสวนเตมเตมกนและกน
จะไดวากราฟทสรางไดมคลกขนาด m กตอเมอเรามวธกาหนดตวแปรในนพจนใหมคาเปนจรงได มาดกนสกหนงตวอยางกอนจะแสดงใหเหนวาขอความขางตนเปนจรง รปท 13–8 แสดงกราฟทสรางไดจากนพจน f = ( x � y � z– ) � (y– � z ) � (x– � y )
จะเหนวากราฟนมคลกขนาด 3 อยหลายชด เชน x (แถวซาย) z (แถวกลาง) และ y (แถวขวา) สงผลใหทราบวาถาให x ในวงเลบแรก z ในวงเลบกลาง และ y ในวงเลบทายของนพจนเปนจรง กจะทาใหนพจนนเปนจรง
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 339
y– x–
z–
x
y
z y
รปท 13–8 กราฟซงไดจากการแปลงนพจน ( x � y � z– ) � (y– � z ) � (x– � y )
จากตวอยางขางตนสรปไดวา ถากราฟนมคลกขนาด m คลกนตองประกอบดวยจดตางๆ จากแถวแนวตงทกๆ แถวๆ ละจด เพราะวาไมมเสนเชอมตอระหวางจดในแถวแนวตวเดยวกน ดงนนถากาหนดคาจรงใหกบตวแปรในนพจนทคล องลองกบจดของคลก จะไดวาแตละวงเลบของนพจนมอยางนอยหนงตวแปรทมคาเปนจรง และเนองจากไมมตวแปรใดทไดคาจรงทงในรปแบบปกตและรปแบบเตมเตม (เพราะไมมเสนเชอมตอระหวางจดทแทนรปแบบทงสองตามขอกาหนดของการแปลง) ดงนนทกๆ วงเลบของนพจนมคาเปนจรงหมด ทาใหคาของนพจนเปนจรงดวย
และในทางกลบกนถาเรามวธกาหนดคาตวแปรในพนพจนบลนเปนจรงได กยอมแสดงวาแตละวงเลบในนพจนยอมตองมตวแปรทถกกาหนดคาจรงไดโดยไมขดกน (หมายความวาตองไมมตวแปรใดทไดคาจรงทงในรปแบบปกตและรปแบบเตมเตม) จะไดวาจดตางๆ ทแทนตวแปรทมคาจรงเหลานจานวน m จดในกราฟยอมประกอบกนเปนคลกขนาด m ทงนเพราะวามจดตางๆ เหลานตองมเสนเชอมตอระหวางกนและกนแนๆ (เพราะไมมคจดใดทแทนตวแปรทเปนสวนเตมเตมของกนและกน) สรปไดวา SAT �P CLIQUE
เมอแสดงใหเหนวา CLIQUE � NP และ SAT �P CLIQUE โดยททราบแลววา SAT เปน NPC ดงนนสรปไดวา CLIQUE เปนปญหา NPC ดวย �
ตวอยางท 13-12 VC เปนปญหา NPC : VC (ตามทไดนยามไวในตวอยางท 13-10) ถามวาม vertex cover ของกราฟ G=(V, E) ขนาดไมเกน k หรอไม
เราจะพสจนวา VC เปนปญหา NPC โดยพสจนวา VC � NP และ CLIQUE �P VC (เนองจากเราทราบแลววา CLIQUE เปน NPC ในตวอยางท 13-11)
340 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
VC � NP : เราสามารถทวนสอบหลกฐานไดไมยาก เพยงแตตรวจสอบหลกฐานซงเปนเซตยอยของจด (VC � V)ใน G วาเสนเชอมทกๆ เสนของกราฟตอกบจดๆ หนงใน VC และ |VC| � k ขนตอนการทวนสอบนใชเวลา O( |E| )
CLIQUE �P VC : ขนตอนนจะแสดงใหเหนวา CLIQUE (ซงรแลววาเปน NPC) สามารถลดรปแบบพหนามไปเปน VC ได สาหรบ CLIQUE นนเราตองการทราบวามคลกขนาดไมนอยกวา kในกราฟ G=(V, E) หรอไม เราสามารถสรางกราฟใหม G � ซงเปนสวนเตมเตมของ G นนคอ G �
= (V, E � ) โดยท E � = { (i, j) | (i, j) E } จากนนถามวาม vertex cover ขนาดไมเกน |V|–k หรอไม (ดตวอยางในรปท 13–9) ทเปนเชนนกเพราะวา ถา C = (U, EU) คอคลกหนงใน G เซตของจด V–U ยอมตดกบเสนเชอมทกเสนของ G
� เพราะวาไมมเสนเชอมตอระหวางจดใดๆ ใน U
ของ G � ดงนน V–U จงเปน vertex cover ของ G �
และในทางกลบกน ถา VC คอ vertex cover ของ G �
เสนเชอมทกเสนของ G �
ยอมตดกบจดตางๆใน VC แสดงวาตองไมมเสนเชอมระหวางจดในเซต V – VC ของ G
� กหมายความวา
สาหรบ G แลว V – VC ตองประกอบกนเปนคลกแนนอน สรปไดวา CLIQUE �P VC2 4
613 5
มคลกขนาดไมนอยกวา 4 หรอไม ?
2 4
613 5
ม vertex cover ขนาดไมเกน 2 หรอไม ?รปท 13–9 ตวอยางการลดรปปญหา CLIQUE ไปเปน VC
เมอแสดงใหเหนวา VC � NP และ CLIQUE �P VC โดยททราบแลววา CLIQUE เปน NPC ดงนนสรปไดวา VC เปนปญหา NPC ดวย �
ตวอยางท 13-13 SS เปนปญหา NPC : SS (ตามทไดนยามไวในตวอยางท 13-5) ถามวามเซตยอย SS � S ซงมผลรวมของตวเลขใน SS เทากบ t หรอไม โดยท S คอเซตของจานวนเตม และ t คอจานวนเตม
เราจะพสจนวา SS เปนปญหา NPC โดยพสจนวา SS � NP และ VC �P SS (เนองจากเราทราบแลววา VC เปน NPC ในตวอยางท 13-12)
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 341
SS � NP : เราสามารถทวนสอบหลกฐานซงเปนเซตยอย SS � S ไดไมยาก เพยงแตตรวจสอบวา �
� SSxx มคาเทากบ t หรอไม ขนตอนการทวนสอบนใชเวลา O( |S| )
VC �P SS : ขนตอนนจะยงยากเลกนอย โดยมจดประสงคเพอแสดงใหเหนวา VC (ซงรแลววาเปน NPC) สามารถลดรปแบบพหนามไปเปน SS ได จะขอแทนกราฟ G=(V, E) ดวยเมทรกซอบตการณ (incidence matrix) B ซงมขนาด |V| |E| โดยท bij มคาเปน 1 ถามจด vi ตอกบเสนเชอม ej มฉะนนกมคาเปน 0 รปท 13–10 แสดงตวอยางกราฟและเมทรกซอบตการณ
e1 e2 e3 e4v1 0 1 1 1v2 1 0 1 0v3 0 1 0 0v4 1 0 0 0
v1
v2v5
v4 v3
e4 e3
e2
e1
v5 0 0 0 1
รปท 13–10 กราฟและเมทรกซอบตการณ
เราจะลดรปปญหา VC ซงรบกราฟ G=(V, E) และจานวนเตม k ไปเปนปญหา SS ซงรบเซต Sของจานวนเตม และจานวนเตม t จะขออธบายกระบวนการลดรปนดวยตวอยางดงน (ดรปท 13–11 ประกอบดวย) กาหนดให VC รบกราฟในรปท 13–10 และ k = 31. เขยนตารางใหมขนมาหนงตาราง โดยใชเมทรกซอบตการณของ G เปนจดเรมตน
(แสดงดวยกรอบสเหลยมในรปท 13–11)2. เพมสดมภทางซายทมคา 1 เปนจานวนเทากบจานวนจดในกราฟ3. เพมแถวอกเปนจานวนเทากบจานวนเสนเชอม โดยมคา 1 เฉพาะชองตามแนวทแยงมมจากขวาลงมาซาย
4. มองเลขทปรากฎในแตละแถวใหเปนเลขฐานสบ (ไดเปนจานวนในสดมภขวาสด) จะไดเปนเซต S = {s1, s2, ..., sn} โดยท n = |S| = |V| + |E|
5. ให t ของปญหา SS มคาเทากบ (k22...2)10 โดยเลข 2 มเปนจานวนเทากบจานวนเสนเชอม
342 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
e1 e2 e3 e4s1 = 1 1 1 1 0 11110s2 = 1 0 1 0 1 10101s3 = 1 0 0 1 0 10010s4 = 1 0 0 0 1 10001s5 = 1 1 0 0 0 11000s6 = 0 0 0 0 1 1s7 = 0 0 0 1 0 10s8 = 0 0 1 0 0 100s9 = 0 1 0 0 0 1000t = 3 2 2 2 2 32222
รปท 13–11 “มเซตยอยของ S = {s1, s2, ...,s8} ทมผลรวมเทากบ t หรอไม ?”
จากผลทไดในรปท 13–11 จะไดขอมลขาเขาของปญหา SS เปน S = {11110, 10101, 10010, 10001, 11000, 1, 10, 100, 1000} และ t = 32222 ซงมคาตอบวา “ม” เพราะ 11110 + 10101 + 10010 + 1 + 1000 = 32222 (ใหสงเกตวา 11110 10101 และ 10010 นนไดมาจากจด v1 v2 และ v3 ของกราฟในรปท 13–10 ซงกคอ vertex cover หนงของกราฟนทมขนาด 3 จดนนเอง)
ขอใหนกเรยนพสจนตอวากราฟ G ทนาไปแปลงม vertex cover ขนาดเทากบ k กตอเมอ S ซงเปนเซตของจานวนทไดจากการแปลงดวยขนตอนขางตนนมเซตยอยทมผลรวมเทากบ t
เมอแสดงใหเหนวา SS � NP และ VC �P SS โดยททราบแลววา VC เปน NPC ดงนนสรปไดวา SS เปนปญหา NPC ดวย �
ตวอยางท 13-14 3SAT เปนปญหา NPC : 3SAT เปนกรณเฉพาะของ SAT เมอแตละวงเลบของนพจนบลนมตวแปร 3 ตว 11
กอนอนอยากบอกใหรกอนวา 1SAT � P และ 2SAT � P (หวงวานกเรยนคงออกแบบอลกอรทมทมประสทธภาพเพอแกปญหา 1SAT ไดในอดใจ แตสาหรบ 2SAT อาจตองคดหนกหนอย) แตพอเปน 3SAT ปญหากลบเปลยนเปน NPC เราจะพสจนวา 3SAT เปนปญหา NPC โดยพสจนวา 3SAT � NP และ SAT �P 3SAT (เนองจากคกไดพสจนแลววา SAT เปน NPC)
3SAT � NP : เราสามารถทวนสอบหลกฐานซงเปนคาของตวแปรตางๆ ในนพจนได โดยเพยงแทนคาแลวหาคาของนพจนวาเปนจรงหรอไม กไดคาตอบ ซงใชเวลาการทวนสอบแปรตามขนาดของนพจน 11 บางคนเรยกปญหานวา 3CNF (CNF มาจาก conjuctive normal form ของนพจนบลนทรบเปนขอมลขาเขา)
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 343
SAT �P 3SAT : ขนตอนนจะยงยากเลกนอย แตจะแสดงใหเหนวา 3SAT ซงแตละวงเลบในนพจนมจานวนตวแปร 3 ตว ซงเมอเทยบกบของ SAT จะมกตวกไดนน แทจรงแลวไมงายไปกวา SAT เลย กาหนดให E คอนพจนบลนของ SAT การแปลงนพจนบลนของ SAT ไปเปนนพจนของ 3SAT จะแปลงทละวงเลบของ E โดยวธการแปลงจะขนกบจานวนตวแปรในวงเลบ ซงสามารถจาแนกไดเปนสลกษณะดงน1. กรณทมตวแปร 3 ตวในวงเลบ : กรณนงายสดไมตองทาอะไร ยกวงเลบนไปใชเลย2. กรณทมตวแปร 2 ตวในวงเลบ : เราใชวธเพมตวแปรเสรมเพอใหครบ 3 ตว คอถาวงเลบนคอ (x1+ x2) กแปลงเปน (x1+ x2+ y–)(x1+ x2+ y)
3. กรณทมตวแปร 1 ตวในวงเลบ : กทานองเดยวกบกรณ 2 ตว คอเพมตวแปรเสรม แตกรณนเพมสองตว นนคอแปลงจาก (x1) เปน (x1+ y– + z–) (x1+ y– + z) (x1+ y + z–) (x1+ y + z)
4. กรณทมตวแปร 4 ตวขนไปในวงเลบ : สมมตวาวงเลบนคอ C = (x1+ x2+...+ xk ) k �4 เราจะเพมตวแปรเสรม w1, w2, ..., wk–3 แลวแปลง C นเปน C* ซงเทากบ
))(())()(( 31342324213121 ��������������� kkkkkk wxxwwxwwxwwxwxx �
ขอใหสงเกตวาถา C มคาเปนจรง ตองม xi ใดสกตวมคาเปนจรง สมมตวา xj มคาจรงใน CC* กยอมมคาจรงไดถาเรากาหนดให w1 w2 ... wj–2 มคาจรงหมด และ wi ทเหลอเปนเทจหมด และในทางกลบกนถา C* มคาจรง จะตองม xi สกหนงตวมคาจรง ทงนเพราะวาถา xi
ทกตวมคาเทจหมด C* จะเทากบ ))(())()(( 33432211 ������ kkk wwwwwwww � ซงไม
มทางเปนจรงได สรปไดวา C มคาจรงไดกตอเมอ C* มคาจรงดวย
มาดกนสกหนงตวอยางให E = (x1)(x2+ x–3 )( x1+ x3+ x–4 ) ( x1+ x–2+ x3 + x4 + x5) จะแปลงไดเปน(x1+ y–1 + z–1) (x1+ y–1 + z1) (x1+ y1 + z–1) (x1+ y1 + z1) (x2+ x–3 + y–2) (x2+ x–3 + y2 ) ( x1+ x3+ x–4 ) ( x1+x–2+ w1 ) ( x3+ w– 1+ w2 ) ( x4+ x5 + w– 2 )
เมอแสดงใหเหนวา 3SAT � NP และ SAT �P 3SAT โดยททราบแลววา SAT เปน NPC ดงนนสรปไดวา 3SAT เปนปญหา NPC ดวย �
344 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
การออกแบบอลกอรทมสาหรบปญหา NP–Hardเมอเราทราบแลววาปญหาหนงเปน NPC สงทสรปไดกคอวาปญหานเปนปญหาทใครๆ ในปจจบนกยงหาอลกอรทมทมประสทธภาพไมได ทงๆ ทกยงไมมใครพสจนไดวายากจรง แตคนสวนใหญสงสยวาจะยาก และถาเปนปญหาการหาคาเหมาะทสด (optimization problem) ทเปน NP–hard สถานการณกเปนในทานองเดยวกน 12 แลวเราในฐานะผออกแบบอลกอรทมจะทาอยางไรตอ แนนอนวากคงตองออกแบบอลกอรทมเพอแกปญหานอยดแหละ เพยงแตวาคงตองเปลยนวตถประสงคกนบางเพอจะไดจดการกบปญหานได แลวแตวาตองการแบบใด ดงน
1. “ไดคาตอบดสดแน แตอาจชามากๆ” วธนใชการยอนรอย หรอการขยายและจากดเขตเปนกลวธหลกในการคนผลเฉลย (ทไดศกษากนมาในบทท 11) ทงนสงทตองคานงถงคอการออกแบบตนไมหรอกราฟปรภมสถานะ การตรวจความมแววของจด และฟงกชนกนเขตตางๆ ทใชระหวางการคน วธนประกนไดวาไดอลกอรทมทพบคาตอบแนนอนของปญหา แตจะชาเรวเพยงใดประกนไมได เวลาการทางานกรณเลวสดกยงคงเปนแบบเลขชกาลง ตรงนตองขอเนนวาไมใชวาเวลาการทางานจะเปนกรณเลวสดเสมอ ในทางปฏบตอาจพบกรณเลวสดไมมากกได (เชน ไดมการศกษาจานวนจดทตองตรวจสอบในตนไมปรภมสถานะระหวางการคนคาตอบแบบยอนรอยของปญหา “การใหสจดของกราฟดวยสสามสจะพอไหม” ซงเปน NPC วาโดยเฉลยแลวจะสารวจจดในตนไมปรภมสถานะเพยง 197 จดเทานน ไมขนกบขนาดของกราฟ !!! 13)
2. “มกไดคาตอบด ในทางปฏบต แตอาจชา” วธนใชการคนเฉพาะท (local search) โดยอาศยการคอยๆ เปลยนคาตอบจากทมอยไปเรอยๆ จนกวาจะเปนทพอใจ โดยมกลไกการปรบเปลยนคาตอบหลายแบบอาทเชน hill climbing, steepest descent, simulated annealing, tabu search และ genetic algorithm เปนตน คาตอบทไดนนไมไดคาดวาจะเปนแบบดทสด
12 ในหวขอนจะพดถงปญหาการหาคาเหมาะทสดทงนน เนองจากในทางปฏบตเราตองการคาตอบของปญหาประเภทนมากกวาคาตอบของกรณปญหาการตดสนใจ (เชนอยากรการเดนทางของพนกงานขายทสนสด มากกวาอยากรแความการเดนทางทยาวไมเกน k อย แตไมรวาเสนทางใด)
13 Herbert S. Wilf, “Backtrack: An O(1) average time algorithm for the graph coloring problem”, Information Processing Letters 18 (1984), 119–122.
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 345
แตขอแบบ “ดๆ” ดงนนจะไมสามารถประกนคณภาพของคาตอบได อกทงคณภาพของคาตอบนนขนกบตวอยางปญหาทไดรบ และตองอาศยการปรบคาของตวแปรตางๆ ในกระบวนการคน อยางไรกตามเปนวธทใชไดผลเปนทยอมรบในทางปฏบต
3. “ประกนคณภาพ แถมเรวดวย” วธนใชอลกอรทมแบบประมาณ (approximation algorithm) ซงเปนอลกอรทมประเภททใหผลเฉลยทรบประกนคณภาพ (พสจนได) ดวยเวลาการทางานแบบพหนาม ไมวาจะรบตวอยางใดๆ ของปญหากตาม เชนประกนวาคาตอบทไดจะมคาไมเกน 1.5 เทาของคาของคาตอบทดทสด เปนตน
เนองจากเราไดนาเสนอรายละเอยดของการยอยรอย และการขยายและจากดเขตกนแลวในบทท 11 ในหวขอนจะนาเสนอแนวคดหลกๆ ของการคนเฉพาะท และอลกอรทมเชงประมาณเทานน โดยจะไมลงในรายละเอยดมากนก เนองจากอยนอกเหนอขอบเขตของวชาอลกอรทมเบองตนน
การคนเฉพาะทการคนเฉพาะท (local search) เปนกลวธทใชในการแกปญหาการหาคาเหมาะทสดเชงการจด (combinatorial optimization problem) ซงเปนปญหา NP–hard โดยอาศยการคอยๆ เปลยนคาตอบจากทมอยไปเรอยๆ จนกวาจะเปนทพอใจ ภายใตสมมตฐานดงตอไปน
� ให S เปนเซตของผลเฉลยทเปนไปไดทงหมด (ซงมขนาดใหญมากๆ )� ฟงกชน f(s) สาหรบการคานวณตนทนของผลเฉลย s โดยปญหาทสนใจมวตถประสงคทจะหาผลเฉลยทม f(s) เหมาะทสด (นอย / มากทสด)
� ฟงกชน initialSolution() ซงสามารถสรางผลเฉลยเรมตน� ฟงกชน next(s) ซงสามารถสรางเซตของผลเฉลยตางๆ ทผลตไดถดจากผลเฉลย s บางทเรยกวาฟงกชนเพอนบาน (neighborhood function) (และนเองเปนทมาของคาวา “เฉพาะท”)
การคนเฉพาะทมกระบวนการทางานแบบวนซา (iterative) เพอคนผลเฉลยในปรภมผลเฉลยไปเรอยๆ จนกวาจะไดผลลพธทพอใจ โดยเรมจากผลเฉลยเรมตน จากนนสรางผลเฉลยถดไป กระทาเชนนวนซาไปเรอยๆ เขยนเปนรหสเทยมไดดงน
346 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
01: localSearch( )02: {03: s = initialSolution()04: while not terminate(s) {05: s’ = select( next(s) )06: if ( accept(s,s’) ) then s = s’07: }08: }
เรมดวยผลเฉลยเรมตนในบรรทดท 3 เขาวงวนทางานจนกวาจะพอใจตามเงอนไขทกาหนดใน terminate() ประเดนทนาสนใจอยทฟงกชน select และ accept โดยท select ทาหนาทเลอกผลเฉลยในเซตของผลเฉลยถดไปมาพจารณา และ accept ทาหนาทตดสนใจวาจะยอมรบผลเฉลยใหมทเลอกมาหรอไม สองฟงกชนนเอง เปนตวสรางความแตกตางๆ ของกลวธการคนเฉพาะท ซงมหลากหลายวธแตกตางกนดงน
1. Simple descent : ฟงกชน select ทาหนาทเลอกผลเฉลยถดไป (s’ ) แบบสมจาก next(s) มาใชหนงผลเฉลย สวน accept นนจะยอมรบผลเฉลยกเฉพาะเมอ s’ มคาของ f(s’ ) ทดกวา f(s) วธนเปนทรจกในอกชอหนงวา hill climbing (ซงเปรยบเสมอนการไตหบเขาทมแตจะไตลงเทานน) การวนซาจะสนสดเมอไมสามารถหาผลเฉลยทดกวาได (ซงไมไดหมายความจะพบผลเฉลยทเหมาะทสด เพราะผลเฉลยทพบนนอาจมสภาพทเรยกวาเหมาะทสดเฉพาะท – local optima คอปรบไดดกวาไมไดแลวจาก next(s))
2. Steepest descent : แทนทจะสมเลอกผลเฉลยมาเพยงหนงเดยวเทานนจาก next(s) ตามททาใน simple descent วธนพจารณาและคานวณคา f ของทกๆ ผลเฉลยใน next(s) แลวเลอกตวทมคา f ดทสด โดย accept จะยอมรบผลเฉลยทเลอกมานกเมอมคา f ทดกวาของผลเฉลยเดมทมอย การพจารณาและคานวณ f ของทกๆ ผลเฉลยโดยทวไปใชเวลามาก จงมกใชวธการเลอกเซตยอยของ next(s) แบบสม หรอโดยใชศกษาสานก (heuristic) จากลกษณะของปญหามาพจารณาเพอลดเวลาการทางานของ select
3. Simulated annealing 14: วธนลอเลยนอณหพลศาสตรของกระบวนการอบเหนยว (annealing) ซงเปนขนตอนการลดอณหภมระหวางการหลอมเพอใหไดโลหะทอยในสภาวะทเหมาะทสด (โดยจะลดอณหภมอยางชาๆ เพอใหไดโลหะทเหนยว ไมเปราะ) วธน
14 S. Kirkpatrick, C. D. Gelatt, Jr., and M. P. Vecchi. Optimization by simulated annealing. Science,
220:671–680, 1983.
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 347
เทยบผลเฉลยปจจบนเปนสถานะปจจบนของโครงสรางโลหะในระบบ คา f ทกากบผลเฉลยกเปรยบเสมอนพลงงานของสถานะ และการทางานแบบวนซาเปรยบเสมอนกบการคอยๆ ลดอณหภมลงเรอยๆ
วธนอาศยหลกการเลอกของ select ทคลายกบของ simple descent จะตางกนกตรงทฟงกชน accept นนอาจยอมรบผลเฉลยใหมทเลวกวาของเกาได ภายใตความนาจะเปนซงเปนฟงกชนทมพารามเตอรคอ �f = f(s’ ) – f(s) และตวแปรอณหภม t ระหวางการวนซา (tมคาสงตอนเรมตน และลดคาลงเรอยๆ ระหวางการวนซา) ดงน
if ( �f < 0 ) s = s’ else if ( e–�f/kt > random(0,1) ) then s = s’
เงอนไขแรกในการยอมรบผลเฉลยใหมคอเมอไดของดกวา (ในทนถอวาตองการคา f ทนอยทสด) แตถาไมดกวากยอมรบเมอผานเงอนไขทสอง เหตผลทใชคาของ ktfe /�� (k คอคาคงตวของโบลตซมนน – Boltzmann) นนกมาจากพฤตกรรมของกระบวนการฟสกสระหวางการอบเหนยว ซงหมายความวาเรายอมรบผลเฉลยทเลวกวาไดงายในระยะแรกของการวนซา (เมออณหภมสง) แตจะยอมรบของเลวกวายากขนเรอยๆ เมออณหภมลดลง และยอมรบผลเฉลยทเลวนอยกวาไดงายกวาทเลวมากกวา การวนซาจะสนสดเมอถงอณหภมเยน หรอถงสภาพทไมไดผลเฉลยทดกวาเปนเกนเวลาทตงเปนเกณฑไว
4. Tabu search 15 : วธนมแนวคดคลายกบ steepest descent แตการคนจะดาเนนการตอถงแมวาจะไปตนทจดเหมาะทสดเฉพาะท โดยจะไปตอในทๆไมเคยไปมากอนถงแมวาจะไดผลทเลวกวากตาม นนคอจะพจารณาเฉพาะผลเฉลยของ next(s) ทไมเคยถกเลอกมาเทานน (เพอปองกนการทางานซาซอน) ดงนนจงตองมการจดเกบผลเฉลยทเคยถกเลอก (เรยกวาเปน Tabu list 16 ) เพอใชตรวจสอบการซาซอนดงกลาว
5. Genetic algorithm 17 : วธนลอเลยนววฒนาการของสงมชวต อาศยแนวคดทวาเฉพาะผทแขงแกรงเทานนถงจะอยรอด จดเดนของวธนทตางจากวธอนๆ อยตรงทวาวธนไมไดเกบและเปลยนแปลงทละผลเฉลย แตจะเกบเปนเซตของผลเฉลยทดๆ เปรยบไดกบประชากร
15 F. Glover. Tabu search: A tutorial. Interfaces, Vol. 20, :4, 74–94, 1990.16 อยากใหนกเรยนลองคดดวาทาไมถงเรยกวา “Tabu”17 J. H. Holland. Adaptation in Natural and Artificial Systems. Univ. of Michigan Press, Ann Arbor, 1975.
348 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
แขงแกรงทยงมชวตอย ดงนนการเปลยนแปลงของผลเฉลยในการวนซาในแตละรอบนนจะเปนการเปลยนเซตของผลเฉลย แตละผลเฉลยจะถกเขารหสเปนลาดบของสญลกษณเทยบไดกบยนของสงมชวต ดงนนเซตของผลเฉลยจงเปรยบไดกบประชากร ประชากรในรนตอไปยอมเกดมาจากประชากรในปจจบน โดยอาศยแนวคดของการสบพนธ การกลายพนธ ของประชากร (ขนตอนนใชวธการสมเขามาเกยวของดวย เพอปรบเปลยนรหสทแทนผลเฉลย) คา f กากบผลเฉลยถกเทยบกบคาความแขงแกรง (fitness) ของยนเพอใชในกระบวนการเลอกประชากรในรนถดไป ดงนนยนตวใดทมความแขงแกรงไมเขาเกณฑกจะตายไปในทสด เหลอตวทแขงแกรงทสดเปนผลเฉลยสดทาย
การคนเฉพาะทนใชไดดกบหลากหลายปญหาซงเกยวกบการหาคาเหมาะทสดเชงการจด มผนาไปประยกตในหลากหลายวงการ ซงสามารถหาผลเฉลยทดไดสาหรบปญหาทพบในทางปฏบต อยางไรกตามความสาเรจของการใชวธการขางตนน ขนกบความสามารถในการเขาใจลกษณะของปญหา การเขารหสตวอยางของปญหา และการนาศกษาสานกมาใชในการสรางเซตของผลเฉลยถดไป อกทงเมอเขยนเปนโปรแกรมแลวมกพบวามพารามเตอรอนๆ อกหลายตว ทตองมการปรบแตง เพอใหไดการทางานทด ตวอยางเชนใน simulated annealing นน จะตองตอบคาถามอาทเชน อณหภมควรเรมตนทใด จะลดอณหภมอยางไร เปนตน
อลกอรทมเชงประมาณอลกอรทมเชงประมาณเปนอกทางเลอกหนงสาหรบปญหาทเปน NP–hard จดเดนของอลกอรทมประเภทนกคอประเดนการประกนคณภาพของผลเฉลยทได ดวยเวลาการทางานแบบพหนาม การประกนคณภาพนนระบดวยคา ซงเปนตวสะทอนวาผลเฉลยทไดจากอลกอรทมตองมคณภาพไมเลวเกน เทาของผลเฉลยทเหมาะทสด กาหนดให Q คอปญหาการหาคาเหมาะทสด A คออลกอรทมสาหรบปญหา Q C(i) คอตนทนของผลเฉลยทไดหาจาก A เมอรบตวอยางปญหา i ของ P และ COPT(i) คอตนทนของผลเฉลยเหมาะทสดของตวอยางปญหา i เราเรยก Aวาเปนอลกอรทมเชงประมาณแบบ เมอเงอนไขขางลางนเปนจรงเสมอสาหรบทกๆ ตวอยางปญหา i ของ P
max ��
��C(i)
COPT(i) ,COPT(i) C(i) � �
เราใชนยามนทงกบปญหาการหาคานอยทสดและมากทสด โดยมจดประสงคให >1 และยงมคาใกล 1 เทาใดกยงหมายความวาผลเฉลยมคณภาพมากเทานน ดงนนถา = 2 สาหรบปญหา
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 349
การหาคานอยทสด กหมายความวาผลเฉลยทไดมตนทนไมเกนสองเทาของตนทนทนอยทสด ในขณะทสาหรบปญหาการหามากทสด จะหมายความวาผลเฉลยทไดมตนทนไมนอยกวาครงหนงของตนทนทมากทสด
ในบางโอกาสเราอาจตองการระบคณภาพดวยขอบเขตของคาคลาดเคลอนสมพทธ � นนคอแทนทจะระบวา “A เปนอลกอรทมเชงประมาณแบบ ” กระบเปน “A เปนอลกอรทมเชงประมาณแบบ (1+�)” โดยท � > 0 (หมายความวา � ยงนอยยงด)
ตองขอสรปสภาพของการออกแบบอลกอรมเชงประมาณสาหรบปญหา NP–hard ทมอยในปจจบนดงน
� มอยหลากหลายปญหาทมอลกอรทมเชงประมาณแบบ ได โดย เปนคาคงตว
� มอยหลายปญหาทยงหาอลกอรทมเชงประมาณแบบ ซงเปนคาคงตวไมได จะมกเฉพาะเมออนญาตให เพมตามขนาดของตวอยางปญหา (นนคอเปน (n))
� มอยหลายปญหาทมอลกอรทมเชงประมาณแบบ (1+�) ซงเราสามารถลด � ใหนอยเทาไรกได (ตราบเทาท � > 0) โดยการเพมเวลาการทางาน ซงยงคงเปนแบบพหนามอย (เรยกวาเปนการใชเวลาซอคณภาพ)
� มอยหลายปญหาทพสจนไดวาไมมทางทจะมอลกอรทมเชงประมาณได
� มปญหาอกมากมายทยงรอใหมคนออกแบบอลกอรทมเชงประมาณให
การออกแบบอลกอรทมเชงประมาณนนมการใชศกษาสานกเขาชวยออกแบบ (คลายกบอลกอรทมแบบตระกลาม) ซงขนกบขอปญหาทสนใจ แตประเดนใหญกคอจะตองหาคา (หรอ �) ซงเปนตวประกนคณภาพของอลกอรทมไดจรง (ตองขอเนนวาตองประกนคณภาพไดสาหรบทกๆ ขอมลขาเขาของปญหา) จงเรยกวาเปนอลกอรทมเชงประมาณได แสดงดวยตวอยางดงตอไปน
ตวอยางท 13-15 Vertex Cover : กาหนดให G = (V, E) คอกราฟๆ หนง เราตองการหาเซตยอย VC � V ทมขนาดเลกทสด โดยทเสนเชอมทกเสนของกราฟมจดปลายอยใน VC
ปญหานเปน NP–hard ถงแมวาจะยากตอการหา vertex cover ทมขนาดเลกทสด แตกไมคอยยากถาจะหากรณทมขนาด “เลกๆ” อลกอรทมเชงประมาณขางลางนจะใหผลลพธเปน vertex cover ทมขนาดไมเกนสองเทาของขนาดทเลกทสด
350 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
01: VertexCover_approx( G=(V,E) )02: {03: Vc = �04: E’ = E05: while ( E’ � � ) {06: (u,v) � an arbitary edge of E’07: VC = Vc � {u, v}08: remove from E’ every edge incident on u or v09: }10: return VC11: }
แนวคดการทางานกคอวงวนการเลอกเสนเชอมมาหนงเสน รวมจดปลายทงสองเปนสมาชกใน vertex cover จากนนลบเสนเชอมทกๆ เสนทตดกบจดทงสองน (เนองจากถกปกดวยจดทงสองแลวกลบทงไดหมด) กระทาเชนนไปเรอยๆ จนเสนเชอมทกๆ เสนถกลบจนหมด อลกอรทมนจงใชเวลาเปน O(E) และผลลพธทไดเปน vertex cover แนๆ เพราะวาเสนเชอมใดๆ จะถกลบกเมอมจดใน vertex cover ทตดกบมน
ประเดนทตองพสจนกคอเรองของการประกนคณภาพของผลลพธ เราจะมาพสจนกนวาอลกอรทมนเปนการประมาณแบบ 2
กาหนดให E* คอเซตของเสนเชอมทงหมดทถกเลอกในบรรทดท 6 เปนทแนนอนวาเสนตางๆ เหลานตองไมมจดปลายรวมกน ทงนเพราะวาเมอเราเลอกมาหนงเสนกลบทกๆ เสนทมจดปลายตดกบจดปลายของเสนทเลอก เสนเชอมทถกเลอกในรอบถดไปกยอมไมมจดปลายรวมกบเสนเชอมทถกเลอกกอนหนาน และเนองจากเรารวมจดปลายทงสองของทกๆ เสนเชอมของ E* เปน vertex cover ดงนนสรปไดวา |VC| = 2|E*|
กาหนดให VOPT คอ vertex cover ทมขนาดเลกทสด ถา e � E* จะตองม v � VOPT อยางนอยหนงจดทเปนจดปลายของ e และตองไมเปนจดปลายของเสนเชอมอนใน E* ทงนกเพราะวาเสนเชอมตางๆใน E* ไมมจดปลายรวมกน ดงนน |E*| � |VOPT|
จากผลทได |VC| = 2|E*| และ |E*| � |VOPT| สรปไดวา |VC| � 2|VOPT| �
ตวอยางท 13-16 0/1 Knapsack : กาหนดใหมของอย n ชน ชนท i หนก wi และมมลคา vi เรามถงอยหนงใบทรบนาหนกไดไมเกน W จะเลอกหยบของชนใดใสถงด จงจะไดมลคารวมสงสด โดยทถงไมขาด
ปญหานกเปน NP–hard ซงสามารถหาคาตอบไดดวยกาหนดการพลวตไดในเวลา �(nW) ซงแปรตามคาของ W (จงเปนฟงกชนเลขชกาลงของจานวนบตของทใชแทน W) ในขณะท
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 351
fractional knapsack เปนปญหางาย มอลกอรทมแบบตระกลามซงใชเวลา O(n log n) โดยเลอกหยบตามลาดบของสงของทมมลคาตอนาหนกไลจากมากไปนอย ตามทไดนาเสนอในบทท 10
อยางไรกตามเราสามารถนาแนวคดของอลกอรทมแบบตระกลามน มาใชสรางอลกอรทมเชงประมาณแบบ 2 ดงน
01: Knapsack_approx( obj[1..n], W )02: {03: greedyValue = knapsack_greedy( obj[1..n], W )04: mostValue = max_value( obj[1..n] )05: return( max( mostvalue, greedyValue ) )06: }07:08: Knapsack_greedy( obj[1..n], W )09: {10: sort obj[1..n] by obj[i].v/obj[i].w (nonincreasing)11: sumW = 0; sumV = 012: for ( i=1 to n ) {13: if ( sumW+obj[i].w � W ) {14: sumW += obj[i].w15: sumV += obj[i].v16: }17: }18: return sumV19: }
อลกอรทมน 18 หาคาตอบดวยวธแบบตระกลาม (บรรทดท 3) กบวธการเลอกของทมมลคาสงสด (บรรทดท 4) แลวเลอกคาตอบทมคามากกวา (บรรทดท 5) การหาคาตอบดวยวธแบบตระกลามนน กกระทาดวยการเลอกของตามลาดบของสงของทมมลคาตอนาหนกไลจากมากไปนอย ตราบเทาทยงใสในถงได (บรรทดท 8 ถง 19)
เราสามารถพสจนวามลคารวมทไดจากอลกอรทมเชงประมาณน จะมคาไมตากวาครงหนงของมลคารวมทสงทสด (นนคอเปนอลกอรทมเชงประมาณแบบ 2) ถาถงสามารถจของไดทกชน ผลทไดกยอมมมลคารวมสงสดแนนอน (เพราะเลอกทกชนแนๆ ) ดงนนเราจะพสจนกรณทถงรบนาหนกไดตากวาผลรวมของนาหนกทงหมด กอนอนขอตงขอกาหนดดงตอไปนกอน
� สงของตางๆ เรยงลาดบตามมลคารวมตอนาหนก (vi / wi � vj / wj เมอ i < j )� m คอหมายเลขชนทมมลคาสงสด� k คอหมายเลขชนทนอยสดททาให Ww
ki i ���1
� V คอมลคารวมทไดจาก knapsack_approx ดงนน V = ��
���
��
�
�
11
,maxki im vv
18 เพอความงายในการนาเสนอ อลกอรทมนคนเฉพาะมลคารวมของสงของทไดเลอกใสถง
352 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
� VOPT คอมลคารวมสงสด
ถาเราขยายขนาดของถงใหรบนาหนกได W* = ��
ki iw
1 ซงมมลคารวมเปน V* = �
�
ki iv
1
จะไดวาการเลอกของตงแตชนท 1 ถง k นนยอมไดมลรวมสงสดเมอถงรบได W* (เพราะเปนกรณพเศษของผลลพธทไดจากอลกอรทมแบบตระกลามทไมมการเฉอนของเลย) แนนอนวา VOPT � V* อกทง vm � vk (จากนยามของ m) จงสามารถสรปไดวา
2
2
212121
,max
OPT
*
1
11
11
11
V
V
v
vv
vv
vvV
ki i
ki ik
ki im
ki im
�
�
��
���
��
��
���
� �
��
���
� �
��
���
��
�
�
�
�
�
�
�
�
�
�
�
นนคอมลคารวมทไดจาก Knapsack_approx มคาไมตากวาครงหนงของมลคารวมทสงสด (นนคอเปนอลกอรทมเชงประมาณแบบ 2) �
ตวอยางท 13-17 Euclidean Travelling Salesperson : ปญหาการเดนทางของพนกงานขายในตวอยางน เราสนใจเฉพาะกรณเมอความยาวของเสนเชอมระหวางเมองสองเมองใดคอระยะขจดของตาแหนงของเมองบนระนาบแบบยคลด (Euclidean plane) ซงหมายความวาความยาวของเสนเชอมตางๆ ทเชอมเมองสามเมองใดๆ ตองเปนไปตามอสมการของความยาวดานของสามเหลยม (triangle inequality) นนคอผลรวมของความยาวดานสองดานใดๆ ตองไมนอยกวาดานทสาม (ซงระยะขจดของเมองตางๆบนระนาบแบบยคลดมคณสมบตขอน)
ดวยเงอนไขทเพมเขาไปเชนนกยงคงทาใหปญหานเปน NP–hard แตทาใหเราสามารถหาอลกอรทมเชงประมาณแบบ 2 สาหรบปญหานไดงายมากๆ โดยมขนตอนดงน
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 353
01: Euclidean_TSP_approx( G=(V,E) )02: {03: TMST = MST( G )04: Tour = PreorderTraversal( TMST )05: }
เรมดวยการหาตนไมแบบทอดขามเลกสดของกราฟ จากนนจะไดวาการเดนทางของพนกงานขายกคอลาดบของการแวะผานจดในตนไมนแบบกอนลาดบ รปท 13–12ก แสดงจด 13 จด ซงมเสนเชอมตอถงกนหมด (ไมไดแสดงเสนเชอมในรป) หลงจากนนหาตนไมแบบทอดขามเลกสดจะไดดง รปท 13–12 ข ถาใหจดหมายเลข 1 เปนรากแลวแวะผานแบบกอนลาดบจะไดลาดบจดทแวะผานคอ 1, 2, 3, ..., 12, 13 จะไดการเดนทางของพนกงานขายเชงประมาณแสดงดงรปท 13–12ค
5
1
13
11
9
7
42
12
10
8
6
3
5
1
13
11
9
7
42
12
10
8
6
3
5
1
13
11
9
7
42
12
10
8
6
3
(ก) (ข) (ค)รปท 13–12 การเดนทางของพนกงานขายเชงประมาณ
เราจะแสดงใหเหนจรงวาการเดนทางทไดจาก Euclidean_TSP_approx นนยาวไมเกนสองเทาของการเดนทางทสนสด กอนอนของกาหนดสญลกษณทจะใชอางองดงตอไปน
� TMST คอตนไมแบบทอดขามเลกสดตนหนงของกราฟ� TTSP คอการเดนทางทหาไดจาก Euclidean_TSP_approx� LMST เปนผลรวมของความยาวของเสนเชอมทกเสนใน TMST
� LTSP เปนระยะทางของการเดนทาง TTSP
� LOPT คอระยะทางรวมของการเดนทางของพนกงานขายทสนสด
เนองจากการเดนทางของพนกงานขายเปนวงจรในกราฟ ถาเราตดเสนเชอมทยาวทสดในวงจรนออก กยอมเปนตนไม (เปนตนไมทเปนเสนยาวตอกนไป) และตนไมนยอมตองเปนตนไมทอดขามดวย (เพราะเปนทางเดนทผานทกจด) แตไมจาเปนตองเปนตนไมทอดขามทเลกทสด
354 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
ดงนน LOPT � LMST ถาเราเรมทรากของ TMST แลววงไปตามเสนเชอมในลกษณะตามแนวลก โดยเมอพบทางตนกวงยอนกลบเสนเชอมขนมา ผานทงสองดานของเสนเชอมในลกษณะนไปเรอยๆ จนมาจบทราก ตวอยางเชนเสนประในรปท 13–13ก แสดงวถการเลอยตามเสนเชอมของตนไมในรป จะไดวาวถการเลอยบน TMST นยอมมความยาวรวมเปนสองเทาของความยาวรวมของเสนเชอมของตนไมซงเทากบ 2LMST
(ก) (ข)
รปท 13–13 วถการเดนตามเสนเชอม (ก) และการเดนลด (ข)
แตเนองจากการเดนทางของพนกงานจะตองผานเมองละครงแบบไมซา ดงนนแทนทจะเดนตามเสนเชอมในลกษณะขางตน คอยอนกลบเมองเดมเพอไปเมองใหม กสามารถเดนลดตรงไปเมองใหมไดเลย เสนประในรปท 13–13ข แสดงการเสนทางลดของการเดนในรปท 13–13ก และเปนการเดนทางซงไมผานเมองซากน โดยเรามนใจไดแนๆ วาเสนทางลดนตองไมยาวกวาแบบเดนยอน ทงนเพราะเงอนไขของอสมการของสามเหลยมนนเอง การเดนลดแบบนจะมลาดบของเมองทผานตามลาดบการแวะผานแบบกอนลาดบ
สรปไดวา LTSP � 2LMST และ LMST � LOPT ดงนน LTSP � 2LOPT จงไดอลกอรทมเชงประมาณแบบ 2 �
แนวคดหลกของอลกอรทมเชงประมาณขางตนน กคอการเปลยนตนไมแบบทอดขามเลกสดของกราฟไปเปนวงจรแฮมลตน อาจมองไดวาวธททามานนเปลยนเสนเชอมแตละเสนของ TMST เปนสองเสน กจะไดกราฟแบบออยเลอร (เนองจากทกๆ จดมดกรเปนเลขค) หาวงจรแบบออยเลอร แลวจงใชทางลดบนวงจรออยเลอรเพอหลกเลยงการเดนผานจดซาไดเปนวงจร
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 355
แฮมลตน ถาเราเพมกระบวนการเปลยน TMST ไปเปนกราฟแบบออยเลอร ท “ฉลาด” ขน (และซบซอนกวา) กจะไดทางเดนทางเชงประมาณทมคณภาพกวา ซงสามารถทาไดดงน 19
1. หา VODD ซงคอเซตของจดทมดกรเปนเลขคใน TMST ( |VODD| ตองเปนเลขค จากคณสมบตของกราฟ)
2. หาการจบคจดใน VODD ซงใหผลรวมของระยะทางของคจดทจบคกนทงหมดทนอยทสด (minimal length matching)
3. เพมเสนเชอมใน TMST ระหวางจดทจบคกนจากขตอยทแลว จะไดกราฟแบบออยเลอร (เพราะทกๆ จดใน VODD ซงเคยมดกรเปนเลขค กจะมดกรเปนเลขคหลงเพมเสนเชอม)
4. หาวงจรแบบออยเลอรบนกราฟทได
5. ใชการเดนทางลดบนวงจรออยเลอร เพอหลกเลยงการผานจดซา ไดเปนวงจรแฮมลตนทแทนการเดนทางของพนกงานขาย
รปท 13–14ก แสดงตนไมแบบทอดขามเลกสด ม VODD = {1, 5, 7, 9, 11, 13} หาการจบคแบบระยะทางสนสดจะไดการเพมเสนเชอม (1,13), (5,7), และ (9,11) ไดกราฟแบบออยเลอรในรปท 13–14ข เมอหาวงจรแบบออยเลอร บวกกบการใชทางลดเพอหลกเลยงการผานจดซา จะไดการเดนทางดงรปท 13–14ค
5
1
13
11
9
7
42
12
10
8
6
3
5
1
13
11
9
7
42
12
10
8
6
3
5
1
13
11
9
7
42
12
10
8
6
3
(ก) (ข) (ค)รปท 13–14 การปรบปรงการเดนทางของพนกงานขายเชงประมาณ
19 N. Christofides, “Worst–case analysis of a new heuristic for the traveling salesman problem,” Technical
Report, Grad. School of Industrial Adm., Carnegie–Mellon Univ., 1976.
356 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
เราสามารถพสจนไดวาการเดนทางทไดนมระยะทางไมเกน 1.5 เทาของ LOPT (ซงเปนอลกอรทมเชงประมาณสาหรบปญหานทมขอบเขตของคณภาพทดทสดในปจจบน)
กาหนดให EM คอเซตของเสนเชอมทไดจากการจบคจดใน VODD แบบระยะทางสนทสด GE คอกราฟทไดจากการรวม EM เขากบ TMST (ตวอยางเชนรปท 13–14ข) LE คอผลรวมของความยาวของเสนเชอมทกๆ เสนใน EM และ LE คอความยาวของวงจรแบบออยเลอรบน GE แนนอนวา LE = LM + LMST (เนองจากวงจรออยเลอรตองผานเสนเชอมทกเสน) เราสามารถหาความสมพนธของ LOPT กบ LM และ LMST ไดดงน
� LMST � LOPT จากทไดแสดงใหเหนจรงในหนาท 354
� LM � 0.5LOPT : กาหนดให TODD คอการเดนทางสนทสดซงผานเฉพาะจดใน VODD และ LODD คอระยะทางรวมของ TODD ซงแนนอนวา LODD � LOPT เราสามารถนา TODD มาใชหาการจบคจดใน VODD แบบระยะทางสนทสดได โดยเลอกเสนเชอมใน TODD แบบเสนเวนเสน ซงจะไดการจบคจดสองแบบ แตละแบบตองมผลรวมของความยาวเสนเชอมไมเกนครงหนงของ LODD ดงนน LM � 0.5LODD สรปไดวา LM � 0.5LOPT
จาก LE = LM + LMST และผลทไดขางตน จะไดวา LE � 1.5LOPT เมอเราเดนทางลดบนวงจรแบบออยเลอรทไดเพอไมผานจดซากยอมมไมยาวกวา LE แนนอน ดงนนการเดนทางทไดนยอมยาวไมเกน 1.5 เทาของการเดนทางสนทสด �
ตวอยางท 13-18 General Traveling Salesperson : ปญหานตองการการเดนทางของพนกงานขายทสนทสดบนกราฟใดๆ เราสามารถพสจนไดวาไมมอลกอรทมเชงประมาณใดๆ (ซงใชเวลาแบบพหนาม) แกปญหานได นอกเสยจากวา P = NP
การพสจนตอไปนแสดงใหเหนวา ถามอลกอรทมเชงประมาณแบบ � ซงใชเวลาแบบพหนามโดยท � � 1 สาหรบปญหาน (ใหชอวา A) เรากสามารถนา A ไปแกปญหาวงจรแบบแฮมลตนไดในเวลาแบบพหนาม เนองจากปญหาวงจรแบบแฮมลตนนนเปน NPC จงหมายความวาจะม A ไดจรงกตอเมอ P=NP
กาหนดให G = (V, E) เปนกราฟ ปญหาวงจรแบบแฮมลตนตองการตรวจสอบวากราฟ G มวงจรแบบแฮมลตนหรอไม จะขอสรางกราฟ G* = (V, E*) ซงเปนกราฟแบบบรบรณ มเซตของจดเหมอนกบ V แตละเสนเชอมมนาหนก w(i, j) (ซงจะขอเรยกเปนความยาวแทน) โดยท
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 357
���
�
��
otherwiseVEjiif
jiw||1
),(1),(
�
ดวยวธการสราง G* จาก G จะไดวาถา G มวงจรแบบแฮมลตน G* กยอมตองมการเดนทางทมระยะทางรวมเทากบ |V| ซงกคอวงจรแบบแฮมลตนนน โดยทแตละเสนมยาว 1 และถา G ไมมวงจรแบบแฮมลตน G* กตองมแตการเดนทางทมระยะทางรวมเกน �|V| เพราะอยางนอยเสนเชอมหนงบนการเดนทางตองไมปรากฎใน G และเสนเชอมนนยาว 1+ �|V|
ดงนนถาเราม A ซงเปนอลกอรทมเชงประมาณแบบ � สาหรบปญหาการเดนของพนกงานขาย กแสดงวา A สามารถหาการเดนทางทมระยะทางไมเกน � เทาของระยะทางของการเดนทางทสนทสด ดงนนถา G มวงจรแบบแฮมลตน A กยอมหาการเดนทางทยาว |V| ใน G* ไดแน(เพราะถาไปผานเสนเชอมทยาว 1+ �|V| กจะผดคณสมบตการประมาณแบบ �) และถา G ไมมวงจรแบบแฮมลตน การเดนทางใน G* ท A หาไดกยอมตองยาวกวา �|V| แนๆ ดงนนเราสามารถใช A เพอแกปญหาวงจรแบบแฮมลตน ถา A ใชเวลาการทางานแบบพหนาม กแสดงวา P=NP เนองจากปญหาวงจรแบบแฮมลตนนนเปน NPC สรปไดวาจะม A สาหรบปญหาการเดนทางของพนกงานขาย กเมอ P=NP �
แบบฝกหด1. จงแสดงใหเหนจรงวาปญหาตอไปนอยในกลม NP โดยการเขยนรหสเทยมของอลกอรทมททวนสอบหลกฐานเพอยนยนคาตอบของปญหาเหลานไดในเวลาแบบพหนาม
ก) Bin packing : ให U คอกลมของตวเลขจานวนจรงซงมคาในชวง (0, 1] อยากทราบวามวธแบงสวน U ออกเปนกลมยอยทไมมสวนรวมเปนจานวนไมเกน k กลมยอยหรอไม โดยทแตละกลมยอยมผลรวมไมเกน 1
ข) Partition : ให U คอกลมของตวเลขจานวนจรง อยากทราบวามวธแบง U ออกเปนสองกลมยอยซงมผลรวมเทากนหรอไม
ค) Quadratic congruence : ให a, b และ c เปนจานวนเตม อยากทราบวามจานวนเตมบวก x < c ททาให x2 � a (mod b) หรอไม
358 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
ง) MAX-2SAT : ให f เปนนพจนบลนซงเขยนอยในรปแบบบรรทดฐานแบบเชอม (conjunctive normal form – CNF) โดยทแตละวงเลบมเพยงสองตวแปร อยากทราบวามวธกาหนดคาใหกบตวแปรททาใหมวงเลบใน f ทมคาจรงเปนจานวนอยางนอย k วงเลบหรอไม
2. ปญหาการใหสสามส (3-coloring) ถามวาเรามวธใหสจดของกราฟหนงโดยใชสสามสหรอไม โดยทไมมจดปลายสองจดของเสนเชอมใดมสเหมอนกน
3. จงออกแบบอลกอรทมเชงกาหนดทมประสทธภาพสาหรบปญหา 2SAT
4. จงออกแบบอลกอรทมเชงกาหนดทมประสทธภาพสาหรบปญหา 2-coloring
5. ถาเปลยนคาถามของปญหาการเดนทางของพนกงานขายเปน “ไมมการเดนทางของพนกงานขายทมระยะทางรวมไมเกน k หรอไม ?” ปญหาใหมนอยในกลม NP หรอไม เพราะอะไร
6. กาหนดใหมฟงกชน IsThereSubset(A[1..n],k) ทคนคาจรง เมอมเซตยอยของจานวนในแถวลาดบ A ทรวมกนแลวมคาเทากบ k ถาไมมกคนคาเทจ จงแสดงใหเหนจรงวาเราสามารถเรยกใชฟงกชนนเปนจานวน O( n ) หน เพอหาเซตยอยของ A ทมผลรวมเทากบ k เมอ IsThereSubset(A[1..n],k) คนคาจรง
7. นายทกษณตงคาถามใหลกนองหาคาตอบ กอนทตวเองจะบนไปดงานทเยอรมนวา “สมมตวามลกบอลจานวนหนงซงมสตางกนเปนจานวน n ส ลกบอลม 2 ขนาด (ใหญกบเลก) เขาหยบลกบอลขนกบ m ลก ใสลงในถงจานวน k ใบ (k � m)โดยถงแตละใบมลกบอลอยางนอยหนงลก จงหาวามนเปนไปไดหรอไมทจะหยบลกบอล k ลกออกจากถงๆ ละหนงลก โดยไมมลกบอลสองลกใดๆ ทถกเลอกออกมา มสเหมอนกนแตขนาดตางกน” จงพสจนวาปญหานเปน NP–complete
8. จงแสดงใหเหนจรงวา 3SAT �P CLIQUE
9. ปญหา subgraph-isomorphism ถามวากราฟ G1 เปนกราฟยอยของกราฟ G2 หรอไม จงแสดงใหเหนจรงวาปญหานเปน NP บรบรณ
10. จงแสดงใหเหนจรงวาการตรวจสอบวากราฟหนงมทางเดนแบบแฮมลตน (Hamiltonian path) หรอไมนนเปนปญหา NP บรบรณ
Draft 1.0 : 28/10/00 20:44 : [email protected] บทท 13 เอนพบรบรณ 359
11. จงยกตวอยางกราฟทแสดงวาอลกอรทมขางลางนอาจให vertex cover ทมขนาดเกน 2 เทาของกรณทเลกสด
01: vertexCover_greedy( G=(V,E) )02: {03: Vc = �04: while ( E � � ) {05: choose v � V whose degree is maximum07: VC = Vc � {v}08: V = V – {v}09: remove from E every edge incident on v10: }11: return VC12: }
12. จงออกแบบอลกอรทมทใชเวลาเปนเชงเสนในการหา vertex cover ของตนไม
13. เราไดแสดงใหเหนวา CLIQUE �P VC (ตวอยางท 13-12) เราจะสามารถนาอลกอรทมเชงประมาณของปญหา vertex cover ทไดนาเสนอในตวอยางท 13-15 ไปปรบใหเปนอลกอรทมเชงประมาณของปญหา CLIQUE ไดหรอไม
14. จงยกตวอยางปญหา 0/1 knapsack ซงทาใหผลทไดจากอลกอรทม Knapsack_approxในหนาท 351 นนมาจาก mostValue ซงคอของชนทมมลคามากสด แทนทจะเปนผลลพธทไดจากอลกอรทมยอยแบบตระกลาม
15. จงยกตวอยางตาแหนงของจดของปญหาการเดนทางของพนกงานขายบนระนาบแบบยคลด ซงเมอใชอลกอรทมเชงประมาณแบบ 3/2 ทไดนาเสนอหนาท 355 ซงใหผลลพธเปน 1.5 เทาของการเดนทางทสนสด
360 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:44 : [email protected]
Draft 1.0 : 28/10/00 20:50 : [email protected] 361
[1] A. V. Aho, J. E. Hopcroft, and J. D. Ullman. The Design and Analysis of Computer Algorithms. Addison-Wesley, 1974.
[2] S. Baase. Computer Algorithms: Introduction to Design and Analysis. Addison-Wesley, 1978
[3] J. Bentley, Programming Pearl. Addison-Wesley, 1986.
[4] J. Bentley, More Programming Pearl. Addison-Wesley, 1988.
[5] G. Brassard and P. Bratley. Algorithmics: Theory and Practice. Prentice Hall, 1988
[6] G. Brassard and P. Bratley. Fundamentals of Algorithmics. Prentice Hall, 1996.
[7] T. H. Cormen, C. E. Leiserson, and R. L. Rivest, Introduction to Algorithms. MIT Press, 1990
[8] M. R. Garey and D. S. Johnson. Computers and Intractability: A Guide to the Theory of NP-Completeness. W. H. Freeman, 1979.
[9] G. H. Gonnet and R. Baeza-Yates. Handbook of Algorithms and Data Structures, Addison-Wesley, 1991.
[10] D. Harel, Algorithmics: The Spirit of Computing. Addison-Wesley, 1987.
[11] D. S. Hochbaum, ed., Approximation Algorithms for NP-Hard Problems, PWS. 1997.
[12] E. Horowitz and S. Sahni. Fundamentals of Computer Algorithms. Computer Science Press, 1978.
[13] D. E. Knuth. The Art of Computer Programming: Fundamental Algorithms,volume 1, Addison-Wesley, 3rd ed., 199x
[14] D. E. Knuth. The Art of Computer Programming: Seminumeraical Algorithms,volume 2, Addison-Wesley, 3rd ed., 199x
บรรณานกรม
362 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:50 : [email protected]
[15] D. E. Knuth. The Art of Computer Programming: Sorting and Searching, volume 3, Addison-Wesley, 3rd ed., 199x
[16] U. Manber. Introduction to Algorithms: A Creative Approah, Addison-Wesley, 1989.
[17] R. Motwani and P. Raghavan. Randomized Algorithms. Cambridge University Press, 1995.
[18] W. H. Press, B. P. Flannery, S. A. Teukolsky, and W. T. Vetterling, Numerical Recipies in C: The Art of Scientific Computing, Cambridge University Press, 1988.
[19] I. Parberry. Problems on Algorithms, Prentice Hall, 1995.
[20] F. P. Preparata, M. I. Shamos, and R. S. Preparata. Computational Geometry: An Introduction. Springer-Verlag, 1991.
[21] P. W. Purdon Jr. and C. A. Brown, The Analysis of Algorithms. Holt, Rinehart, and Winston, 1985.
[22] G. Rawlins. Compared to What ?: An Introduction to the Analysis of Algorithms.Computer Science Press, 1992.
[23] S. Sahni, Data Structures, Algorithms, and Applications in C++, McGraw-Hill, 1998.
[24] R. Sedgewick, Algorithms. Addison-Wesley, 1983.
[25] R. Sedgewick and P. Flajolet, An Introduction to the Analysis of Algorithms, Addison-Wesley, 1996.
[26] S. S. Skeina, The Algorithm Design Manual. Telos/Springer-Verlag, 1998
[27] M. A. Weiss, Data Structures and Algorithm Analysis in Java. Addison-Wesley, 1999.
[28] H. S. Wilf, Algorithms and Complexity. Prentice Hall, 1986.
คาแนะนาหนงสอเลมนเรยบเรยงมาจากตาราตางๆ ทงฉบบตานาน ฉบบคมภร ฉบบอานเลน และอนๆ ตามทไดแจกแจงขางบนน อกทงยงไดนาเนอหาความรทมอยในอนเตอรเนตอกมากมาย มาผสมรวมกน เลอกประเดนทนาสนใจมานาเสนอ จะขอแสดงความคดเหนเลกนอยเกยวกบตาราตางๆ ทแจกแจงไวในบรรณานกรมนคราวๆ พอเปนแนวทางสาหรบผทตองการคนควาเพมเตม
Draft 1.0 : 28/10/00 20:50 : [email protected] บรรณานกรม 363
ฉบบอานเลน
ผมขอแนะนาใหผมความสนใจเกยวศาสตรทางอลกอรทม เรมตนอานหนงสอของ Harel [10] เนองจากเปนหนงสออานงาย ไมลงลกมาก แตออกแนวกวางครอบคลมทกประเดน ใชภาษารบงายไมเปนทางการ และมคณตศาสตรประกอบนอยมาก
ฉบบตานาน
ตานานในทนผมใหนยามวาเปนหนงสอเลมแรกๆ ทางอลกอรทมมคนอางองกนมากมายมหาศาล หองสมดทกๆ ทตองมไวบนหง หนงสอประเภทนเหนจะหนไมพนตาราดง TAOCP ของ Knuth 3 เลม [13] [14] และ [15] ทยงขายดอยถงทกวนน ตาราของ Aho [1]
ซงใครทตอนนอายเกน 40 ทเคยศกษาสายนมาตองทรมานอานมาทงนน ของ Horowitz [12] ซงถงแมจะไมมพมพอกแลว กยงนากลบไปพลกดเปนระยะ และอกเลมกเหนจะเปนของ Garey และ Johnson [8] หนาปกดา ซงวากนแตเรองของ NP บรบรณ
ฉบบคมภร
ใครๆ ในยคนเหนจะปฏเสธไมไดวาตาราจาก MIT หนาเกน 2 นว หนกเปนกโล ทเรยกกนตดปากวา CLR (มาจากตวอกษรนาหนาของผแตง 3 คน) [7] เปนตาราบงคบทใชในวชาทางอลกอรทมมากทสด ถงแมจะเกาเปนสบปแลว กยงมคนใชกนมาก (เลมใหมคาดวาจะออกป 2001) ครอบคลมเนอหามากมาย ละเอยดทงการเขยนโปรแกรม (ถงแมจะใชรหสเทยมบรรยาย) และการวเคราะห
ฉบบตารากบขาว
ประเภทนเปนหนงสอรวบรวมปญหาเชงคานวณ พรอมทงอลกอรทมสาหรบปญหานนๆ ทใชกนมากกเหนจะเปนของ Sedgewick [24] (มออกรนใหมแลวทแบงเปนสองเลม) แตทมาแรงกเหนจะเปนของ Skiena [26] เนองจากแนบ CD-ROM ซงรวบรวมขมปญญาของสารพดโปรแกรมทไวใชแกสารพดอลกอรทม และหนงสอทชอตรงกบหมวดนเลยกคอ Numerical Recipies [18] ซงรวบรวมโปรแกรมของปญหาเชงจานวนไวมากมาย
ฉบบทวไป
ตาราทางอลกอรทมเลมอนๆ ตางกมประเดนการนาเสนอของตวเอง ตาราของ Brassard และ Bratley [6] อานงาย ครอบคลมเนอหามากมาย (มทงบททเกยวกบอลกอรทมเชงสม
364 การวเคราะหและออกแบบอลกอรทม Draft 1.0 : 28/10/00 20:50 : [email protected]
เชงประมาณ และเชงขนาน) อยาสบสนกบตาราของพวกเขาอกเลม [5] ทพมพกอนหนาน ซงไมคอยหนาแตอานยาก (เพราะทงเรองคาใจไวเปนแบบฝกหดเยอะมาก) ตาราของ Manber [16] นาเสนอการออกแบบอลกอรทมโดยใชวธอปนยกนทงเลม ใครทชอบอปนยเชงคณตศาสตรอยแลวกคงอานกนไดราบรน และสาหรบผทสนใจทาแตโจทย กคงตองอานของ Parberry [19] ซงรวบรวมปญหาทปรากฏในเลมอนๆ มาไวในทเดยวกน (พรอมคาแนะนาในการแกไขบาง) ถาตองเนนทางการวเคราะหกคงตองอานของ Purdon และ Brown [21] และของ Sedgewick และ Flajolet [25] ถาตองเนนการเขยนโปรแกรมกตองอานของ Bentley [3] และ [4] ทมเกรดเลกเกรดนอยทบางทคดไมถง สาหรบผทตองการประหยดเงนซอเลมเดยวใชไดหลายวชากเหนจะตองใชของ Weiss [27] ซงมทงเรองโครงสรางขอมล อลกอรทม และการเขยนโปรแกรม (แตเขาเนนเรองโครงสรางมากกวาเรองอน) แตถาตองการของฟรเลยกตองอานของ Wilf [28] (พอลขสทธกบสานกพมพหมดแลวเขากแจกเปน Internet Edition ฟรทนทท http://www.cis.upenn.edu/~wilf/) แตเปนหนงสออานยากสกหนอย
ฉบบเฉพาะกจ
ประเภทนเนนเปนบางกลวธ หรอบางกลมปญหา แตจะลงในรายละเอยดมากเปนพเศษ เชนของ Motwani และ Raghavan [17] เนนเรองอลกอรทมเชงสม ของ Hochbaum [11] เนนเรองอลกอรทมเชงประมาณ ของ Preparata [20] เนนเรองปญหาเรขาคณตเชงคานวณ เปนตน
ถาอยากจะรวามหนงสอทางอลกอรทมมากมายเพยงใด กลองเขาไปท amazon.com หรอ fatbrain.com แลวคนหนงสอทมคาวา algorithm เปนชอหนงสอด กจะรเอง กตองขอปดทายวาผสนใจยงสามารถสบเสาะแสวงหาความรไดจากเอกสารทเปนทางการ เปนเรองเปนราว และทไมเปนเรองเปนราว เกยวกบอลกอรทมไดจากเครอขาย Internet ทผมเขาไปใชบรการบอยกเหนจะเปน Web site ดงตอไปน
� Computer Science Bibliography :http://wwwhttp://liinwww.ira.uka.de/bibliography/index.html
� A compendium of NP optimization problems :http://www.nada.kth.se/theory/compendium/
Draft 1.0 : 28/10/00 20:50 : [email protected] บรรณานกรม 365
� The Stony Brook Algorithm Repository :http://www.cs.sunysb.edu/~algorith/
� Definitions of Algorithms, Data Structures, and Problems :http://hissa.nist.gov/dads/
� Networked Computer Science Technical Reports Library :http://www.ncstrl.org/
� Eric Weisstein's World of Mathematics :http://mathworld.wolfram.com
� ACM - Association of Computing Machinery (Digital Library) :www.acm.org/dl
� IEEE Computer Society :www.computer.org