इस लेख में, हम जावा में स्टैक से डुप्लिकेट तत्वों को हटाने के लिए दो तरीकों का पता लगाएंगे। हम एक सीधे दृष्टिकोण की तुलना नेस्टेड लूप्स और हैशसेट का उपयोग करके एक अधिक कुशल विधि से करेंगे। लक्ष्य यह प्रदर्शित करना है कि डुप्लिकेट निष्कासन को कैसे अनुकूलित किया जाए और प्रत्येक दृष्टिकोण के प्रदर्शन का मूल्यांकन किया जाए।
स्टैक से डुप्लिकेट तत्व को हटाने के लिए एक जावा प्रोग्राम लिखें।
इनपुट
Stackdata = initData(10L);
आउटपुट
Unique elements using Naive Approach: [1, 4, 3, 2, 8, 7, 5] Time spent for Naive Approach: 18200 nanoseconds Unique elements using Optimized Approach: [1, 4, 3, 2, 8, 7, 5] Time spent for Optimized Approach: 34800 nanoseconds
किसी दिए गए स्टैक से डुप्लिकेट हटाने के लिए, हमारे पास 2 दृष्टिकोण हैं -
नीचे बताया गया है कि जावा प्रोग्राम पहले एक यादृच्छिक स्टैक बनाता है और फिर आगे उपयोग के लिए इसका एक डुप्लिकेट बनाता है -
private static Stack initData(Long size) { Stack stack = new Stack (); Random random = new Random(); int bound = (int) Math.ceil(size * 0.75); for (int i = 0; i manualCloneStack(Stack stack) { Stack newStack = new Stack (); for (Integer item: stack) { newStack.push(item); } return newStack; }
initData
एक निर्दिष्ट आकार और 1 से 100 तक के यादृच्छिक तत्वों के साथ एक स्टैक बनाने में मदद करता है।
manualCloneStack
दो विचारों के बीच प्रदर्शन तुलना के लिए इसका उपयोग करके दूसरे स्टैक से डेटा कॉपी करके डेटा उत्पन्न करने में मदद करता है।
Naive दृष्टिकोण का उपयोग करके किसी दिए गए स्टैक से डुप्लिकेट को हटाने का चरण निम्नलिखित है -
Naive दृष्टिकोण का उपयोग करके दिए गए स्टैक से डुप्लिकेट को हटाने के लिए नीचे जावा प्रोग्राम दिया गया है -
public static Stack idea1(Stack stack) { long start = System.nanoTime(); Stack resultStack = new Stack (); while (!stack.isEmpty()) { int element = stack.pop(); if (!resultStack.contains(element)) { resultStack.add(element); } } System.out.println("Time spent for idea1 is %d nanosecond".formatted(System.nanoTime() - start)); return resultStack; }
नाइव दृष्टिकोण के लिए, हम उपयोग करते हैं
while (!stack.isEmpty())
स्टैक में सभी तत्वों के माध्यम से यात्रा करने के लिए पहले लूप को संभालना है, और दूसरा लूप है
resultStack.contains(element)
यह जांचने के लिए कि क्या तत्व पहले से मौजूद है। अनुकूलित दृष्टिकोण का उपयोग करके किसी दिए गए स्टैक से डुप्लिकेट को हटाने के चरण निम्नलिखित हैं -
हैशसेट का उपयोग करके दिए गए स्टैक से डुप्लिकेट को हटाने के लिए नीचे जावा प्रोग्राम है -
public static Stackidea2(Stack stack) { long start = System.nanoTime(); Set seen = new HashSet(); Stack tempStack = new Stack(); while (!stack.isEmpty()) { int element = stack.pop(); if (!seen.contains(element)) { seen.add(element); tempStack.push(element); } } System.out.println("Time spent for idea2 is %d nanosecond".formatted(System.nanoTime() - start)); return tempStack; }
अनुकूलित दृष्टिकोण के लिए, हम
का उपयोग करते हैंSet seen
एक सेट में अद्वितीय तत्वों को संग्रहीत करने के लिए, गणना लागत को कम करने के लिए एक यादृच्छिक तत्व तक पहुंचने पर O(1) जटिलता का लाभ उठाएं जाँच करना कि कोई तत्व मौजूद है या नहीं।
ऊपर उल्लिखित दोनों तरीकों का उपयोग करके दिए गए स्टैक से डुप्लिकेट को हटाने का चरण नीचे दिया गया है -
नीचे जावा प्रोग्राम है जो ऊपर उल्लिखित दोनों तरीकों का उपयोग करके स्टैक से डुप्लिकेट तत्वों को हटा देता है -
import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.Stack; public class DuplicateStackElements { private static StackinitData(Long size) { Stack stack = new Stack(); Random random = new Random(); int bound = (int) Math.ceil(size * 0.75); for (int i = 0; i cloneStack(Stack stack) { Stack newStack = new Stack(); newStack.addAll(stack); return newStack; } public static Stack idea1(Stack stack) { long start = System.nanoTime(); Stack resultStack = new Stack(); while (!stack.isEmpty()) { int element = stack.pop(); if (!resultStack.contains(element)) { resultStack.add(element); } } System.out.printf("Time spent for idea1 is %d nanoseconds%n", System.nanoTime() - start); return resultStack; } public static Stack idea2(Stack stack) { long start = System.nanoTime(); Set seen = new HashSet(); Stack tempStack = new Stack(); while (!stack.isEmpty()) { int element = stack.pop(); if (!seen.contains(element)) { seen.add(element); tempStack.push(element); } } System.out.printf("Time spent for idea2 is %d nanoseconds%n", System.nanoTime() - start); return tempStack; } public static void main(String[] args) { Stack data1 = initData(10L); Stack data2 = cloneStack(data1); System.out.println("Unique elements using idea1: " idea1(data1)); System.out.println("Unique elements using idea2: " idea2(data2)); } }
आउटपुट
* माप की इकाई नैनोसेकंड है।
public static void main(String[] args) { Stackdata1 = initData( ); Stack data2 = manualCloneStack(data1); idea1(data1); idea2(data2); }
तरीका | 100 तत्व | 1000 तत्व | 10000 तत्व |
100000 तत्व |
1000000 तत्व |
विचार 1 | 693100 |
4051600 |
19026900 |
114201800 |
1157256000 |
आइडिया 2 | 135800 |
681400 |
2717800 |
11489400 |
36456100 |
जैसा कि देखा गया है, आइडिया 2 के लिए चलने का समय आइडिया 1 की तुलना में कम है क्योंकि आइडिया 1 की जटिलता O(n²) है, जबकि आइडिया 2 की जटिलता O(n) है। इसलिए, जब ढेरों की संख्या बढ़ती है, तो उसके आधार पर गणना पर लगने वाला समय भी बढ़ जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3