विभाजन के आधार पर एक रेखीय समय और निरंतर स्थान एल्गोरिथ्म भी है, जो अधिक लचीला हो सकता है यदि आप इसे इस समस्या के वेरिएंट पर लागू करने की कोशिश कर रहे हैं कि गणितीय दृष्टिकोण अच्छी तरह से काम नहीं करता है। इसके लिए अंतर्निहित सरणी को बदलने की आवश्यकता होती है और गणितीय दृष्टिकोण की तुलना में लगातार खराब कारक होते हैं। विशेष रूप से, मैं मानों की कुल संख्या के मामले में लागत का मानना है कि और डुप्लिकेट की संख्या d हैं हे ( एन लॉग घ ) और हे ( घ ) क्रमशः, हालांकि साबित यह कड़ाई से इस समय अधिक समय की तुलना में मेरे पास ले जाएगा ।ndO(nlogd)O(d)
कलन विधि
जोड़े की एक सूची के साथ शुरू करें, जहां पहली जोड़ी पूरे सरणी पर सीमा है, या यदि 1-अनुक्रमित है।[(1,n)]
सूची खाली होने तक निम्नलिखित चरणों को दोहराएं:
- सूची से किसी भी जोड़ी को निकालें और निकालें ।(i,j)
- न्यूनतम और अधिकतम, और अधिकतम , निरूपित उपप्रकार का पता लगाएं ।minmax
- यदि , सबर्रे में केवल समान तत्व होते हैं। एक को छोड़कर इसके तत्वों को ढालें और चरण 4 से 6 को छोड़ें।min=max
- यदि , तो सबर्रे में कोई डुप्लिकेट नहीं है। चरण 5 और 6 छोड़ें।max−min=j−i
- न्यूनतम + अधिकतम के आसपास के विभाजन का विभाजन , ऐसे कि कुछ सूचकांकk तक केतत्व विभाजक से छोटे हैं और उस सूचकांक से ऊपर के तत्व नहीं हैं।min+max2k
- सूची में जोड़ें और ( k + 1 , j ) ।(i,k)(k+1,j)
समय जटिलता का सरसरी विश्लेषण।
चरण 1 से 6 तक समय लेते हैं , क्योंकि न्यूनतम और अधिकतम और विभाजन को रैखिक समय में खोजा जा सकता है।O(j−i)
सूची में प्रत्येक जोड़ी या तो पहली जोड़ी है, ( 1 , n ) , या किसी जोड़ी का एक बच्चा है जिसके लिए संबंधित उपप्रकार में एक डुप्लिकेट तत्व है। ज्यादा से ज्यादा कर रहे हैं घ ⌈ लोग इन 2 n + 1 ⌉ ऐसे माता-पिता, प्रत्येक ट्रेवर्सल हिस्सों जिसमें सीमा एक नकली हो सकता है के बाद से, इसलिए वहाँ ज्यादा से ज्यादा कर रहे हैं 2 घ ⌈ लोग इन 2 n + 1 ⌉ कुल जब कोई साथ subarrays से अधिक जोड़े सहित डुप्लिकेट। किसी भी समय, सूची का आकार 2 डी से अधिक नहीं है(i,j)(1,n)d⌈log2n+1⌉2d⌈log2n+1⌉2d।
किसी एक डुप्लिकेट को खोजने के लिए काम पर विचार करें। इसमें एक क्रमिक रूप से घटने वाली सीमा से अधिक जोड़े का क्रम होता है, इसलिए कुल कार्य ज्यामितीय अनुक्रम या का योग होता है । यह एक स्पष्ट कोरोलरी बनाता है कि डी डुप्लिकेट के लिए कुल काम ओ ( एन डी ) होना चाहिए , जो एन में रैखिक है ।O(n)dO(nd)n
एक तंग बाउंड को खोजने के लिए, डुप्लिकेट को अधिकतम रूप से फैलाने के सबसे खराब स्थिति पर विचार करें। सहज रूप से, खोज में दो चरण होते हैं, एक जहां पूर्ण सरणी को हर बार उत्तरोत्तर छोटे भागों में ट्रेस किया जाता है, और एक वह भाग जहां n से छोटे होते हैं इसलिए केवल सरणी के कुछ हिस्सों को ट्रेस किया गया है। पहला चरण केवलडी डीलॉगकिया जा सकता है, इसलिएओ(एनलॉगडी)खर्च किया गया है, और दूसरे चरण मेंओ(एन)लागत है,क्योंकि खोजे जा रहे कुल क्षेत्र में फिर से तेजी से कमी आ रही है।ndlogdO(nlogd)O(n)