लॉगरिदमिक बनाम डबल लॉगरिदमिक समय जटिलता


9

वास्तविक दुनिया अनुप्रयोगों में एक ठोस लाभ का उपयोग करते समय है के बजाय एल्गोरिदम?O(log(log(n))O(log(n))

यह ऐसा मामला है जब एक उदाहरण के लिए वैन एम्ड बोस पेड़ों के बजाय अधिक पारंपरिक बाइनरी सर्च ट्री कार्यान्वयन के लिए उपयोग किया जाता है। लेकिन उदाहरण के लिए, अगर हम लेते हैं तो सबसे अच्छी स्थिति में डबल लॉगरिदमिक एल्गोरिथ्म एक कारक (लगभग) लॉगरिदमिक को बेहतर बनाता है । और सामान्य तौर पर कार्यान्वयन अधिक पेचीदा और जटिल है।n<1065

यह देखते हुए कि मैं व्यक्तिगत रूप से VEB- पेड़ों पर BST पसंद करता हूं, आपको क्या लगता है?

एक आसानी से प्रदर्शित कर सकता है कि:

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


मूल रूप से आपको इनपुट के छोटे मूल्य / आकार के लिए एल्गोरिथ्म में शामिल स्थिरांक को देखना चाहिए। आदर्श रूप से हम चाहेंगे कि वे छोटे हों।
सिंहसुमित

3
ध्यान दें कि VEB पेड़ों के बाद से सुधार का एक गुच्छा रहा है, RAM पर डेटा-संरचनाओं में खोज / रैंडमाइजेशन (निर्धारक) और बिना जटिलता को हटा दें। यादृच्छिकता के साथ। नियतात्मक छँटाई देखें समय और रैखिक स्थान। हान द्वारा, और अपेक्षित समय और रैखिक स्थान। हान और थोरुप द्वारा। O(log log n)O(log log n)O(n log log n)O(log log n)
एटी

वास्तविक दुनिया में, 5 का एक कारक बहुत महत्वपूर्ण है, और वस्तुओं की संख्या अक्सर 10 ^ 9 या 10 ^ 12 हो सकती है।
RBarryYoung

जवाबों:


10

यह मत भूलो कि अभी भी तेजी से बढ़ता है (in ) तुलना में तेजी से !lognlog(n)log(logn)

वास्तव में, यदि आप और के भागफल को देखते हैं, तो देखने के लिए बहुत प्रभावशाली नहीं है:log(n)log(log(n))

लॉग (एन) / लॉग (लॉग (एन))
[ स्रोत ]

लेकिन फिर भी, आपको तक के आकारों के लिए पांच से छह का एक कारक मिलता है । ध्यान दें कि बड़े आकार व्यवहार में असामान्य नहीं हैं, और उस कारक द्वारा एक गति बहुत बढ़िया है ! यह दोपहर के भोजन के बाद या केवल कल के परिणाम के बीच अंतर कर सकता है। ध्यान रखें कि स्पीडअप का हिस्सा पेड़ के उच्च स्थिरांक द्वारा खाया जा सकता है; आपको एक वास्तविक चित्र प्राप्त करने के लिए वास्तविक रनटाइम स्थिरांक को साथ और प्लॉट (या विश्लेषण) करना होगा ।100000clog(n)dlog(log(n))c,d

इसके अतिरिक्त, डेव का उल्लेख क्या महत्वपूर्ण है: यदि ऑपरेशन को इसी तरह से अंजाम दिया जाता है, तो कहें, रैखिक रूप से अक्सर, निरंतर स्पीडअप रैखिक स्पीडअप बन जाते हैं, अर्थात आप अपने पूरे एल्गोरिथ्म के अग्रणी निरंतर को कम कर सकते हैं! जैसा कि मैंने ऊपर कहा, वह कमाल है। यदि आप ऑपरेशन को बार चलाते हैं तो बस क्या होता है:n

n * लॉग (एन) / (एन * लॉग (लॉग (एन)))
[ स्रोत ]

अब अगर वह मुसीबत के लायक नहीं है तो मुझे नहीं पता कि क्या।


6

कोई सोच सकता है कि वास्तव में जटिलता में अंतर इतना महत्वपूर्ण नहीं है, और वास्तविक रन-टाइम अधिक महत्वपूर्ण है। लेकिन अगर एल्गोरिथ्म दूसरे एल्गोरिथम के मूल में है, तो यह अंतर महत्वपूर्ण हो सकता है।

विशुद्ध रूप से सैद्धांतिक उद्देश्य से, पाठ्यक्रम का अंतर मायने रखता है, खासकर अगर एल्गोरिथ्म दूसरे का एक हिस्सा है। यह एक अलग जटिलता वर्ग में बड़ा एल्गोरिथ्म डाल सकता है।


6

मैं वास्तव में एक बार खुद वैन वैन-बोस के पेड़ को बेंचमार्क कर चुका हूं। मैंने इसकी तुलना एए ट्री, हैशमैप और बिट ऐरे से की है।

परीक्षण sizeअंतराल में यादृच्छिक संख्याओं के साथ आवेषण करते हैं [0, bound], फिर sizeखोज करते हैं, फिर sizeहटाते हैं और फिर sizeखोजते हैं। हटाए गए यादृच्छिक संख्याओं पर भी किए जाते हैं, इसलिए आपको पहले यह पता लगाना होगा कि क्या वे संरचना में हैं।

यहाँ परिणाम ( size= 2000000, bound= 10000000) सेकंड में हैं:

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

जैसा कि आप देख सकते हैं, वैन एमडे-बोस पेड़ लगभग दो बार हैश मानचित्रों के समान धीमा हैं, दस बार बिट सरणियों के रूप में धीमी गति से, और बाइनरी खोज पेड़ों के रूप में 5 गुना तेज़ हैं।

बेशक उपरोक्त को एक अस्वीकरण की आवश्यकता है: परीक्षण कृत्रिम हैं, आप संभवतः कोड में सुधार कर सकते हैं या एक संकलक के साथ एक अलग भाषा का उपयोग कर सकते हैं, जिसका आउटपुट तेज है, और इसी तरह और आगे।

यह अस्वीकरण उस कारण के दिल में है जो हम एल्गोरिदम डिजाइन में एसिम्प्टोटिक विश्लेषण का उपयोग करते हैं: क्योंकि आपको पता नहीं है कि स्थिरांक क्या हैं और जैसे ही पर्यावरणीय कारकों के आधार पर स्थिरांक बदल सकते हैं, सबसे अच्छा हम जो कर सकते हैं वह एक स्पर्शोन्मुखी विश्लेषण है।

अब, उपर्युक्त उदाहरण में बनाम : के मामले में, मेरे वैन एमड-बोस पेड़ में तत्व सम्‍मिलित हैं। , और , जो कि एक कारक 6 सुधार है, जो व्यवहार में थोड़ा सा है। इसके अतिरिक्त, वैन एमडे-बोस पेड़ों में अच्छे निरंतर कारक हैं (यह सभी इस छोटे से अंतर के लिए व्यवहार में निरंतर कारकों के बारे में है) क्योंकि उन्हें खुद को संतुलित करने की आवश्यकता नहीं है।lognloglogn232log232=32log32=5


हो सकता है कि आर (या समतुल्य) में कूदें और कुछ सुंदर रेखांकन (जैसे @ राफेल ने किया) का निर्माण करें।
डेव क्लार्क

1
यदि आप इन एल्गोरिदम को धारणाओं के और से संबंधित करते हैं तो यह आपके उत्तर को बेहतर बना देगाlognloglogn
डेव क्लार्क

@DaveClarke: सुझाव के लिए धन्यवाद। दुर्भाग्य से, मैं सुंदर चित्रों का निर्माण करने में बहुत बुरा हूं - मुझे लगता है कि मेरे संपादन ने मेरे परिणामों की पठनीयता में सुधार किया।
एलेक्स दस ब्रिंक

एक उचित तस्वीर के लिए पर्याप्त डेटा नहीं है। कोई बात नहीं .... लेकिन अच्छी तस्वीरें बनाना सीखना एक आसान कौशल है।
डेव क्लार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.