โลโก้
ยูเนี่ยนพีเดีย
การสื่อสาร
ดาวน์โหลดได้จาก Google Play
ใหม่! ดาวน์โหลด ยูเนี่ยนพีเดีย บน Android ™ของคุณ!
ฟรี
เร็วกว่าเบราว์เซอร์!
 

ขั้นตอนวิธีแบ่งแยกและเอาชนะ

ดัชนี ขั้นตอนวิธีแบ่งแยกและเอาชนะ

ในวิทยาการคอมพิวเตอร์ ขั้นตอนวิธีแบ่งแยกและเอาชนะ (divide and conquer; D&C) เป็นวิธีการออกแบบขั้นตอนวิธีโดยมีพื้นฐานมาจากการเรียกซ้ำ ขั้นตอนวิธีแบ่งแยกและเอาชนะทำงานโดยแบ่งปัญหาออกเป็นปัญหาย่อย 2 ส่วนหรือมากกว่านั้นแบบเวียนเกิด ปัญหาถูกแบ่งไปเรื่อย ๆ จนเล็กและง่ายพอที่จะแก้อย่างง่ายดาย หลังจากแก้ปัญหาย่อยเล็ก ๆ เหล่านั้นแล้วก็จะนำคำตอบมารวมกันขึ้นไปเรื่อย ๆ จนสุดท้ายได้คำตอบของปัญหาดั้งเดิม กลวิธีนี้เป็นพื้นฐานของขั้นตอนวิธีที่มีประสิทธิภาพจำนวนมากมาย เช่น การเรียงลำดับ (การเรียงลำดับแบบเร็ว การเรียงลำดับแบบผสาน) การคูณเลขขนาดใหญ่ (ขั้นตอนวิธีของคาราซูบา) การคำนวณการแปลงฟูรีเยไม่ต่อเนื่อง ในอีกด้าน การที่จะเข้าใจและสามารถออกแบบขั้นตอนวิธีแบ่งแยกและเอาชนะได้นั้นต้องใช้ทักษะในระดับหนึ่ง เพราะในการที่จะทำให้ขั้นตอนวิธีมีการเรียกซ้ำต่อไปได้เรื่อย ๆ ในเวลาที่ต้องการ บางครั้งอาจจะต้องหาวิธีสร้างปัญหาย่อยซึ่งซับซ้อนและยากมาก นอกจากนี้ การสร้างขั้นตอนวิธีแบ่งแยกและเอาชนะนั้นไม่มีขั้นตอนอย่างเป็นระบบ ตัวอย่างความซับซ้อนจากการวิเคราะห์หรือออกแบบขั้นตอนวิธีแบ่งแยกและเอาชนะ เช่น การคำนวณหาจำนวนฟีโบนัชชีในเวลา O(\log n) โดยใช้รูปเมทริกซ์ร่วมกับการยกกำลังโดยการยกกำลังสอง ขั้นตอนวิธีแบ่งแยกและเอาชนะ ยังรวมไปถึงขั้นตอนวิธีที่แต่ละปัญหาแบ่งออกเป็นปัญหาย่อยหลายส่วน แต่กลับใช้คำตอบหรือคำนวณคำตอบจากเพียงแค่ปัญหาย่อยเดียวเท่านั้น เช่น การค้นหาแบบทวิภาคบนแถวลำดับที่เรียงแล้ว (หรือขั้นตอนวิธีแบ่งครึ่ง สำหรับการหาคำตอบของรากในการวิเคราะห์เชิงจำนวน)Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest, Introduction to Algorithms (MIT Press, 2000).

12 ความสัมพันธ์: การค้นหาแบบทวิภาคการเรียกซ้ำการเรียงลำดับแบบผสานวิธีแบ่งครึ่งวิทยาการคอมพิวเตอร์หอคอยฮานอยจำนวนฟีโบนัชชีทฤษฎีความซับซ้อนในการคำนวณขั้นตอนวิธีขั้นตอนวิธีการเรียงลำดับขั้นตอนวิธีของคาราซูบาแถวลำดับ

การค้นหาแบบทวิภาค

