मुझे यह समस्या मिली "किसी दिए गए सरणी में दो सबसे बड़ी संख्याओं के योग को वापस करने के लिए इस विधि को लागू करें।"एल्गोरिदम जटिलता
मैं इस तरह से इसका समाधान नहीं:
public static int sumOfTwoLargestElements(int[] a) {
int firstLargest = largest(a, 0, a.length-1);
int firstLarge = a[firstLargest];
a[firstLargest] = -1;
int secondLargest = largest(a, 0, a.length-1);
return firstLarge + a[secondLargest];
}
private static int largest(int s[], int start , int end){
if (end - start == 0){
return end;
}
int a = largest(s, start, start + (end-start)/2) ;
int b = largest(s, start + (end-start)/2+1 , end);
if(s[a] > s[b]) {
return a;
}else {
return b;
}
}
स्पष्टीकरण: मैं एक विधि 'largeset' लागू किया। यह विधि किसी दिए गए सरणी में सबसे बड़ी संख्या प्राप्त करने के लिए ज़िम्मेदार है।
मैं उसी सरणी में विधि टॉव टाइम्स को कॉल करता हूं। पहली कॉल को पहली सबसे बड़ी संख्या मिल जाएगी। मैंने इसे एक तरफ परिवर्तनीय रखा है और मैं इसे '-1' संख्या से सरणी में बदल देता हूं। फिर, मैं दूसरी बार सबसे बड़ा medhod बुलाओ।
कोई मुझे बता सकता है कि इस अलगो की जटिलता क्या है? कृपया
आप पहले पास में दोनों संख्या खोजने के लिए और दूसरा पास छोड़ कर सकते हैं। यह जटिलता को नहीं बदलेगा लेकिन यह तेजी से चलेगा। उपरोक्त टिप्पणी के लिए :-) – assafmo
+1। इसके अलावा यदि यह संख्याओं की एक सूची है, तो इसे हल करने के कई अन्य तरीके हैं ... यदि आप नगण्य अतिरिक्त स्थान और ओ (एन) समय जटिलता के साथ गिनती आदि जैसे तंत्र का उपयोग करते हैं ... – dharam
असली उपाय जटिलता की इस कोड के भावी पाठकों की बात है, जब वे यह काम करते हैं कि यह कैसे काम करता है, जब एक बहुत ही सरल एल्गोरिदम नौकरी करेगा। रिकर्सन के लिए कोई स्पष्ट लाभ नहीं है, या सेट के माध्यम से दो गुजरने की आवश्यकता क्यों है।और एल्गोरिदम मूल रूप से टूटा हुआ है (गलत परिणाम देता है) जब सरणी में दो सबसे बड़े पूर्णांक -1 से कम होते हैं। Accckkk! – spencer7593