มีอะไรที่ยากกว่า: การสับสำรับที่เรียงแล้วหรือการเรียงสับแบบสับ


18

คุณมีอาร์เรย์ขององค์ประกอบที่แตกต่างกันคุณสามารถเข้าถึงตัวเปรียบเทียบ (ฟังก์ชันกล่องดำที่รับสององค์ประกอบaและbและคืนค่าจริง iff a < b ) และแหล่งบิตสุ่มอย่างแท้จริง (ฟังก์ชันกล่องดำไม่มีอาร์กิวเมนต์และคืนบิตสุ่มแบบสุ่มอย่างสม่ำเสมอ) พิจารณางานสองอย่างต่อไปนี้:naba<b

  1. อาร์เรย์ถูกเรียงในขณะนี้ ผลิตการเรียงสับเปลี่ยนที่เลือกแบบสุ่ม (หรือโดยประมาณอย่างสม่ำเสมอ)
  2. อาร์เรย์ประกอบด้วยการเรียงสับเปลี่ยนที่เลือกอย่างสม่ำเสมอโดยการสุ่มโดยธรรมชาติ สร้างอาร์เรย์ที่เรียงลำดับ

คำถามของฉันคือ

งานใดที่ต้องใช้พลังงานมากขึ้น

ฉันไม่สามารถนิยามคำถามได้อย่างแม่นยำมากขึ้นเพราะฉันไม่รู้เกี่ยวกับการเชื่อมต่อระหว่างทฤษฎีสารสนเทศอุณหพลศาสตร์หรืออะไรก็ตามที่จำเป็นในการตอบคำถามนี้ อย่างไรก็ตามฉันคิดว่าคำถามสามารถสร้างได้อย่างชัดเจน (และหวังว่าจะมีคนช่วยฉันด้วยคำตอบนี้!)

ตอนนี้อัลกอริทึมปรีชาของฉันคือพวกมันเท่ากัน ขอให้สังเกตว่าการเรียงลำดับทั้งหมดเป็นการสลับกลับกันและในทางกลับกัน การเรียงลำดับต้องใช้รถในขณะที่สับเพราะมันหยิบเปลี่ยนแปลงสุ่มจากn ! ตัวเลือกต้องใช้log n ! n log nบิตแบบสุ่ม ทั้งการสับและการเรียงต้องใช้n swapslogn!nlognn!logn!nlognn

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

(คำถามไม่ได้รับคำตอบใด ๆ เกี่ยวกับmath.seดังนั้นฉันจะโพสต์ใหม่ที่นี่หวังว่าไม่เป็นไร)


ฉันไม่ได้คิดเรื่องนี้ตลอดเลย หากเราเริ่มต้นด้วยอาร์เรย์ที่เรียงลำดับแล้วใช้การเรียงแบบผสาน แต่แทนที่จะเปรียบเทียบเราใช้บิตสุ่มเพื่อทำการผสาน (ดังนั้นแทนที่จะส่งกลับค่าจริงถ้า iff เราคืนค่าจริง iff บิตสุ่มคือ1 ) กรณีฐานที่เรามีสองขนาดของอาร์เรย์ขนาดหนึ่งผลิตสองอาร์เรย์ที่เป็นไปได้ของสองขนาดที่มีความน่าจะเป็นเหมือนกัน ฉันไม่ได้ไปไกลกว่านั้น a<b1
ลุคแมททีสัน

2
ฉันคิดว่าในการที่จะตอบคำถามนี้คุณต้องกำหนดต้นทุนการดำเนินการก่อน การอ่านข้อมูลเขียนข้อมูลและสร้าง / รับหมายเลขสุ่มมีค่าใช้จ่ายเท่าไหร่
mitchus

@mitchus: ส่วนใหญ่ฉันอยากรู้เกี่ยวกับข้อ จำกัด ทางกายภาพถ้าเราคิดว่าคอมพิวเตอร์ "มีประสิทธิภาพสูงสุด" ความเข้าใจคร่าวๆของฉันคือมีขอบเขตพลังงานทางกายภาพต่ำกว่าปริมาณของพลังงานที่ต้องใช้ในการ "ลบ" ข้อมูลสักหน่อยในขณะที่การดำเนินการอื่น ๆ ต้องการพลังงานน้อยกว่า ดังนั้นฉันจึงสงสัยว่าสัญชาตญาณนี้ถูกต้องและเป็นรูปธรรมเพียงพอที่จะตอบคำถามได้หรือไม่
usul

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

2
@ Patrick87 แต่น่าเสียดายที่รูปแบบพลังงานสม่ำเสมออยู่ไกลเกินกว่าความจริงที่จะใช้ ดูการประเมินอัลกอริทึมตามการใช้พลังงานของพวกเขาโดย Fudeus née Bayer และ Nebel (2009)
ราฟาเอล

คำตอบ:


6

ตามหลักการของ Landauer ถ้าคุณต้องการใช้การสุ่มเรียงสับเปลี่ยนของปุ่มปุ่มเรียงลำดับและไม่เก็บบิตใด ๆ ในคอมพิวเตอร์ซึ่งแสดงให้เห็นว่าการเรียงสับเปลี่ยนแบบสุ่มคืออะไรคุณต้องลบl o g n ! n บันทึก2 nบิต นี้จะใช้เวลา( n LN n ) k Tพลังงาน ในทางกลับกันการคำนวณที่ใช้อาร์เรย์ที่เรียงลำดับแล้วและบิตสุ่มn log 2 nไปยังอาร์เรย์แบบสุ่มนั้นสามารถย้อนกลับได้และทำให้พลังงานที่ใช้สามารถทำให้มีขนาดเล็กได้ตามอำเภอใจnlogn!nlog2n(nlnn)kTnlog2n

โปรดทราบว่าสิ่งเหล่านี้เป็นเพียงขอบเขตที่ต่ำกว่าทางทฤษฎี พลังงานที่กระบวนการเหล่านี้ใช้กับคอมพิวเตอร์ดิจิตอลในปัจจุบันนั้นไม่มีความเกี่ยวข้องกับการวิเคราะห์ข้างต้น


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

(nlnn)kT

3

ทั้ง วงจรใด ๆ ที่สามารถทำย้อนกลับได้โดยการติดตามของการป้อนข้อมูลและการกระจายพลังงานของการคำนวณพลิกกลับสามารถทำขนาดเล็กโดยพลการ


แต่การทำให้ย้อนกลับได้อาจทำให้ไม่มีประสิทธิภาพ ความสัมพันธ์ระหว่างอัลกอริธึมที่เหมาะสมที่สุดคืออะไร BTW ฉันไม่คิดว่าพวกเขาจะเปรียบเทียบ การสับแบบโดยเนื้อแท้ต้องใช้การสุ่ม การเรียงลำดับอาจกำหนดได้ การเรียงลำดับ "ย้อนกลับ" จะสลับในลักษณะที่กำหนดไว้
Ran G.

1
คุณหมายถึงเวลาพื้นที่หรือการรวมกันของสองอย่างโดย "มีประสิทธิภาพ" หรือไม่ ทำให้พลิกกลับคำนวณไม่จำเป็นต้องเพิ่มความซับซ้อนเวลา asymptotic และมีอยู่รุ่นพลิกกลับของทุกการคำนวณที่ใช้พื้นที่ไม่มากไปกว่าเดิม[Vitányi05]
rphv

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