2013-03-31 5 views
12

उदाहरण के लिए स्ट्रिंग ए = "एबीसीडी" तो उत्तर {ए, एबी, एबीसी, एबीसीडी, बी, बीसी, बीसीडी, सी, सीडी, डी} होना चाहिए (मुझे नहीं पता कि यह क्या है सब-स्ट्रिंग नहीं कहा जाता है या लेकिन मैं तो यह सोचते हैं रहा हूँ ...)सबसे तेज़ तरीके से सभी संभावित सबस्ट्रिंग

सब-स्ट्रिंग मैं का इस्तेमाल किया है विधि

for (int i = 0; i < A.length(); i++) { 
     for (int j = i+1; j <= A.length(); j++) { 
      System.out.println(A.substring(i,j)); 
     } 
    } 

निम्नलिखित जानने के लिए लेकिन मेरी समझ के अनुसार यह करने के लिए एन^2 हम कर सकते हैं चला जाता है यह तेज़ी से मैंने गंभीर सवाल उठाया और प्रत्यय पेड़ http://allisons.org/ll/AlgDS/Tree/Suffix/ के लिए लिंक था लेकिन यह मेरी समस्या को हल करने के लिए प्रतीत नहीं होता .... आउटपुट जो मुझे प्रत्यय पेड़ से मिलता है {1: abcd 2: बीसीडी 3: सीडी 4: डी} क्या कोई भी ऐसा करने के लिए सबसे तेज़ तरीका खोजने में मेरी सहायता कर सकता है? रैखिक समय की तरह कुछ? अग्रिम धन्यवाद .....

+0

आप संभवतः ओ (एन^2) से तेज़ संभव नहीं कर सकते हैं ताकि प्रत्येक संभावित सबस्ट्रिंग के प्रारंभिक और समापन बिंदु भी सूचीबद्ध हो सकें, क्योंकि ओ (एन^2) ऐसे सबस्ट्रिंग्स हैं! यदि आप प्रत्येक सबस्ट्रिंग को पूर्ण रूप से प्रिंट करना चाहते हैं (जैसा कि आप वर्तमान में कर रहे हैं), तो समय जटिलता ओ (एन^3) तक जाती है क्योंकि प्रत्येक सबस्ट्रिंग को मुद्रित करने के लिए समग्र स्ट्रिंग लंबाई के लिए आनुपातिक समय लगता है। –

+0

यह भी ध्यान दें कि खाली स्ट्रिंग एक मान्य सबस्ट्रिंग भी है। – Philip

+2

यदि आप सबस्ट्रिंग्स के सेट पर कोई क्वेरी चलाने जा रहे हैं तो आप इसे केवल तेज़ी से बना सकते हैं जो उन सभी को "स्पर्श" नहीं करता है। उन्हें प्रिंट करना उन सभी को छूता है। अगर आप पूछना चाहते हैं, तो कहें, "कम से कम दो बार दिखाई देने वाली सबसे लंबी सबस्ट्रिंग क्या है" या "के वर्णों से अधिक की कौन सी सबस्ट्रिंग अक्सर होती है", तो आप सभी सबस्ट्रिंग्स (प्रत्यय पेड़ के साथ) को समझाए बिना ऐसा कर सकते हैं। – harold

उत्तर

19

आप O(N^2) समय से बेहतर O(N^2) तारों को नहीं बना सकते हैं। यह एक गणितीय असंभवता है। एक स्ट्रिंग बनाने के बावजूद भी एक निर्देश ले लिया, यह अभी भी O(N^2) गणना है।

मुझे नहीं लगता कि आपके कोड को किसी भी महत्वपूर्ण तरीके से बेहतर किया जा सकता है।


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

+0

अच्छी तरह से समझाया गया है, उम्मीद है कि तर्क यहां पर कब्जा कर लिया गया है । – kabuto178

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