Quicksort อธิบายให้เด็ก ๆ ฟัง


16

ปีที่แล้วผมได้อ่านที่ยอดเยี่ยมบนกระดาษ“กลศาสตร์ควอนตัสำหรับอนุบาล” มันไม่ใช่กระดาษง่าย ๆ

ตอนนี้ฉันสงสัยว่าจะอธิบายอย่างรวดเร็วด้วยคำพูดที่ง่ายที่สุดเท่าที่จะเป็นไปได้ ฉันจะพิสูจน์ (หรืออย่างน้อยก็ด้วยมือ) ว่าความซับซ้อนโดยเฉลี่ยคือและกรณีที่ดีที่สุดและเลวร้ายที่สุดคืออะไรกับชั้นอนุบาล หรืออย่างน้อยในโรงเรียนประถม?O(nเข้าสู่ระบบn)


9
คุณต้องการพิสูจน์ความซับซ้อนของ quicksort ... ไปยังกลุ่มอายุสามขวบ ... ? โชคดี.

2
ลองใช้ภาษาของพวกเขาปัญหาก็คือมันมีข้อ จำกัด มากและทางชีววิทยาพวกเขายังไม่พร้อมสำหรับความซับซ้อนนี้ การทำตามขั้นตอนในอัลกอริทึมนั้นยังไม่พัฒนาเต็มที่จนกว่าพวกเขาจะอายุหกหรือเจ็ดปี คุณกำลังเผชิญกับความท้าทายทางชีวภาพ

4
ฉันจะไม่แนะนำให้โรงเรียนอนุบาล แต่ค้นหา youtube สำหรับ quicksort (และอัลกอริทึมการเรียงลำดับอื่น ๆ ) ให้การรับรองที่ดีมากมาย ฉันชอบการเต้นรำพื้นบ้านของ Hugarian เป็นการส่วนตัว ดูyoutube.com/watch?v=ywWBy6J5gz8

2
บทความที่คุณพูดถึงมีชื่อลวง แต่เนื้อหาที่ซับซ้อนมากเช่นแบบจำลองอวกาศของฮิลแบร์ตดังนั้นคุณจะทำยังไงต่อไป?

2
ฉันจะยอมแพ้ในการพยายามอธิบายอย่างรวดเร็วและแทนที่จะพยายามให้เด็ก ๆ เข้าใจถึง "การแบ่งแยกและพิชิต" แม้ว่าพวกเขาจะไม่โตพอที่จะเรียกร้องอย่างเต็มที่ความคิดที่จะทำลายปัญหาใหญ่ ๆ ให้กลายเป็นปัญหาเล็ก ๆ นั้นก็มีค่ามาก โดยส่วนตัวแล้วฉันจะเข้าใจพื้นฐานที่มั่นคงเกี่ยวกับการแบ่งและพิชิตทุก ๆ วันผ่านความคิดที่ไม่สมบูรณ์ของอัลกอริทึมที่ซับซ้อน
Vincent Gable

คำตอบ:


14

หัวใจหลักของ Quicksort คือ:

  1. ใช้รายการแรก
  2. ย้ายทุกอย่างน้อยกว่าไอเท็มแรกไปทางซ้ายของมันทุกอย่างยิ่งใหญ่ไปทางขวา (สมมติว่าเรียงขึ้น)
  3. รับเงินคืนในแต่ละด้าน

ฉันคิดว่าทุก ๆ 4 ปีบนโลกนี้สามารถทำได้ 1 และ 2 การเรียกซ้ำอาจใช้คำอธิบายเพิ่มเติมเล็กน้อย แต่ก็ไม่ควรยากสำหรับพวกเขา

  1. ทำซ้ำทางด้านซ้ายโดยไม่สนใจตอนนี้ (แต่อย่าลืมว่าตรงกลางอยู่ตรงไหน)
  2. ทำซ้ำกับด้านซ้ายเรื่อย ๆ จนกว่าคุณจะไม่ทำอะไรเลย ตอนนี้กลับไปที่ด้านขวาสุดที่คุณไม่สนใจและทำซ้ำกระบวนการที่นั่น
  3. เมื่อคุณหมดด้านขวาและด้านซ้ายคุณก็ทำเสร็จแล้ว

สำหรับความซับซ้อนกรณีที่เลวร้ายที่สุดควรจะค่อนข้างง่าย เพียงพิจารณาอาร์เรย์ที่เรียงลำดับแล้ว:

1 2 3 4
  2 3 4
    3 4
      4

ค่อนข้างง่ายที่จะเห็น (และพิสูจน์) ว่ามันเป็น 212n2

