2013-01-03 14 views
5

हमारे पास एन संख्याओं की एक श्रृंखला है। सभी संख्याएं 1-के बीच हैं।एक सरणी में सबसे लगातार तीन गुना खोजें

समस्या यह है कि सबसे लगातार तीन गुना खोजने का सबसे अच्छा तरीका कैसे प्राप्त करें।

समस्या मेरे दृष्टिकोण है:

कहते हैं यदि इनपुट की तरह है {1, 2, 3, 4, 1, 2, 3, 4}

त्रिक की गिनती के लिए सबसे पहले खोज (1, 2, 3) सरणी के अंत तक सरणी में दूसरे तत्व से शुरू करें। अब हमारे पास गिनती होगी 1. अब {2, 3, 4) से शुरू करें और सरणी खोजें।

प्रत्येक तिगुना के लिए हम सरणी स्कैन करते हैं और गिनती पाते हैं। इस तरह हम एन -1 बार के लिए सरणी चलाते हैं।

इस तरह मेरा एल्गोरिदम एन * एन समय जटिलता के क्रम में चलता है।

इस समस्या के लिए कोई बेहतर तरीका है?

+2

'triplet' की आपकी परिभाषा क्या है - क्रम में किसी भी 3 संख्या, या केवल 3 लगातार पूर्णांक? '3,4,1' एक तिहाई है? –

+0

आपके द्वारा अपेक्षित अंतरिक्ष जटिलता क्या है? – jackalope

+0

क्या आप जानते हैं कि आपको 'ट्रिपलेट' की आवश्यकता है या क्या आप इसे खोजने के लिए अलगो का इरादा रखते हैं? – bonCodigo

उत्तर

4

आप इसे O(n * log n) में सबसे खराब स्थिति स्थान और समय जटिलता में कर सकते हैं: बस एक संतुलित बाइनरी खोज पेड़ में सभी ट्रिपल डालें और बाद में अधिकतम खोजें।

वैकल्पिक रूप से, आप O(n) अपेक्षित समय प्राप्त करने के लिए हैश तालिका का उपयोग कर सकते हैं (जो वास्तविक हद फ़ंक्शन चुनने पर वास्तविकता में खोज वृक्ष दृष्टिकोण से अधिक तेज़ है)।

2

क्या कोई मेमोरी सीमाएं हैं यानी क्या यह मेमोरी सीमाओं वाले डिवाइस पर चलती है?

यदि नहीं, तो शायद यह अच्छा समाधान हो सकता है: सरणी पर और प्रत्येक ट्रिपल बिल्ड और प्रस्तुति ऑब्जेक्ट (या सी # में लागू होने पर संरचना) के लिए पुनरावृत्ति करें जो एक कुंजी के रूप में मानचित्र में जाता है और एक मूल्य के रूप में ट्रिपल काउंटर होता है।

यदि आप उचित रूप से hash और equals फ़ंक्शन लागू करते हैं, तो आप "सबसे लोकप्रिय" ट्रिपल ढूंढ पाएंगे जहां संख्याएं आदेश महत्वपूर्ण हैं या नहीं। 1,2,3 != 2,1,3 या 1,2,3 == 2,1,3

पूरे सरणी दोहराने के बाद आप सबसे बड़ी मूल्य खोजने के लिए होता है और इसके प्रमुख अपने "सबसे लोकप्रिय" ट्रिपल होगा। उस दृष्टिकोण के साथ आप एक्स को सबसे लोकप्रिय ट्रिपल भी ढूंढ सकते हैं। इसके अलावा आप केवल एक बार सरणी स्कैन करेंगे और सभी ट्रिपल को एकत्र करेंगे (प्रत्येक ट्रिपल के लिए कोई अतिरिक्त स्कैनिंग नहीं)।

संबंधित मुद्दे