ในสาขาวิทยาการคอมพิวเตอร์ การค้นหาแบบทวิภาค (binary search, half-interval search หรือ bisection search) เป็นขั้นตอนวิธีเพื่อหาตำแหน่งของค่าที่ต้องการ (ข้อมูลนำเข้า หรือ "key") ที่ใช้ในแถวลำดับที่ได้มีการเรียงลำดับข้อมูลแล้ว ขั้นตอนวิธีจะเริ่มจากเปรียบเทียบข้อมูลที่นำเข้ากับข้อมูลที่อยู่ตรงกลางของแถวลำดับ ถ้าข้อมูลมีค่าเท่ากันแสดงว่าพบ "คีย์" ที่ต้องการ อาจจะทำการคืนค่าตำแหน่งหรือในที่นี้คือ ดัชนี (index) กลับไป มิฉะนั้นถ้าค่าของข้อมูลนำเข้าที่ต้องการค้นหามีการน้อยกว่าค่าตรงกลางของแถวลำดับ ก็จะทำขั้นตอนวิธีนี้อีกครั้งแต่เปลี่ยนมาค้นหาในแถวลำดับย่อยของแถวลำดับที่ต้องการค้นหาโดยแถวลำดับย่อยจะมีจุดสิ้นสุดที่ตรงกลางของแถวลำดับหลัก หรือถ้าข้อมูลที่ต้องการค้นหามีค่ามากกว่าแล้วจะค้นหาในแถวลำดับย่อยเช่นกันแต่ย้ายจุดเริ่มต้นมาที่ตรงกลางของแถวลำดับหลัก เมื่อทำไปจนแถวลำดับไม่มีสมาชิกอยู่หรือจุดเริ่มต้นมากกว่าจุดสิ้นสุด แสดงว่าไม่มีสมาชิกในแถวลำดับตัวใดที่มีค่าเท่ากับข้อมูลนำเข้าที่ต้องการค้นหา อาจจะคืนค่าว่า "ไม่พบ" การค้นหาแบบทวิภาคจะแบ่งครึ่งชุดข้อมูลที่ต้องการค้นหา ดังนั้นจึงจัดให้การค้นหาแบบทวิภาคเป็นขั้นตอนวิธีแบ่งแยกและเอาชนะ และขั้นตอนวิธีการค้นห.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและการค้นหาแบบทวิภาค · ดูเพิ่มเติม »

การเรียกซ้ำ

การเรียกซ้ำ (recursion) หรือ การเวียนเกิด (recurrence) เป็นปรากฏการณ์ที่มีการกลับไปอ้างอิงถึงตนเอง (self-reference) หรือมีนิยามเช่นเดียวกันในลำดับต่ำลงไป ปรากฏการณ์นี้มีปรากฏในหลายด้านเช่น คณิตศาสตร์ วิทยาการคอมพิวเตอร์ ศิลปะ ดนตรี การสร้างปฏิทรรศน์ เป็นต้น.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและการเรียกซ้ำ · ดูเพิ่มเติม »

การเรียงลำดับแบบผสาน

ในสาขาวิทยาการคอมพิวเตอร์ การเรียงลำดับแบบผสาน เป็นขั้นตอนวิธีในการเรียงลำดับที่อาศัยการเปรียบเทียบ และยังเป็นตัวอย่างขั้นตอนวิธีที่ใช้หลักการแบ่งแยกและเอาชนะทำให้ขั้นตอนวิธีนี้มีประสิทธิภาพ O(n log n) ในการอิมพลิเมนต์เพื่อการใช้งานจริง ๆ นั้นสามารถทำได้ทั้งแบบบนลงล่าง (Top-down) และแบบล่างขึ้นบน (Bottom-up) อนึ่งในการอิมพลิเมนต์โดยทั่วไปแล้วการเรียงแบบนี้จะไม่ศูนย์เสียลำดับของข้อมูลที่มีค่าเท่ากัน นั่นคือเป็นการเรียงที่เสถียร การเรียงลำดับแบบผสาน ถูกเสนอขึ้นครั้งแรกโดยจอห์น ฟอน นอยมันน์ในปี..

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและการเรียงลำดับแบบผสาน · ดูเพิ่มเติม »

วิธีแบ่งครึ่ง

