ความซับซ้อนของเวลาลอการิทึมเทียบกับลอการิทึม


9

ในการใช้งานจริงจะมีประโยชน์อย่างชัดเจนเมื่อใช้งาน O(log(log(n)) แทน O(log(n)) อัลกอริทึม?

นี่เป็นกรณีที่เมื่อมีการใช้งานหนึ่งต้นสำหรับต้นไม้ Van Emde Boas แทนที่จะเป็นการใช้งานแบบต้นไม้ค้นหาแบบทวิภาค แต่ตัวอย่างเช่นถ้าเราใช้n<106 ในกรณีที่ดีที่สุดอัลกอริธึมลอการิทึมสองครั้งจะมีประสิทธิภาพเหนือกว่าลอการิทึมหนึ่งโดย (โดยประมาณ) ปัจจัยของ 5. และโดยทั่วไปแล้วการใช้งานนั้นยุ่งยากและซับซ้อนมากขึ้น

เนื่องจากฉันชอบ BST ส่วนตัวมากกว่าต้นไม้ VEB คุณคิดอย่างไร?

หนึ่งสามารถแสดงให้เห็นว่า:

n<106. lognlog(log(n))<5.26146


โดยทั่วไปคุณควรดูค่าคงที่ที่เกี่ยวข้องในอัลกอริทึมเพื่อหาค่า / ขนาดของอินพุตที่น้อยลง เป็นการดีที่เราต้องการให้พวกเขามีขนาดเล็ก
singhsumit

3
โปรดทราบว่ามีการปรับปรุงหลายอย่างตั้งแต่แผนผัง VEB ซึ่งมีโครงสร้างข้อมูลบน RAM พร้อมการค้นหา / แทรก / ลบที่ซับซ้อน O(log log n) ไม่มีการสุ่ม (กำหนดขึ้น) และ O(log log n)ด้วยการสุ่ม ดูการเรียงลำดับที่กำหนดไว้O(n log log n)เวลาและอวกาศเชิงเส้น โดยฮันและO(log log n)เวลาที่คาดหวังและพื้นที่เชิงเส้น โดย Han และ Thorup
AT

ในโลกแห่งความเป็นจริงปัจจัย 5 อย่างมีนัยสำคัญสวยและจำนวนรายการมักจะเป็น 10 ^ 9 หรือแม้กระทั่ง 10 ^ 12
RBarryYoung

คำตอบ:


10

อย่าลืมเรื่องนั้น logn ยังคงเพิ่มขึ้นแบบทวีคูณ (ใน log(n)) เร็วกว่า log(logn)!

แน่นอนถ้าคุณดูความฉลาดของ log(n) และ log(log(n))ไม่มีอะไรน่าประทับใจที่จะเห็น:

เข้าสู่ระบบ (n) / บันทึก (เข้าสู่ระบบ (n))
[ แหล่งที่มา ]

แต่ถึงกระนั้นคุณจะได้รับปัจจัยห้าถึงหกสำหรับขนาดที่มากถึง 100000. โปรดทราบว่าในทางปฏิบัติขนาดที่ใหญ่กว่าไม่ใช่เรื่องแปลกและการเร่งความเร็วโดยปัจจัยนั้นยอดเยี่ยมมาก ! มันอาจสร้างความแตกต่างระหว่างการให้ผลลัพธ์หลังอาหารกลางวันหรือพรุ่งนี้เท่านั้น ระวังว่าส่วนของการเร่งความเร็วอาจถูกกินโดยค่าคงที่ที่สูงขึ้นของการใช้ต้นไม้ คุณจะต้องพล็อต (หรือวิเคราะห์)clog(n) และ dlog(log(n)) กับ c,d ค่าคงที่รันไทม์จริงเพื่อให้ได้ภาพที่แท้จริง

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

n * บันทึก (n) / (n * บันทึก (เข้าสู่ระบบ (n)))
[ แหล่งที่มา ]

ทีนี้ถ้านั่นไม่คุ้มกับปัญหาที่ฉันไม่รู้


6

ใคร ๆ ก็นึกได้ว่าความแตกต่างของความซับซ้อนนั้นไม่สำคัญมากนักและเวลาทำงานจริงนั้นสำคัญกว่า แต่ถ้าอัลกอริทึมเป็นแกนหลักของอัลกอริทึมอื่นความแตกต่างนี้อาจมีความสำคัญ

จากวัตถุประสงค์ทางทฤษฎีล้วนๆความแตกต่างของหลักสูตรก็สำคัญโดยเฉพาะอย่างยิ่งหากอัลกอริทึมเป็นส่วนหนึ่งของอีกสิ่งหนึ่ง มันอาจทำให้อัลกอริทึมที่ใหญ่กว่าในระดับความซับซ้อนที่แตกต่าง


6

จริง ๆ แล้วฉันเคยเปรียบเทียบกับต้นแวนเอมัส - โบอาสด้วยตัวเองครั้งเดียว ฉันเปรียบเทียบกับ AA Tree, hashmap และ bit array

การทดสอบsizeจะทำการแทรกด้วยตัวเลขสุ่มในช่วงเวลา[0, bound]จากนั้นsizeทำการค้นหาจากนั้นทำการsizeลบแล้วsizeทำการค้นหาอีกครั้ง การลบจะทำกับตัวเลขสุ่มเช่นกันดังนั้นคุณต้องคิดก่อนว่ามันอยู่ในโครงสร้างหรือไม่

นี่คือผลลัพธ์ ( size= 2000000, bound= 10,000000) ในไม่กี่วินาที:

AATreeLookup - O(n log n)
Inserting... 3.3652452
Searching... 5.2280724
Deleting...  7.3457427
Searching... 9.1462039
HashLookup - O(n) expected
Inserting... 0.3369505
Searching... 0.6223035
Deleting...  0.9062163
Searching... 1.1718223
VanEmdeBoasTree - O(n log log n)
Inserting... 0.7007531
Searching... 1.1775800
Deleting...  1.7257065
Searching... 2.2147703
ArrayLookup - O(n)
Inserting... 0.0681897
Searching... 0.1720300
Deleting...  0.2387776
Searching... 0.3413800

อย่างที่คุณเห็นต้นไม้ Van Emde-Boas นั้นช้ากว่าแผนที่แฮชสองเท่าช้ากว่าอาเรย์บิตสิบเท่าและเร็วกว่าต้นไม้ค้นหาแบบทวิภาค 5 เท่า

แน่นอนว่าข้างต้นจำเป็นต้องมีข้อจำกัดความรับผิดชอบ: การทดสอบนั้นเป็นของปลอมคุณสามารถปรับปรุงรหัสหรือใช้ภาษาอื่นกับคอมไพเลอร์ที่มีเอาต์พุตเร็วกว่าและอื่น ๆ เป็นต้น

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

ตอนนี้ในกรณีของ logn กับ loglogn: ในตัวอย่างด้านบนต้น van Emde-Boas ของฉันสามารถเก็บได้ 232 องค์ประกอบ log232=32และ log32=5ซึ่งเป็นการปรับปรุงตัวประกอบ 6 ซึ่งค่อนข้างในทางปฏิบัติ นอกจากนี้ต้นฟาน Emde-Boas ยังมีปัจจัยคงที่ที่ดี (มันเป็นเรื่องของปัจจัยคงที่ในทางปฏิบัติสำหรับความแตกต่างเล็ก ๆ นี้) เนื่องจากพวกเขาไม่จำเป็นต้องสร้างความสมดุลให้ตัวเอง


อาจข้ามไปที่ R (หรือเทียบเท่า) และสร้างกราฟสวย ๆ (เช่น @Raphael)
Dave Clarke

1
มันจะปรับปรุงคำตอบของคุณหากคุณเกี่ยวข้องกับอัลกอริธึมเหล่านี้กับแนวคิด logn และ loglogn
Dave Clarke

@DaveClarke: ขอบคุณสำหรับคำแนะนำ น่าเสียดายที่ฉันค่อนข้างแย่ในการสร้างภาพสวย - ฉันคิดว่าการแก้ไขของฉันปรับปรุงการอ่านผลลัพธ์ได้ดี
อเล็กซ์สิบบริ้ง

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