मुझे बताया गया है कि कोड:जावा में, एक स्ट्रिंग x के लिए, s.length() की रनटाइम लागत क्या है? क्या यह ओ (1) या ओ (एन) है?
for (int i = 0; i < x.length(); i++) {
// blah
}
वास्तव में x (n^2) x.length()
पर बार-बार कॉल की वजह से है। इसके बजाय मुझे इसका उपयोग करना चाहिए:
int l = x.length();
for (int i = 0; i < l; i++) {
// blah
}
क्या यह सच है? स्ट्रिंग लंबाई स्ट्रिंग क्लास के एक निजी पूर्णांक विशेषता के रूप में संग्रहीत है? या String.length()
वास्तव में इसकी लंबाई निर्धारित करने के लिए पूरी स्ट्रिंग पर चलता है?
स्ट्रिंग की लंबाई की गणना करने के बावजूद ओ (एन) था, कुल जटिलता अभी भी ओ (एन^2) नहीं होगी। लंबाई की गणना एक बार की जाती है और लूप के लिए सीमा मान के रूप में उपयोग की जाती है, इसकी गणना प्रत्येक पुनरावृत्ति पर नहीं की जाती है। –
जहां तक मुझे पता है, सीमा मान कैश नहीं किए जाते हैं। अगर लूप में सीमा को संशोधित किया गया तो क्या होगा? –
सीमा हर समय गणना की जाती है। याद रखें, लूप की जांच सिर्फ मनमानी अभिव्यक्ति है। कंपाइलर वास्तव में परवाह नहीं करता है कि वहां क्या है, और धारणाएं नहीं बना सकती हैं। आप आसानी से एक विधि बुला सकते हैं जो हर बार कुछ अलग करता है। – Herms