การแบ่งครึ่งช่วง (Bisection method) คือการแบ่งออกเป็นสองส่วนเท่ากันในคณิตศาสตร์เป็นวิธีการหารากที่ซ้ำ ๆ การแบ่งออกเป็นสองส่วนเท่ากันช่วงเวลาและจากนั้นเลือกช่วงย่อยซึ่งรากต้องอยู่ในแนวแกน X สำหรับการประมวลผลต่อไป เป็นวิธีที่ง่ายและมีประสิทธิภาพ แต่ก็ยังค่อนข้างช้า ด้วยเหตุนี้มันจึงมักใช้เพื่อหาแนวทางในการแก้ปัญหาโดยประมาณซึ่งใช้เป็นจุดเริ่มต้นของวิธีการบรรจบกันอย่างรวดเร็วมากขึ้น วิธีการนี้เรียกว่าวิธีการลดช่วงเวลา วิธีการค้นหาแบบไบนารี.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและวิธีแบ่งครึ่ง · ดูเพิ่มเติม »

วิทยาการคอมพิวเตอร์

วิทยาการคอมพิวเตอร์ หรือ วิทยาศาสตร์คอมพิวเตอร์ (Computer science) เป็นศาสตร์เกี่ยวกับการศึกษาค้นคว้าทฤษฎีการคำนวณสำหรับคอมพิวเตอร์ และทฤษฎีการประมวลผลสารสนเทศ ทั้งด้านซอฟต์แวร์ ฮาร์ดแวร์ และ เครือข่าย ซึ่งวิทยาการคอมพิวเตอร์นั้นประกอบด้วยหลายหัวข้อที่เกี่ยวข้องกับคอมพิวเตอร์ ตั้งแต่ระดับนามธรรม หรือความคิดเชิงทฤษฎี เช่น การวิเคราะห์และสังเคราะห์ขั้นตอนวิธี ไปจนถึงระดับรูปธรรม เช่น ทฤษฎีภาษาโปรแกรม ทฤษฎีการพัฒนาซอฟต์แวร์ ทฤษฎีฮาร์ดแวร์คอมพิวเตอร์ และ ทฤษฎีเครือข่าย ในแง่ของศาสตร์เกี่ยวกับคอมพิวเตอร์นั้น วิทยาการคอมพิวเตอร์เป็นหนึ่งในห้าสาขาวิชาคอมพิวเตอร์ ซึ่งประกอบด้วย สาขาวิทยาการคอมพิวเตอร์ หรือวิทยาศาสตรคอมพิวเตอร์ สาขาวิศวกรรมคอมพิวเตอร์ สาขาวิศวกรรมซอฟต์แวร์ สาขาเทคโนโลยีสารสนเทศ หรือเทคโนโลยีสารสนเทศและการสือสาร และ สาขาคอมพิวเตอร์ธุรกิจ หรือ ระบบสารสนเทศทางธุรก.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและวิทยาการคอมพิวเตอร์ · ดูเพิ่มเติม »

หอคอยฮานอย

องเล่น หอคอยแห่งฮานอย หอคอยแห่งฮานอย หรือ ทาวเวอร์ออฟฮานอย (Tower of Hanoi) เป็นเกมคณิตศาสตร์ ประกอบด้วยหมุด 3 แท่ง และ จานกลมแบนขนาดต่างๆ ซึ่งมีรูตรงกลางสำหรับให้หมุดลอด เกมเริ่มจากจานทั้งหมดวางอยู่ที่หมุดเดียวกัน โดยเรียงตามขนาดจากใหญ่ที่สุดอยู่ทางด้านล่าง จนถึงจานขนาดเล็กที่สุดอยู่ด้านบนสุด เป็นลักษณะกรวยคว่ำตามรูป เป้าหมายของเกมคือ พยายามย้ายกองจานทั้งหมดไปไว้ที่อีกหมุดหนึ่ง โดยการเคลื่อนย้ายจานจะต้องเป็นไปตามกติกาคือ.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและหอคอยฮานอย · ดูเพิ่มเติม »

จำนวนฟีโบนัชชี

