ตัวอย่างของอัลกอริทึมที่คำสั่งต่ำมีอิทธิพลเหนือรันไทม์สำหรับการใช้งานจริงหรือไม่?


10

สัญกรณ์ Big-O ซ่อนปัจจัยที่คงที่ดังนั้นอัลกอริทึมตัวจึงไม่สามารถใช้ได้กับขนาดอินพุตที่เหมาะสมใด ๆ เนื่องจากสัมประสิทธิ์ของเทอมnนั้นมีขนาดใหญ่มากO(n)n

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

ขอบคุณ!


อัลกอริทึมที่ตั้งค่าตารางขนาดใหญ่เป็นอันดับแรกจากนั้นทำการค้นหาอย่างรวดเร็วในตารางสำหรับแต่ละรายการอินพุต หากตารางมีขนาดใหญ่พอจำนวนของรายการจะต้องมีจำนวนมหาศาลเพื่อชดเชยค่าใช้จ่ายในการสร้างตาราง เอ็นจิ้นการค้นหาเป็นตัวอย่างหนึ่งถ้าคือจำนวนข้อความค้นหา n
András Salamon

ฉันเคยได้ยินการเขียนโปรแกรมเชิงเส้นเป็นเช่นนี้ เริมเป็นเอกซ์โพเนนเชียล แต่เร็วกว่าอัลกอริธึมเชิงพหุนามในทางปฏิบัติ
jmite

1
ฉันไม่รู้อัลกอริธึมที่เหมาะสมกับความต้องการของคุณ แต่ฉันจะมองหาบางสิ่งที่มีเวลาทำงานเป็นเส้นตรงมากที่สุดเนื่องจากเกินกว่านั้นฉันจะสงสัยอย่างมากว่าคำที่เล็กกว่านี้จะเป็นผู้นำในการป้อนข้อมูลที่สมเหตุสมผลที่สุด แต่การผสาน k-way อาจเหมาะกับความต้องการของคุณเมื่อใช้เพื่อจัดเรียงข้อมูลขนาดใหญ่? ปัญหาที่เกิดขึ้นคือการลดการเข้าถึงหน่วยความจำรองให้น้อยที่สุดเนื่องจากค่าใช้จ่ายจำนวนมากเวลา - แม้ว่าฉันไม่แน่ใจว่าจะเป็นตัวอย่างที่เหมาะสมสำหรับสิ่งที่คุณต้องการแสดงให้เห็นและฉันไม่คิดว่ามันง่ายพอที่จะ เป็นตัวอย่าง
G. Bach

คำตอบ:


2

การเข้ารหัสเป็นตัวอย่างถ้ามีการเสื่อมสภาพ ตัวอย่างเช่นการแบ่งการเข้ารหัส AES คือ - สิ่งที่คุณต้องทำคือค้นหาคีย์ที่ถูกต้องในจำนวน จำกัด , 2 128หรือ2 192หรือ2 256หรือ2 256ขึ้นอยู่กับขนาดของคีย์ (สมมติว่ารู้จักธรรมดามากพอ กำหนดกุญแจอย่างไม่น่าสงสัย) อย่างไรก็ตามการดำเนินการ2 128 ครั้งจะใช้คอมพิวเตอร์ทั้งหมดในวันนี้ (พันล้านหรือราว ๆ นั้นแต่ละการทำงานประมาณหนึ่งพันล้านปฏิบัติการต่อวินาที) มากกว่าอายุการใช้งานของจักรวาล (ประมาณหนึ่งพันล้านล้านวินาที)O(1)2128219222562128


วิธีที่แตกต่างกันเล็กน้อยเพื่อแสดงให้เห็นว่าทำไม big-O ไม่ใช่ทุกสิ่งที่ต้องสังเกตว่าบางครั้งเราใช้อัลกอริทึมที่แตกต่างกันสำหรับขนาดอินพุตขนาดเล็ก ตัวอย่างเช่นใช้ quicksort ด้วยทางเลือกที่เหมาะสมของเดือย (ซึ่งเป็นธุรกิจที่หากิน!) มัน ) Quicksort ดำเนินการโดยแบ่งและพิชิต: ทุกอินสแตนซ์เกี่ยวข้องกับการเรียงลำดับของอาร์เรย์ขนาดเล็กจำนวนมาก สำหรับอาร์เรย์ขนาดเล็กวิธีกำลังสองเช่นการเรียงลำดับการแทรกทำได้ดีกว่า ดังนั้นเพื่อประสิทธิภาพที่ดีที่สุดการเรียงลำดับขนาดใหญ่อย่างรวดเร็วเกี่ยวข้องกับการเรียงลำดับการแทรกจำนวนมากสำหรับขนาดเล็กO(nLGn)


ฉันไม่คิดว่าการเข้ารหัสที่ละเมิดเป็นตัวอย่างที่เหมาะสมที่นี่ สิ่งหนึ่งคือการวิเคราะห์ปัญหาในการหาคีย์ที่ถูกต้อง asymptotically ที่เราจะต้องพิจารณารุ่นที่มีทฤษฎีของ Rijndael กับขนาดของคีย์ที่ไม่คงที่คือหมดที่สำคัญสำหรับคีย์ของขนาดnไม่เช่นนั้นเราก็อาจบอกได้ว่าอัลกอริทึมใด ๆ ที่ยุติการทำงานในO ( 1 )สำหรับอินพุตขนาดคงที่ nO(1)
G. Bach

