कोड का यह टुकड़ा कोडिंग साक्षात्कार पुस्तक को क्रैकिंग से है।इस स्ट्रिंग मैनिपुलेशन कोड की स्पेस जटिलता क्या है?
public static boolean isUniqueChars2(String str) {
boolean[] char_set = new boolean[256];
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i);
if (char_set[val]) return false;
char_set[val] = true;
}
return true;
}
और लेखक कहा गया है कि,
समय जटिलता हे (एन), जहां n स्ट्रिंग की लंबाई है, और अंतरिक्ष जटिलता हे (एन) है।
मैं समझता हूँ कि समय जटिलता हे किया जा रहा है (एन) लेकिन मुझे समझ नहीं आता कि कैसे अंतरिक्ष जटिलता हे हो सकता है (एन)
मेरे सोच: char_set आकार 256 की एक सरणी कोई बात नहीं क्या रहेगा इनपुट (str) आकार है। भले ही "str" की लंबाई 100,000 है, char_set अभी भी एक 256 तत्व सरणी है। तो मैंने सोचा, चूंकि इस फ़ंक्शन के लिए मेमोरी आवश्यकता इनपुट के आकार के साथ नहीं बदलती है और निरंतर 256 रहती है, इसलिए अंतरिक्ष जटिलता निरंतर है, यानी, ओ (1)।
किसी को, व्याख्या कर सकते हैं अगर मैं गलत हूँ (और, क्यों?)
बहुत बहुत शुक्रिया।
मुझे लगता है कि आप सही हैं, लेकिन ऑटोर ने कहा कि मूल str self ocupy O (n) (या आप मूल्य से प्रतिलिपि प्राप्त कर रहे हैं?)। – qPCR4vir
हम्म ... दिलचस्प है। मैंने सोचा कि एसिम्प्टोटिक जटिलताओं को प्राप्त करते समय हम आम तौर पर अनदेखा करते हैं कि इनपुट कैसे/कहाँ/कब पढ़ा जाता है? और बस विधि के अंदर क्या हो रहा है (इनपुट के आकार को ध्यान में रखते हुए, जो एन है) पर ध्यान केंद्रित करें – anakkala
मैं लेखक की तर्क देखना चाहता हूं। एल्गोरिदम द्वारा उपयोग की जाने वाली जगह स्थिर है। जब आप अंतरिक्ष जटिलता का विश्लेषण करते हैं, तो आप सही होते हैं, हम एल्गोरिदम में इनपुट को अनदेखा करते हुए, प्रक्रिया द्वारा आवश्यक * अतिरिक्त * स्थान की मात्रा के बारे में बात कर रहे हैं। –