ฉันไม่คุ้นเคยกับการพิสูจน์ตัวพิมพ์โดยเฉลี่ยดังนั้นฉันจึงไม่สามารถให้คำแนะนำได้ คุณสามารถพูดได้ว่าในความยาวที่ไม่เรียงลำดับความน่าจะเป็นที่จะเลือกรายการที่เล็กที่สุดหรือใหญ่ที่สุดคือดังนั้น ... ?2ล.2n


บางทีการเรียกซ้ำ (d & c) นั้นดีที่สุดและอธิบายได้อย่างเป็นธรรมชาติที่สุดด้วยความเท่าเทียมกันโดยธรรมชาติ
กราฟิลส์

2
ฉันจะเห็นด้วย สัญชาตญาณของฉันคือการใช้อุปมาอุปมัยให้กองทั้งสองให้เพื่อนของคุณทำงาน
Christian Mann

3
ฉันอ้างว่าเด็กอายุสี่ขวบ (มีข้อยกเว้นที่เป็นไปได้) โดยพื้นฐานไม่สามารถเข้าใจการเรียกซ้ำไม่ว่าคุณจะพยายามแค่ไหน สมองก็ไม่โตพอ มีขั้นตอนที่ชัดเจนในการพัฒนาสมองเช่นจุดที่เด็กตระหนักในตนเองว่าพวกเขาตระหนักถึงผลที่จะตามมาจากการกระทำในอนาคตและพวกเขาเข้าใจการเสียดสีครั้งแรกซึ่งเป็นไปตามกำหนดการควบคุมที่เข้มงวดซึ่งไม่สามารถจัดลำดับจงใจได้ ได้รับการอนุรักษ์อย่างมากในเด็ก ฉันเชื่อว่าความเข้าใจเรื่องการเรียกซ้ำเกิดขึ้นในหมวดหมู่เดียวกัน
Konrad Rudolph

16

จริง ๆ แล้ว Quicksort นั้นง่ายต่อการเข้าใจถ้าพวกเขาเข้าใจการนับพื้นฐานและการหารด้วย 2 ทำการ์ดแฟลช X จำนวนหนึ่งจำนวนพวกเขา 1 - X แล้วสับเปลี่ยน แล้วนี่คือคำอธิบาย:

ตกลงเรามีไพ่สำรับจำนวน 20 ใบที่นี่ เราต้องการที่จะทำให้พวกเขาอยู่ในลำดับดังนั้น 1 เป็นครั้งแรกจากนั้น 2 จากนั้น 3 และอื่น ๆ นี่เป็นวิธีที่รวดเร็วในการทำ

ก่อนอื่นเรามาผ่านสำรับนี้และแยกออกเป็นสองกอง ครึ่งหนึ่งของ 20 คือ 10 ดังนั้นอะไรก็ตามที่ใหญ่กว่า 10 ในกองนี้ทางด้านขวาและอะไรก็ตามที่เล็กกว่าในกองนี้ทางซ้าย (อย่าลืมสาธิตให้เห็นในขณะที่คุณไป)

ทีนี้มาทำสิ่งเดียวกันกับกองเล็ก ๆ กัน ครึ่งหนึ่งของ 10 อะไร (มีคนพูดว่า "ห้า!") ถูกต้อง! ดังนั้นสิ่งที่มีขนาดใหญ่กว่า 5 ไปในกองนี้ทางด้านขวาและมีขนาดเล็กกว่าในกองนี้ทางซ้าย

และตรงนี้เราได้กลุ่มที่ใหญ่กว่า 10 ดังนั้นครึ่งหนึ่งของ 10 คือ 5 และ 10 บวก 5 คืออะไร? (มีคนพูดว่า "สิบห้า!") ถูกต้อง! อะไรก็ตามที่มีขนาดใหญ่กว่า 15 ไปในกองนี้ทางด้านขวาและอะไรก็ตามที่เล็กกว่า 15 ไปในกองนี้ทางซ้าย

และตอนนี้กองเล็ก ๆ น้อย ๆ ที่คุณสามารถดูและวางไว้อย่างเป็นระเบียบ 2, 4, 5, 3, 1ดูที่นี่เราได้ ดังนั้นเราก็เปลี่ยนพวกเขารอบ ๆ 1, 2, 3, 4, 5เช่นนี้และคุณสามารถเห็น งั้นลองทำสิ่งเดียวกันกับกองอื่น ๆ แล้วเราก็วางกองตามลำดับแล้วดู! พวกเขาอยู่ในลำดับ 1-20!

ขอแสดงความยินดี คุณเพิ่งสอนเด็ก ๆ เกี่ยวกับหลักการพื้นฐานของอัลกอริทึม quicksort ที่ปรับได้! คุณสามารถไปได้ลึกกว่านั้นเล็กน้อยขึ้นอยู่กับวุฒิภาวะทางจิตใจ แต่การก้าวไปไกลกว่าจุดนี้ต้องใช้ความเข้าใจในตรรกะที่เป็นทางการ