การจัดเรียงสี่เหลี่ยมจัตุรัสที่มีความยาวด้านเท่ากับจำนวนฟีโบนัชชี จำนวนฟีโบนัชชี หรือ เลขฟีโบนัชชี (Fibonacci number) คือจำนวนต่าง ๆ ที่อยู่ในลำดับจำนวนเต็มดังต่อไปนี้ โดยมีนิยามของความสัมพันธ์ว่า จำนวนถัดไปเท่ากับผลบวกของจำนวนสองจำนวนก่อนหน้า และสองจำนวนแรกก็คือ 0 และ 1 ตามลำดับ และลำดับของจำนวนดังกล่าวก็จะเรียกว่า ลำดับฟีโบนัชชี (Fibonacci sequence) หากเขียนให้อยู่ในรูปของสัญลักษณ์ ลำดับ Fn ของจำนวนฟีโบนัชชีนิยามขึ้นด้วยความสัมพันธ์เวียนเกิดดังนี้ โดยกำหนดค่าเริ่มแรกให้ ชื่อของจำนวนฟีโบนัชชีตั้งขึ้นเพื่อเป็นเกียรติแก่นักคณิตศาสตร์ชาวอิตาลีชื่อ เลโอนาร์โดแห่งปีซา (Leonardo de Pisa) ซึ่งเป็นที่รู้จักกันในนามฟีโบนัชชี (Fibonacci) ผู้ค้นพบจำนวนฟีโบนัชชีในต้นศตวรรษที่ 13.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและจำนวนฟีโบนัชชี · ดูเพิ่มเติม »

ทฤษฎีความซับซ้อนในการคำนวณ

ทฤษฎีความซับซ้อนในการคำนวณ (Computational Complexity Theory) เป็นสาขาหนึ่งของทฤษฎีการคำนวณ ที่มุ่งเน้นไปในการวิเคราะห์เวลาและเนื้อที่สำหรับการแก้ปัญหาหนึ่ง ๆ โดยปกติแล้วคำว่า "เวลา" ที่เราพูดถึงนั้น จะเป็นการนับจำนวนขั้นตอนที่ใช้ในการแก้ปัญหา ส่วนในเรื่องของ "เนื้อที่" เราจะพิจารณาเนื้อที่ ๆ ใช้ในการทำงานเท่านั้น (ไม่นับเนื้อที่ ๆ ใช้ในการเก็บข้อมูลป้อนเข้า).

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและทฤษฎีความซับซ้อนในการคำนวณ · ดูเพิ่มเติม »

ขั้นตอนวิธี

ั้นตอนวิธี หรือ อัลกอริทึม (algorithm) หมายถึงกระบวนการแก้ปัญหาที่สามารถเข้าใจได้ มีลำดับหรือวิธีการในการแก้ไขปัญหาใดปัญหาหนึ่งอย่างเป็นขั้นเป็นตอนและชัดเจน เมื่อนำเข้าอะไร แล้วจะต้องได้ผลลัพธ์เช่นไร ซึ่งแตกต่างจากการแก้ปัญหาแบบสามัญสำนึก หรือฮิวริสติก (heuristic) โดยทั่วไป ขั้นตอนวิธี จะประกอบด้วย วิธีการเป็นขั้นๆ และมีส่วนที่ต้องทำแบบวนซ้ำ (iterate) หรือ เวียนเกิด (recursive) โดยใช้ตรรกะ (logic) และ/หรือ ในการเปรียบเทียบ (comparison) ในขั้นตอนต่างๆ จนกระทั่งเสร็จสิ้นการทำงาน ในการทำงานอย่างเดียวกัน เราอาจจะเลือกขั้นตอนวิธีที่ต่างกันเพื่อแก้ปัญหาได้ โดยที่ผลลัพธ์ที่ได้ในขั้นสุดท้ายจะออกมาเหมือนกันหรือไม่ก็ได้ และจะมีความแตกต่าง ที่จำนวนและชุดคำสั่งที่ใช้ต่างกันซึ่งส่งผลให้ เวลา (time), และขนาดหน่วยความจำ (space) ที่ต้องการต่างกัน หรือเรียกได้อีกอย่างว่ามีความซับซ้อน (complexity) ต่างกัน การนำขั้นตอนวิธีไปใช้ ไม่จำกัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ แต่สามารถใช้กับปัญหาอื่น ๆ ได้เช่น การออกแบบวงจรไฟฟ้า, การทำงานเครื่องจักรกล, หรือแม้กระทั่งปัญหาในธรรมชาติ เช่น วิธีของสมองมนุษย์ในการคิดเลข หรือวิธีการขนอาหารของแมลง หนึ่งในขั้นตอนวิธีอย่างง่าย คือ ขั้นตอนวิธีที่ใช้หาจำนวนที่มีค่ามากที่สุดในรายการ (ซึ่งไม่ได้เรียงลำดับไว้) ในการแก้ปัญหานี้ เราจะต้องดูจำนวนทุกจำนวนในรายการ ซึ่งมีขั้นตอนวิธีดังนี้.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและขั้นตอนวิธี · ดูเพิ่มเติม »