@ G.Bach ประเด็นของตัวอย่างนี้คือมันเป็นไปไม่ได้ (ทฤษฎีความซับซ้อนใดที่เชื่อมโยงกับความซับซ้อนสูง) แม้ว่ามันจะเป็นเวลาคงที่ (ในแง่ของขนาดของไซเฟอร์เท็กซ์)
Gilles 'หยุดความชั่วร้าย'

2
ฉันไม่คิดว่าตัวอย่างแรกของคุณใช้งานได้ เนื่องจากมีเพียงตัวเลือกมากมายที่จะตรวจสอบอย่าง จำกัด รันไทม์ของอัลกอริทึมคือดังนั้นจึงไม่มีคำสั่งo ( 1 ) ต่ำที่บัญชีสำหรับการใช้งานจริงทั้งหมด O(1)โอ(1)
templatetypedef

1
@templatetypedef ทำลายการเข้ารหัสของข้อความที่เข้ารหัส AES-คือในแง่ของความยาวของข้อความ O(1)
Gilles 'หยุดความชั่วร้าย'

1

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

พิจารณาปัญหากราฟเช่น 3-COLORING หรือ HAM-CYCLE ปัญหาทั้งสองสามารถแสดงในตรรกะลำดับที่สอง monadic และดังนั้นจึงสามารถตัดสินใจได้ในเวลาเชิงเส้นของกราฟที่มี treewidth ล้อมรอบ นี่เป็นผลมาจาก Bruno Courcelleแต่อัลกอริทึมที่ได้นั้นยังห่างไกลจากการใช้งานจริง

อีกตัวอย่างคือผลลัพธ์ที่ลึกซึ้งโดย Lenstra โดยบอกว่าโปรแกรมจำนวนเต็มเชิงเส้น (ILP) ที่มีจำนวนคงที่ของตัวแปรสามารถแก้ไขได้ในเวลาเชิงเส้น โดยงานเพิ่มเติมที่ทำโดย Ravi Kannan เรามีว่าปัญหาความเป็นไปได้ในการเขียนโปรแกรมจำนวนเต็มสามารถแก้ไขได้ด้วยการดำเนินการทางคณิตศาสตร์ในจำนวนเต็มของบิตO ( p 2 p L )ขนาดโดยpคือจำนวน ของตัวแปร ILP และLคือจำนวนบิตในอินพุต สิ่งนี้ทำให้อัลกอริทึม FPT อีกครั้งซึ่งเป็นประโยชน์สำหรับอินสแตนซ์ขนาดเล็กมากเท่านั้นO(พี9พี/2)LO(พี2พีL)พีL


2
ทฤษฎีบทของ Courcelle ทำไม่ได้เนื่องจากค่าคงที่ขนาดใหญ่ในเทอมไม่ใช่เพราะเทอมo ( n ) บางอันมีอิทธิพลเหนืออินพุต "เล็ก" (ค่าคงที่เติบโตเป็นหอคอยสองเท่าที่มีความสูงขึ้นอยู่กับจำนวนการปฏิเสธซ้อนและการสลับปริมาณในสูตรลำดับแรก)O(n)โอ(n)
David Richerby

0

ค่อนข้างเกี่ยวข้องกับคำถามของคุณคืออัลกอริทึมที่ทราบกันดีว่ามีประสิทธิภาพที่ดีในทางทฤษฎี แต่ไม่ได้ใช้กับปัญหาจริงเนื่องจากการใช้งานไม่ได้กับอินสแตนซ์ขนาดเล็ก กล่าวอีกนัยหนึ่งเช่นเดียวกับที่คุณร้องขอ "ประสิทธิภาพที่โฆษณา" เป็นไปได้สำหรับอินพุตขนาดใหญ่ในทางทฤษฎีเท่านั้นซึ่งไม่เห็นในการใช้งานจริง บางครั้งสิ่งนี้สะท้อนให้เห็นในการประมาณการของ Big-Oh แต่บางครั้งก็ไม่เป็นเช่นนั้น ขั้นตอนวิธีการที่บางคนมีดี "ผลงาน" ทฤษฎี แต่มีความซับซ้อนและมีเหตุผล havent เคยถูกนำมาใช้โดยทุกคนและดังนั้นจึง "ประสิทธิภาพ" ในขนาดตัวอย่างการปฏิบัติที่ไม่ได้รู้จักกันแม้เช่นเดียวกับค่าสูงสุดของการไหลของปัญหา


แต่สิ่งเหล่านี้ไม่สามารถทำได้เนื่องจากคำสั่งซื้อที่ต่ำมีอิทธิพลเหนือหรือเพราะค่าคงที่สำหรับคำสั่งซื้อที่สูงนั้นไม่ดีหรือไม่?
David Richerby

อย่างใดอย่างหนึ่งหรือการรวมกันมันเป็นเรื่องยากที่จะแยกในแต่ละกรณี อย่างมีประสิทธิภาพ / ในทางปฏิบัติมันมีผลเช่นเดียวกัน
vzn

-1

นี่เป็นเรื่องตลก แต่มีด้านที่จริงจัง ...

O(nเข้าสู่ระบบn)O(n2)


1
ไม่แตกต่างกัน Quicksort มีประโยชน์ในทางปฏิบัติเพราะไม่มีคำศัพท์กำลังสองสำหรับอินพุตทั่วไปไม่ว่าขนาดจะใหญ่แค่ไหน ถ้าตัวเลือกของ pivot นั้นไม่ดีสำหรับเค้าโครงข้อมูล quicksort จะแสดงพฤติกรรมกำลังสองแม้กระทั่งสำหรับอินพุตขนาดเล็ก
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.