प्रोग्राम में मैं वर्तमान में काम कर रहा हूं, एक ऐसा हिस्सा है जो थोड़ा सा समय ले रहा है। असल में, मेरे पास स्ट्रिंग्स और एक लक्ष्य वाक्यांश की एक सूची है। उदाहरण के तौर पर, मान लें कि लक्ष्य वाक्यांश "तैयार माल की सूची" है। अब, स्टॉप शब्द (के) को फ़िल्टर करने के बाद, मैं सूची से सभी स्ट्रिंग्स निकालना चाहता हूं जिसमें तीन शब्दों में से एक है: "सूची", "समाप्त", और "सामान"।तेज स्ट्रिंग मिलान/इटरेशन विधि?
String[] targetWords; // contains "inventory", "finished", and "goods"
ArrayList<String> extractedStrings = new ArrayList<String>();
for (int i = 0; i < listOfWords.size(); i++) {
String[] words = listOfWords.get(i).split(" ");
outerloop:
for (int j = 0; j < words.length; j++) {
for (int k = 0; k < targetWords.length; k++) {
if (words[j].equalsIgnoreCase(targetWords[k])) {
extractedStrings.add(listOfWords.get(i));
break outerloop;
}
}
}
}
सूची 100k से अधिक शब्द हैं, और इस के साथ प्रत्येक लक्ष्य वाक्यांश के लिए कार्य को पूरा करने rounghly .4 .8 के लिए सेकंड लेता है: अभी, मैं विचार इस प्रकार से लागू किया। चीजें हैं, मेरे पास प्रक्रिया के लिए इनमें से बहुत से लक्ष्य वाक्यांश हैं, और सेकंड वास्तव में जोड़ते हैं। इस प्रकार, मैं सोच रहा था कि क्या कोई इस कार्य को पूरा करने के लिए एक अधिक कुशल तरीका के बारे में जानता था? अग्रिम में मदद के लिए धन्यवाद!
यह ओ (एन^3) है। आप आंतरिक लूप के बजाय हैश मैप का उपयोग कर इसे ओ (एन^2) में काट सकते हैं। लेकिन मैं 'जे' पर लूप द्वारा परेशान हूँ। शब्दों की आपकी सूची पहले से ही शब्दों की सूची क्यों नहीं है? आपको प्रत्येक आइटम को फिर से विभाजित क्यों करना है? – EJP
क्षमा करें, मुझे वैरिएबल को बेहतर नामित करना चाहिए - सूचीऑफैड्स में वास्तव में वाक्यांश होते हैं, इसलिए मैंने प्रत्येक वाक्यांश में प्रत्येक शब्द को प्राप्त करने के लिए वाक्यांशों को विभाजित किया। – myrocks2