मान लीजिए कि पूर्णांक के ऊपरी त्रिभुज मैट्रिक्स दिए जाते हैं। जावा में इसे संग्रहीत करने का सबसे अच्छा तरीका क्या है? बेवकूफ 2 डी int सरणी स्पष्ट रूप से कुशल नहीं है। जिस समाधान के साथ मैं आया था उसे उत्तर अनुभाग में ले जाया गया था।जावा में ऊपरी त्रिभुज मैट्रिक्स का प्रतिनिधित्व करने के लिए सबसे अच्छी डेटा संरचना क्या है?
उत्तर
मुझे लगता है कि मुझे समाधान मिला है। यहाँ मेरी समाधान है: मान लीजिए आप एक 4X4 ऊपरी त्रिकोणीय मैट्रिक्स एम
1 2 3 4
0 6 7 1
0 0 8 9
0 0 0 5
है आप एक 1d सरणी में एम के हर तत्व मैप कर सकते हैं, कि सबसे अच्छा समाधान है। आपको यह जानने की जरूरत है कि मैट्रिक्स का कौन सा [पंक्ति, कॉल] आपके 1 डी सरणी के तत्व से मेल खाता है।
start_index=((col_index-1)+1)+((col_index-2)+1)+...+1
end_index=start_index + col_index
उदाहरण के लिए:: यहाँ आप कैसे जादू है अगर मैं कहाँ मैट्रिक्स के 3 स्तंभ पर तत्व हैं खोजना चाहते हैं, सरणी में:
start_index=((3-1)+1)+((3-2)+1)+((3-3)+1)=6
end_index=6+3=9
तो, सब मैं करने की ज़रूरत है मेरी सरणी के इंडेक्स 6 पर शुरू करना, और इंडेक्स 9 (9वीं तत्व सहित) तक सभी तत्वों को पढ़ना है। इस प्रक्रिया के बाद, आप एनएक्सएन मैट्रिक्स की सभी कोशिकाओं को संग्रहित और पुनर्प्राप्त कर सकते हैं (एन + एन^2)/2 स्पेस।
मैट्रिक्स हमेशा विकर्ण है, तो मैं प्रयोग करेंगे:
List<List<Integer>> matrix = ...
यदि यह एक विरल मैट्रिक्स है, मैं नक्शे का प्रयोग करेंगे:
Map<Map<Integer>> = ...
इस दूसरे मामले में, आप की आवश्यकता हो सकती नए पंक्तियों और स्तंभों तक पहुंच प्रबंधित करने के लिए मानचित्र को एक कक्षा में लपेटें और संचालन सेट करें।
यह सब आपकी आवश्यकताओं, आपकी स्मृति सीमाओं और मैट्रिक्स आकार पर निर्भर करता है।
मैंने एक और समाधान किया। कृपया एक नज़र डालें और मुझे बताएं कि आपको लगता है कि टोपी है। – user3639557
@ user3639557 यदि आप मैट्रिक्स हमेशा त्रिकोणीय है तो आपका समाधान सही है और स्मृति उपयोग से संबंधित इष्टतम है। मैं आपको अपने रैपिंग क्लास को अपने accesors विधियों के साथ लागू करने की सलाह देता हूं जो एक (i पंक्ति, जे कॉलम) इंडेक्स के आधार पर अपने तत्वों तक सीधी पहुंच प्रदान करता है। –
गुवा के Table
के बारे में क्या? इसे हैशमैप्स या ट्रीमैप्स (साथ ही यदि आवश्यक हो तो 2 डी सरणी) का उपयोग करके कार्यान्वित किया जाता है, लेकिन यह Map<Integer, Map<Integer, V>>
को परिभाषित करने से बहुत अच्छा एपीआई प्रदान करता है।
यदि आप स्मृति को सहेजना चाहते हैं, तो आपका समाधान शानदार दिखता है - इसे packed storage matrix कहा जाता है। स्तंभ, ऊपर से नीचे से कॉलम, अपने सरणी इस प्रकार दिखाई देगा: 1 2 6 3 7 8 4 1 9 5
मैं योग सूत्र (n² + n)/2
(पंक्ति और स्तंभ है शून्य आधारित) के आधार पर, अपने सूचकांक का एक सरल गणना सुझाव है।
list_index = (column^2 + column)/2 + row;
कार्यान्वयन निम्नलिखित दिखाई देगा:
public class TriangularMatrix {
private final int[] list;
public TriangularMatrix(int size) {
list = new int[sumFormula(size)];
}
public int set(int row, int column, int value) {
validateArguments(row, column);
int listIndex = getListIndex(row, column);
int oldValue = list[listIndex];
list[listIndex] = value;
return oldValue;
}
public int get(int row, int column) {
validateArguments(row, column);
return list[getListIndex(row, column)];
}
private void validateArguments(int row, int column) {
if (row > column) {
throw new IllegalArgumentException("Row (" + row + " given) has to be smaller or equal than column (" + column + " given)!");
}
}
private int getListIndex(int row, int column) {
return sumFormula(column) + row;
}
private int sumFormula(int i) {
return (i*i + i)/2;
}
}
वहाँ, another question on SO (नकारात्मक) प्रदर्शन प्रभाव पर चर्चा है, हालांकि यह फोरट्रान बारे में है।
मैंने ऊपरी त्रिभुज मैट्रिक्स मामले के लिए एक समाधान तैयार किया जो मुझे चाहिए था। कृपया एक नज़र डालें और मुझे बताएं कि आपको लगता है कि टोपी है। – user3639557
@ user3639557 मैंने आपके प्रश्न से मेल खाने के लिए अपना जवाब बदल दिया - मेरा पहला संस्करण त्रिकोणीय matrices के लिए बस कुशल नहीं था। – stuXnet
- 1. निचले/ऊपरी त्रिभुज मैट्रिक्स
- 2. मैट्रिक्स के लिए जावा डेटा संरचना?
- 3. गति प्राथमिक चिंता होने पर चेकर्स बोर्ड का प्रतिनिधित्व करने के लिए सबसे अच्छी डेटा-संरचना क्या है?
- 4. डेटा संरचना एक भूलभुलैया का प्रतिनिधित्व करने के लिए
- 5. स्तरित सर्कल का प्रतिनिधित्व करने के लिए चालाक डेटा संरचना
- 6. क्या त्रिभुज (ऊपरी या निचले) मैट्रिक्स को घुमाने के लिए एक सीधा तरीका है?
- 7. टेक्स्ट ऑटो पूर्ण करने के लिए सबसे अच्छी डेटा संरचना क्या है?
- 8. * स्पैस * ऊपरी त्रिभुज प्रणाली
- 9. शीर्ष एन तत्वों को क्रमबद्ध क्रम में रखने के लिए सबसे अच्छी डेटा संरचना क्या है?
- 10. जावा में शामिल() के लिए सबसे तेज़ डेटा संरचना?
- 11. कई रिश्तों को कई प्रतिनिधित्व करने के लिए डेटा संरचना
- 12. गुण लोड करने के लिए सबसे अच्छी रणनीति क्या है?
- 13. स्पैस ऊपरी त्रिभुज प्रणाली को हल करें
- 14. ए * ओपन सेट के लिए सबसे अच्छी डेटा संरचना क्या है?
- 15. इस मेमोरी लुकअप टेबल के लिए सबसे अच्छी डेटा संरचना क्या है?
- 16. दो मान रखने के लिए उपयोग करने के लिए एक अच्छी डेटा संरचना क्या है?
- 17. क्लोजर मैट्रिक्स प्रतिनिधित्व
- 18. क्या जावा में "LinkedConcurrentHashMap" डेटा संरचना है?
- 19. पाइथन में सेट में एकाधिक समकक्ष कुंजी का प्रतिनिधित्व करने के लिए डेटा संरचना?
- 20. जावा में डेटा संरचना जैसे संरचना बनाना
- 21. HTTP पोस्ट, GET आदि के लिए उपयोग करने के लिए सबसे अच्छी जावा लाइब्रेरी क्या है?
- 22. जावा में निहित ऑब्जेक्ट को अनुपूरक तरीकों का प्रतिनिधित्व करने का सबसे छोटा तरीका क्या है?
- 23. त्रिभुज/स्पैस भंडारण के लिए numpy मैट्रिक्स गुणा?
- 24. आप डेटा संरचना में संगीत का प्रतिनिधित्व कैसे करते हैं?
- 25. मैट्रिक्स परिचालनों के लिए एक अच्छी सी ++ लाइब्रेरी क्या है
- 26. जावा में 100K एक्स 100K मैट्रिक्स का प्रतिनिधित्व
- 27. पायथन - मैं निम्न त्रिकोणीय numpy मैट्रिक्स के वर्ग मैट्रिक्स कैसे प्राप्त कर सकता हूं? (एक सममित ऊपरी त्रिभुज के साथ)
- 28. टेक्स्ट साहसिक गेम में डेटा का प्रतिनिधित्व करने के लिए पेड़ डेटा संरचना का उपयोग क्यों करें?
- 29. पायथन में सबसे कुशल ग्राफ डेटा संरचना क्या है?
- 30. जावा में संभावनाओं और पर्सेंट का प्रतिनिधित्व करने और कुशलतापूर्वक उपयोग करने का सही तरीका क्या है?
"सर्वश्रेष्ठ" किस तरह से? लचीलापन? मौजूदा मैट्रिक्स पुस्तकालयों में से एक का प्रयोग करें। प्रदर्शन? एक सादा 1 डी सरणी का प्रयोग करें। (यदि प्रदर्शन वास्तव में महत्वपूर्ण है और मैट्रिक्स "छोटा" है, तो आप एक (पंक्तियों * कोल्स) सरणी बनाने और इसके निचले बाएं को खाली छोड़ने पर भी विचार कर सकते हैं)। किसी भी मामले में, मैं उन वर्गों से दूर रहूंगा जो मैट्रिक्स (जैसे "टेबल्स"), या सूचियों वाली सूचीओं जैसे नेस्टेड डेटा संरचनाओं के रूप में उपयोग किए जाने का इरादा नहीं है।यह भी ध्यान रखें कि प्रदर्शन के आखिरी बिट (यहां तक कि सरणी का उपयोग करते समय) के लिए, * एक्सेस पैटर्न * भी महत्वपूर्ण है, और क्या आप पंक्ति-प्रमुख या कॉलम-प्रमुख स्टोरेज – Marco13
का उपयोग करते हैं, आप अपने स्वयं के प्रश्न का उत्तर दे सकते हैं: अपना समाधान ले जाएं एक उत्तर में (इसे इस पृष्ठ में "आपका उत्तर" बॉक्स में टाइप करें)। –
@ पीटरो। धन्यवाद। बस इसे उत्तर खंड में ले जाया गया। – user3639557