สำหรับการพิสูจน์ความซับซ้อนนั้นเป็นเรื่องยาก มันเป็นหนึ่งในสิ่งที่ต้องใช้ตรรกะอย่างเป็นทางการและพวกเขาจะต้องเข้าใจหลักการพื้นฐานของสัญกรณ์โอใหญ่ในครั้งแรก คุณอาจต้องการระงับส่วนนั้นในตอนแรก


ฉันไม่คิดว่าตัวอย่างของคุณไม่ดีเพราะคุณต้องเรียงลำดับคีย์ไม่ได้เป็นค่าและคุณสามารถรู้ได้ว่าอะไรอยู่ในตำแหน่งที่ 15 โดยการเรียงลำดับแล้ว
Thorbjørn Ravn Andersen

@ Thorbjørn: ใครพูดอะไรเกี่ยวกับคู่คีย์ / ค่า นี่คือการเรียงลำดับเลขจำนวนเต็มอย่างง่ายเพื่ออธิบายแนวคิดพื้นฐาน
Mason Wheeler

การคิดผ่านอัลกอริทึมที่คุณอธิบายไม่ใช่เรื่องด่วนเนื่องจากคุณไม่ได้ใช้องค์ประกอบเดือย
Thorbjørn Ravn Andersen

1
@ ThorbjørnRavnAndersen: แน่นอนเขาทำ; มันเป็นเพียงที่เขารู้ว่าองค์ประกอบใดที่มีเพื่อให้สามารถเลือกค่ามัธยฐาน
กราฟิลส์

@ ราฟาเอลและการกระจายของพวกเขา บัตรอาจมีมูลค่าและสีใด ๆ และมีสติกเกอร์ที่มีหมายเลขอยู่ระหว่าง 1 ถึง 20 ดังนั้นการอ้างอิงของฉันไปยังคีย์ / ดัชนีและไม่ใช่ค่า
Thorbjørn Ravn Andersen

2

แล้วเรื่องนี้ล่ะ

วิทยาการคอมพิวเตอร์ Unplugged - อัลกอริทึมการเรียงลำดับ

มันไม่ครอบคลุมคำถามทั้งหมดของคุณ แต่เป็นการเริ่มต้นที่ดี

แหล่งข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้มีการเชื่อมโยงที่นี่

พวกเขายังทำวิดีโอที่มีอยู่ที่อธิบายถึงขั้นตอนวิธีการเรียงลำดับ (รวม quicksort) ที่นี่ วิดีโอนี้ช่วยให้เข้าใจถึงความแตกต่างระหว่างอัลกอริทึมการเรียงลำดับที่แตกต่างกันสำหรับเด็กเล็ก


น่ากลัว! ค่อนข้างเข้าใจง่าย
Mayur Patil

1

ดูความน่ารักแบบกราฟิกของการสาธิตเล็ก ๆนี้

quicksort.


1
ฉันคิดว่ามันอาจจะเป็นนามธรรมสำหรับเด็ก ๆ
กราฟิลส์

3
เพื่อไม่ให้ตัวเองอับอาย แต่ฉันไม่เข้าใจกราฟิกนั้นจนกระทั่งในที่สุดฉันก็ได้รับการอธิบายอย่างรวดเร็วในชั้นเรียน
Christian Mann

มี +1 เพราะนี่คือสิ่งที่เกิดขึ้นครั้งแรกกับฉันเมื่อฉันอ่านคำถาม แต่แล้วฉันก็เป็นผู้เรียนรู้ด้วยสายตา
Joshua Drake

3
นี้เป็นจริงเป็นวิธีที่ผิดที่จะอธิบายวิธีการทำงาน quicksort หากคุณรู้จัก quicksort อยู่แล้วคุณสามารถยืนยันได้ว่าแอนิเมชันนี้เกี่ยวกับ quicksort หากคุณไม่รู้จัก quicksort มันจะไม่บอกอะไรเลยนอกจาก quicksort นั้นเป็นอัลกอริธึมการเรียงลำดับที่ค่อนข้างเร็วซึ่งใช้เวทย์มนตร์ คุณอาจกระตุ้นให้ผู้ชมเรียนรู้เกี่ยวกับ quicksort โดยการแสดงภาพเคลื่อนไหวนี้ แต่ไม่ได้อธิบายอะไรที่สำคัญเกี่ยวกับวิธีการทำงาน
Tsuyoshi Ito

อนิเมชั่นนั้นค่อนข้างดี แต่มันก็เป็นที่เข้าใจได้สำหรับผู้เริ่มต้นแม้แต่สำหรับนักศึกษาปริญญาตรีในโอกาสแรก
jonaprieto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.