मेरे पास एन आइटम की एक सूची है और मैं सोच रहा हूं कि मैं प्रत्येक संयोजन प्राप्त करने के लिए सूची के माध्यम से कैसे लूप कर सकता हूं। कोई युगल नहीं है, इसलिए मुझे सभी एन प्राप्त करने की ज़रूरत है! orderings। अतिरिक्त स्मृति कोई समस्या नहीं है, मैं सबसे सरल एल्गोरिदम के बारे में सोचने की कोशिश कर रहा हूं लेकिन मुझे परेशानी हो रही है।सी ++ एल्गोरिदम! आदेश
उत्तर
देखें std::next_permutation
अच्छी कॉल (इसलिए बोलने के लिए) पर दो अलग-अलग एल्गोरिदम का स्पष्टीकरण भी देखें। हालांकि निष्पक्ष होने के बावजूद, ओपी ने सबसे सरल * एल्गोरिदम * के लिए कहा था। उदाहरण प्रदान करने के लिए –
सी ++ एसटीएल इस उद्देश्य के लिए next_permutation है।
दूसरों के उत्तरों पर विस्तार, यहाँ एसटीडी का एक उदाहरण है :: next_permutation का उपयोग कर Recursion cplusplus.com
#include <iostream>
#include <algorithm>
using namespace std;
void outputArray(int* array, int size)
{
for (int i = 0; i < size; ++i) { cout << array[i] << " "; }
}
int main()
{
int myints[] = { 1, 2, 3, 4, 5 };
const int size = sizeof(myints);
cout << "The 5! possible permutations with 5 elements:\n";
sort (myints, myints + size);
bool hasMorePermutations = true;
do
{
outputArray(myints, size);
hasMorePermutations = next_permutation(myints, myints + size);
}
while (hasMorePermutations);
return 0;
}
+1। –
'bool' चर में कोई भी बिंदु प्रतीत नहीं होता है। आप बस {do {...} कर सकते हैं (std :: next_permutation (...)); ' –
@ चार्ल्स: यह सच है, मैं ऐसा कर सकता हूं। शिक्षण उद्देश्यों के लिए मैंने अगली_प्रमुखता को खींच लिया क्योंकि यह कोड का केंद्र था। – Bill
सरल कलन विधि से अनुकूलित:
स्यूडोकोड
getPermutations(CurItemList , CurPermList)
if CurItemList.isempty()
return CurPermList
else
Permutations = {}
for i = 1 to CurItemList.size()
CurPermList.addLast(CurItemList.get(i))
NextItemList = CurItemList.copy()
NextItemList.remove(i)
Permutations.add(getPermutations(NextItemList, CurPermList))
CurPermList.removeLast()
return Permutations
// To make it look better
Permutations(ItemList)
return getPermutations(ItemList, {})
मैं इसका परीक्षण नहीं किया, लेकिन काम करना चाहिए। शायद यह करने का सबसे अच्छा तरीका नहीं है, लेकिन यह एक आसान तरीका है। अगर कुछ गलत है तो कृपया मुझे बताएं!
संभव तत्वों की निश्चित गणना के साथ संयोजनों के सेट को फिर से बनाने का प्रयास करें। सभी संभावित संयोजनों का सेट 1 तत्वों, 2 तत्वों, ... एन तत्वों के संयोजन के सेटों का संघ होगा।
फिर आप प्रत्येक निश्चित आकार के संयोजन पर व्यक्तिगत रूप से हमला कर सकते हैं।
- 1. सी # आदेश संयोजन एल्गोरिदम
- 2. सी ++ एल्गोरिदम
- 3. सी/सी ++ एल्गोरिदम/पहेली
- 4. क्यों आदेश जब सी #
- 5. सी # निर्माता निष्पादन आदेश
- 6. सी ++ स्थैतिक प्रारंभिकरण आदेश
- 7. सी # आधार() निर्माता आदेश
- 8. घटनाक्रम के आदेश की भविष्यवाणी के लिए मशीन लर्निंग एल्गोरिदम?
- 9. सी 5 एल्गोरिदम कार्यान्वयन?
- 10. सी # और सममित एल्गोरिदम
- 11. सी # एल्गोरिदम मूल्य
- 12. सी # तुलना एल्गोरिदम
- 13. एल्गोरिदम (या सी # लाइब्रेरी)?
- 14. सी # डिफ एल्गोरिदम टेक्स्ट
- 15. रिजेंडल एल्गोरिदम सी #
- 16. एल्गोरिदम: दिलचस्प diffing एल्गोरिदम
- 17. निर्देशिका .EnumerateFiles आदेश पढ़ें (सी #)
- 18. आदेश
- 19. आदेश
- 20. सी ++ एल्गोरिदम जैसे पायथन 'ग्रुपबी'
- 21. सी ++ अंतराल पेड़ एल्गोरिदम कार्यान्वयन
- 22. सी #: पीएनजी संपीड़न एल्गोरिदम/लाइब्रेरी
- 23. यूक्लिड का विस्तारित एल्गोरिदम सी ++
- 24. सी में ट्रिपल डीईएस एल्गोरिदम?
- 25. आदेश
- 26. आदेश
- 27. स्क्लेक्लेमी आदेश देकर आदेश?
- 28. वॉल्यूम छूट आदेश
- 29. एल्गोरिदम?
- 30. एक साधारण निर्भरता एल्गोरिदम
क्या यह संयोजन या क्रमपरिवर्तन है? – sud03r
http://stackoverflow.com/questions/352203/generating-permutations-lazily/ – ShreevatsaR