ขั้นตอนวิธีการเรียงลำดับ

ในวิทยาการคอมพิวเตอร์ ขั้นตอนวิธีการเรียงลำดับ (sorting algorithm) คือ ขั้นตอนวิธีที่จัดเรียงสมาชิกของรายการ (list) ให้เป็นไปตามรูปแบบของอันดับที่กำหนด ส่วนใหญ่อันดับที่ใช้กันคือ อันดับตัวเลข และอันดับตัวอักษร การเรียงลำดับที่มีประสิทธิภาพมีความสำคัญต่อขั้นตอนวิธีอื่นๆ (เช่น ขั้นตอนวิธีการค้นหา และ การผสาน) ซึ่งขั้นตอนวิธีเหล่านี้ต้องใช้รายการที่เรียงอย่างถูกต้อง.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและขั้นตอนวิธีการเรียงลำดับ · ดูเพิ่มเติม »

ขั้นตอนวิธีของคาราซูบา

ั้นตอนวิธีของคาราซูบา (Karatsuba algorithm) เป็น ขั้นตอนวิธี ที่ค้นพบโดย Anatolii Alexeevitch Karatsuba ในปี..

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและขั้นตอนวิธีของคาราซูบา · ดูเพิ่มเติม »

แถวลำดับ

ในวิทยาการคอมพิวเตอร์ แถวลำดับ (array) คือโครงสร้างข้อมูลที่เป็นรายการอย่างหนึ่ง ข้อมูล (value) จะถูกเก็บบนหน่วยความจำคอมพิวเตอร์ แบบอยู่ติดกันไปเรื่อย ๆ การเข้าถึงข้อมูลสามารถกระทำได้ผ่านดัชนี (index) หรืออาจเรียกว่า คีย์ โดยดัชนีจะเป็นจำนวนเต็มซึ่งบอกถึงลำดับที่ของข้อมูลในแถวลำดับ นอกจากนี้ ค่าของดัชนียังไปจับคู่กับที่อยู่หน่วยความจำ ผ่านสูตรคณิตศาสตร์ ทำให้สามารถเข้าถึงข้อมูลได้ ตัวอย่างเช่นแถวลำดับที่มีข้อมูล 10 ตัว โดยมีดัชนีตั้งแต่ 0 ถึง 9 สมมุติให้ข้อมูลแต่ละตัวใช้หน่วยความจำ 4 ไบต์ และแถวลำดับนี้มีที่อยู่ในหน่วยความจำคือ 2000 จะได้ว่าที่อยู่หน่วยความจำของข้อมูลตัวที่ i คือ 2000 + 4i แถวลำดับยังสามารถขยายมิติไปเป็นสองมิติหรือมากกว่านั้นได้ เนื่องจากรูปแบบของแถวลำดับสองมิติมีรูปร่างเป็นตาราง คล้ายกับเมตริกซ์ บางทีจึงอาจเรียกแถวลำดับสองมิติว่าเมตริกซ์หรือตาราง (สำหรับตารางโดยส่วนมากแล้วจะหมายความถึงตาราง lookup) เช่นเดียวกับแถวลำดับมิติเดียวที่บางครั้งก็อาจเรียกว่าเวกเตอร์หรือทูเพิล แถวลำดับถือได้ว่าเป็นโครงสร้างข้อมูลที่ถือกำเนิดขึ้นพร้อม ๆ กับการเขียนโปรแกรม และสำคัญมากในการเขียนโปรแกรมเช่นเดียวกัน และแทบจะไม่มีโปรแกรมใดเลยที่ไม่ใช้แถวลำดับ โดยแถวลำดับนี้ยังนำไปอิมพลีเมนต์โครงสร้างข้อมูลอื่นอีกมากมายเช่นรายการหรือสายอักขระ แม้แต่หน่วยเก็บข้อมูลที่มีที่อยู่หน่วยความจำก็อาจจะมองหน่วยเก็บข้อมูลเป็นแถวลำดับขนาดยักษ์ก็ได้.

ใหม่!!: ขั้นตอนวิธีแบ่งแยกและเอาชนะและแถวลำดับ · ดูเพิ่มเติม »

เปลี่ยนเส้นทางที่นี่:

ขั้นตอนวิธีการแบ่งแยกและเอาชนะ

ขาออกขาเข้า
Hey! เราอยู่ใน Facebook ตอนนี้! »