मैं संयोजनों के एक सेट में प्रत्येक संयोजन के लिए कुछ मानों की पूर्व-गणना करना चाहता हूं। उदाहरण के लिए, जब 12 0 से 3 संख्या को चुनने, मैं हर एक के लिए कुछ मूल्य की गणना होगी:संयोजन की गणना रैंक?
>>> for n in choose(range(13), 3):
print n, foo(n)
(0, 1, 2) 78
(0, 1, 3) 4
(0, 1, 4) 64
(0, 1, 5) 33
(0, 1, 6) 20
(0, 1, 7) 64
(0, 1, 8) 13
(0, 1, 9) 24
(0, 1, 10) 85
(0, 1, 11) 13
etc...
मैं एक सरणी में इन मूल्यों को स्टोर करने के लिए इतना है कि संयोजन को देखते हुए, मैं गणना अपनी और प्राप्त कर सकते हैं चाहता हूँ महत्व। उदाहरण के लिए:
>>> a = [78, 4, 64, 33]
>>> a[magic((0,1,2))]
78
magic
क्या होगा?
प्रारंभ में मैंने इसे आकार 3 x 13 x 13 के 3-डी मैट्रिक्स के रूप में स्टोर करने के लिए सोचा था, इसलिए मैं इसे आसानी से इस तरह से अनुक्रमित कर सकता हूं। हालांकि यह 13 चुनने के लिए ठीक है, यह 13 चुनने के लिए बहुत अधिक ओवरहेड होगा।
मैं एक नियम का उपयोग नहीं करना चाहता क्योंकि आखिरकार यह कोड सी में होगा, और एक सरणी होगी वैसे भी अधिक कुशल।
अद्यतन: मुझे भी एक ही समस्या है, लेकिन पुनरावृत्ति के साथ संयोजन का उपयोग करना, इसलिए उन लोगों के रैंक को प्राप्त करने के बारे में कोई भी जवाब बहुत सराहना की जाएगी =)।
अद्यतन: इसे स्पष्ट करने के लिए, मैं अंतरिक्ष को संरक्षित करने की कोशिश कर रहा हूं। इनमें से प्रत्येक संयोजन वास्तव में कुछ जगह लेता है, चलो 2 किलोबाइट्स कहते हैं। अगर मैं 13x13x13 सरणी का उपयोग करना चाहता था, तो यह 4 मेगाबाइट होगा, जिसमें से मुझे केवल 572 किलोबाइट्स (13 चुनें 3) स्पॉट का उपयोग करना होगा।
क्रमपरिवर्तन, संयोजन और विभाजन में, साहित्य शब्द "सूचकांक" के बजाय "रैंक" है। "रैंक संयोजन एल्गोरिदम" खोजें। :) यह वास्तव में एक अच्छा पृष्ठ है: http://home.hccnet.nl/david.dirkse/math/rank/ranking.html –
जब आप कहते हैं "मैं एक नियम का उपयोग नहीं करना चाहता" ... क्या यह करता है इसका मतलब है कि आप हैश टेबल का उपयोग नहीं करना चाहते हैं? –
@belisarius: हाँ, अजगर शब्दावली के लिए खेद है – Claudiu