का उपयोग कर कार्यान्वित किया जा रहा है "कुशल" नहीं कैच-ऑल शब्द है।
भंडारण के मामले में एक सरणी-सरणी समाधान अधिक कुशल है, जहां सरणी स्पैस हो सकती है (यानी, आप सभी शून्यों की मैट्रिक्स लाइन का प्रतिनिधित्व करने के लिए शून्य सूचक का उपयोग कर सकते हैं)। यह (सी में) होगा:
int *x[9];
जहां प्रत्येक "int *"
अलग से आवंटित किये जायेंगे।
ए 2 डी सरणी (जो आवश्यक रूप से सरणी की सरणी नहीं है) आमतौर पर गतिशील (गति के संदर्भ में कुशल) होगी क्योंकि यह गणित के साथ मेमोरी स्थानों को काम करता है, मेमोरी स्थानों को संदर्भित किए बिना। मैं निर्माण की बात कर रहा हूँ:
int x[9][9];
फार्म के
एक -1 डी सरणी:
int x[81];
किसी भी बराबर 2 डी संस्करण की तुलना में तेजी होने की संभावना नहीं है, क्योंकि आप अभी भी कुछ पर गणना करने के लिए है सही सेल खोजने के लिए इंगित करें (संकलक को ऐसा करने के बजाए मैन्युअल रूप से आपके कोड में)।
संपादित करने के बाद जहां जावा एक आवश्यकता के रूप में जोड़ा गया है:
मेरा मानना है कि जावा 2 डी सरणियों सरणियों किस्म की सरणी (जो के रूप में एक 1 डी सरणी के लिए आवश्यक एक करने का विरोध दो स्मृति तक पहुँचता है की आवश्यकता होगी) के हैं इसलिए मैन्युअल इंडेक्स गणना के साथ 1 डी सरणी तेजी से हो सकती है। तो, बजाय घोषित करने और उपयोग करने का:
int x[width][height];
x[a][b] = 2;
आप के साथ और अधिक गति प्राप्त कर सकते हैं:
int x[width*height];
x[a*height+b] = 2;
तुम बस ध्यान रहे कि आप सूत्र कहीं भी मिश्रित (यानी, डॉन नहीं मिलता है करने की आवश्यकता है अनजाने में 4 और 7 स्वैप नहीं करें)।
यह गति अंतर इस बात पर आधारित है कि मुझे लगता है कि जावा को कवर के तहत कोड किया गया है, इसलिए मैं गलत हो सकता हूं (लेकिन मुझे शक है :-)। मेरी सलाह है, हमेशा अनुकूलन प्रश्नों के लिए, माप, अनुमान मत लगाओ!
+1 "कुशल नहीं है-सभी वाक्यांश" याद रखें कि .NET में जंजीर सरणी के लिए ऑप्टिमाइज़ेशन हैं जो उदाहरण के लिए बहुआयामी लोगों के लिए काम नहीं करते हैं। – Jimmy
जावा में 1 डी सरणी शायद तेज़ है, क्योंकि 2 डी-ऐरे को कम से कम दो मेमोरी पढ़ने की आवश्यकता होती है (कोई गणना नहीं, हालांकि)। –
मैं धारणा बनाने से सावधान रहूंगा। उदाहरण के लिए, यदि आप 2 डी सरणी की एक पंक्ति पर लूप कर रहे हैं, तो जावा इंडेक्स लुकअप व्हीयर को अनुकूलित कर सकता है, यदि आप 1 डी सरणी के साथ इंडेक्स में गणना कर रहे हैं तो शायद नहीं। –