ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทยปัญหาอัลกอริทึมแบบแบ่งแยกแล้วเอาชนะ/เฉลยข้อ 3"
Aoy (คุย | มีส่วนร่วม) |
Aoy (คุย | มีส่วนร่วม) |
||
แถว 13: | แถว 13: | ||
== ข้อย่อย 2 == | == ข้อย่อย 2 == | ||
− | แนวคิด จะทำคล้าย ๆ กับ merge sort ธรรมดา โดยการรวมจะรวมอะเรย์สองตัวที่มีขนาด <math> n \, </math> เข้าด้วยกันให้เป็นอะเรย์ที่มีขนาด <math> 2n \, </math> หลังจากนั้น รวมอะเรย์ที่มีขนาด <math> 2n \, </math> เข้าเป็นอะเรย์ที่มีขนาด <math> 4n \, </math> ทำแบบนี้ไปเรื่อย ๆ จนได้อะเรย์ที่เรียงแล้ว และมีขนาดเป็น <math> kn \, </math> | + | แนวคิด จะทำคล้าย ๆ กับ merge sort ธรรมดา โดยการรวมจะรวมอะเรย์สองตัวที่มีขนาด <math> n \, </math> เข้าด้วยกันให้เป็นอะเรย์ที่มีขนาด <math> 2n \, </math> หลังจากนั้น รวมอะเรย์ที่มีขนาด <math> 2n \, </math> เข้าเป็นอะเรย์ที่มีขนาด <math> 4n \, </math> ทำแบบนี้ไปเรื่อย ๆ จนได้อะเรย์ที่เรียงแล้ว และมีขนาดเป็น <math> kn \, </math> |
+ | |||
+ | ส่วนเวลาการทำงาน สามารถคิดได้ดังนี้ ในการรวมอะเรย์ที่มีขนาด <math> n \, </math> เข้าด้วยกันให้เป็นอะเรย์ที่มีขนาด <math> 2n \, </math> นั้น แต่ละคู่จะใช้เวลา <math> 2n=O(n) \,</math> ซึ่งมีทั้งหมด <math> k/2 \,</math> คู่ ดังนั้นเวลาการทำงานทั้งหมดของ tree ชั้นนี้จะเป็น <math> (k/2)O(n)=O(kn) \,</math> ส่วนชั้นที่สองที่เป็นการรวมอะเรย์ที่มีขนาด <math> 2n \, </math> เข้าเป็นอะเรย์ที่มีขนาด <math> 4n \, </math> นั้น แต่ละคู่จะใช้เวลา <math> 4n=O(n) \,</math> ซึ่งมีทั้งหมด <math> k/4 \,</math> คู่ ดังนั้นเวลาการทำงานทั้งหมดของ tree ชั้นนี้จะเป็น <math> (k/4)O(n)=O(kn) \,</math> คิดแบบนี้ไปเรื่อย ๆ ก็จะได้เวลาการทำงานของแต่ละชั้นเป็น <math> O(nk) \,</math> ซึ่ง tree มีทั้งหมด <math> \log k \, </math> ชั้น ดังนั้นเวลาการทำงานทั้งหมด ก็จะเป็น <math> O(nk \log k) \,</math> | ||
+ | |||
[[ไฟล์:mergeLog.JPG]] | [[ไฟล์:mergeLog.JPG]] |
รุ่นแก้ไขปัจจุบันเมื่อ 07:48, 4 กันยายน 2552
อินพุต: อะเรย์ที่เรียงแล้วจำนวน k อะเรย์ แต่ละอะเรย์มีสมาชิกอยู่ ตัว
เอาพุต: รวมอะเรย์ที่เป็นอินพุตให้เป็นอะเรย์ที่เรียงแล้วขนาด ช่อง
วัตถุที่เราต้องตรวจสอบคือ สมาชิกแต่ละตัวในแต่ละอะเรย์ เงื่อนไขคือ อะเรย์สุดท้ายที่ใช้รวมต้องเรียงด้วย
ข้อย่อย 1
พิจารณาการรวมอะเรย์ดังต่อไปนี้
- ขั้นตอนที่ 1 การรวมอะเรย์ที่เรียงแล้วขนาด ตัวที่หนึ่ง เข้ากับอะเรย์ที่เรียงแล้วขนาด ตัวที่สอง เวลาในการรวมจะเป็น
- ขั้นตอนที่ 2 การรวมอะเรย์ที่เรียงแล้วขนาด จากขั้นตอนที่ 1 เข้ากับอะเรย์ที่เรียงแล้วขนาด ตัวที่สาม เวลาในการรวมจะเป็น
- ขั้นตอนที่ k-1 การรวมอะเรย์ที่เรียงแล้วขนาด จากขั้นตอนที่ k-2 เข้ากับอะเรย์ที่เรียงแล้วขนาด ตัวที่ k เวลาในการรวมจะเป็น
- ดังนั้นเวลารวมทั้งหมดจะเป็น
ข้อย่อย 2
แนวคิด จะทำคล้าย ๆ กับ merge sort ธรรมดา โดยการรวมจะรวมอะเรย์สองตัวที่มีขนาด เข้าด้วยกันให้เป็นอะเรย์ที่มีขนาด หลังจากนั้น รวมอะเรย์ที่มีขนาด เข้าเป็นอะเรย์ที่มีขนาด ทำแบบนี้ไปเรื่อย ๆ จนได้อะเรย์ที่เรียงแล้ว และมีขนาดเป็น
ส่วนเวลาการทำงาน สามารถคิดได้ดังนี้ ในการรวมอะเรย์ที่มีขนาด เข้าด้วยกันให้เป็นอะเรย์ที่มีขนาด นั้น แต่ละคู่จะใช้เวลา ซึ่งมีทั้งหมด คู่ ดังนั้นเวลาการทำงานทั้งหมดของ tree ชั้นนี้จะเป็น ส่วนชั้นที่สองที่เป็นการรวมอะเรย์ที่มีขนาด เข้าเป็นอะเรย์ที่มีขนาด นั้น แต่ละคู่จะใช้เวลา ซึ่งมีทั้งหมด คู่ ดังนั้นเวลาการทำงานทั้งหมดของ tree ชั้นนี้จะเป็น คิดแบบนี้ไปเรื่อย ๆ ก็จะได้เวลาการทำงานของแต่ละชั้นเป็น ซึ่ง tree มีทั้งหมด ชั้น ดังนั้นเวลาการทำงานทั้งหมด ก็จะเป็น