स्कैला के वैक्टरों के पीछे 32 का ब्रांचिंग कारक होने के पीछे तर्क क्या है, और कुछ अन्य नंबर नहीं है? छोटे शाखाओं के कारक अधिक संरचनात्मक साझाकरण सक्षम नहीं करेंगे? क्लोजर एक ही ब्रांचिंग कारक का उपयोग करता प्रतीत होता है। क्या ब्रांचिंग कारक 32 के बारे में कुछ जादू है जो मुझे याद आ रही है?वैक्टर इतने उथले क्यों हैं?
उत्तर
यह मदद मिलेगी अगर आप विस्तार से बताया है कि एक शाखाओं में कारक है:
एक पेड़ या एक ग्राफ की शाखाओं में कारक प्रत्येक नोड में बच्चों की संख्या है।
तो, इस सवाल का जवाब काफी हद तक यहाँ प्रतीत होता है:
http://www.scala-lang.org/docu/files/collections-api/collections_15.html
वेक्टर एक उच्च शाखाओं में कारक के साथ पेड़ के रूप में प्रतिनिधित्व कर रहे हैं। प्रत्येक पेड़ नोड में वेक्टर के 32 तत्व होते हैं या 32 अन्य पेड़ नोड्स तक होते हैं। 32 तत्वों वाले वेक्टरों को एक एकल नोड में का प्रतिनिधित्व किया जा सकता है। 32 * 32 = 1024 तत्वों के साथ वेक्टर एक एकल संकेत के साथ प्रतिनिधित्व कर सकते हैं। अंतिम तत्व नोड के लिए पेड़ की जड़ से दो हॉप्स अप करने के लिए तत्वों, वैक्टर के लिए तीन हॉप्स 2 , चार हॉप्स साथ वैक्टर के लिए 2 तत्वों और साथ साथ वैक्टर के लिए पर्याप्त हैं वेक्टरों के लिए पांच हॉप 2 तत्वों के साथ। तो उचित आकार के सभी वैक्टरों के लिए, एक तत्व चयन में तक 5 आदिम सरणी चयन शामिल हैं। यह हमारा मतलब था जब हम ने लिखा था कि तत्व पहुंच "प्रभावी रूप से स्थिर समय" है।
इसलिए, मूल रूप से, उन्हें एक डिजाइन निर्णय लेना पड़ा कि प्रत्येक नोड में कितने बच्चे हैं। जैसा कि उन्होंने समझाया, 32 उचित लग रहा था, लेकिन, अगर आपको लगता है कि यह आपके लिए बहुत ही सीमित है, तो आप हमेशा अपनी कक्षा लिख सकते हैं।
32 मई क्यों हो सकता है, इस बारे में अधिक जानकारी के लिए, आप इस पेपर को देख सकते हैं, जैसा कि परिचय में वे ऊपर के समान बयान देते हैं, लगभग यह लगभग स्थिर समय है, लेकिन यह पेपर क्लोजर से संबंधित है, ऐसा लगता है, स्कैला से अधिक।
स्पष्टता में सुधार के लिए मेरे प्रश्न को संपादित करने के लिए स्वतंत्र महसूस करें। – fredoverflow
यह अद्यतन के लिए "प्रभावी ढंग से निरंतर समय है।" ब्रांचिंग कारक के उस बड़े हिस्से के साथ, आपको टेराबाइट-स्केल वैक्टरों के लिए भी 5 स्तरों से आगे नहीं जाना पड़ेगा। यहां रिच के साथ एक वीडियो है और चैनल 9 पर क्लोजर के अन्य पहलुओं के बारे में बात कर रहे हैं। http://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert-Rich-Hickey-and-Brian-Beckman-Inside-Clojure
जेम्स ब्लैक का जवाब सही है। 32 आइटम चुनने के लिए एक अन्य तर्क यह हो सकता है कि कई आधुनिक प्रोसेसर में कैश लाइन का आकार 64 बाइट्स है, इसलिए दो लाइनें 32 बिट्स के साथ 32 इंच या 32 बिट मशीन पर 32 पॉइंटर्स या 64 बिट जेवीएम को ढेर आकार के साथ 32 इंच रख सकती हैं पॉइंटर संपीड़न के कारण 32 जीबी।
अनावश्यकता से बचने के लिए अब टिप्पणी हटा दी गई है। –
आधुनिक कैश लाइन 64bytes है। इंटेल के सबसे नए, बहुत ही नवीनतम प्रोसेसर में केवल 128bytes हो सकते हैं। – Puppy
बस जेम्स के जवाब में थोड़ा सा जोड़ना।
एल्गोरिदम विश्लेषण दृष्टिकोण से, क्योंकि दो कार्यों की वृद्धि लॉगरिदमिक है, इसलिए वे उसी तरह स्केल करते हैं।
लेकिन, व्यावहारिक अनुप्रयोगों में, हॉप्स की तुलना में, कहते हैं, आधार 2 हॉप्स की एक बहुत छोटी संख्या है, पर्याप्त रूप से इतना है कि यह यह करीब लगातार समय के लिए रहता है, यहां तक कि एन की काफी बड़ी मूल्यों के लिए
मुझे यकीन है कि उन्होंने कुछ मेमोरी ब्लॉक आकार की वजह से 32 को ठीक से (उच्च संख्या के विपरीत) चुना है, लेकिन मुख्य कारण छोटे आकारों की तुलना में कम संख्या में होप्स है। http://www.infoq.com/presentations/Functional-Data-Structures-in-Scala
- 1. बॉक्स किए गए वैक्टर इतने धीमे क्यों हैं?
- 2. इतने कम संस्करण फ़ाइल सिस्टम क्यों हैं?
- 3. स्वचालित जीयूआई उपकरण इतने बेकार क्यों हैं?
- 4. एआरएम मोड और इतने सारे क्यों हैं?
- 5. उथले क्लोन की सीमाएं क्या हैं
- 6. Win32-API में इतने सारे कस्टम प्रकार क्यों हैं?
- 7. एसओए डिज़ाइन में सीआरयूडी ऑपरेशन इतने खराब क्यों हैं?
- 8. इतने सारे अलग-अलग कॉलिंग सम्मेलन क्यों हैं?
- 9. मेरे रेल इतने धीमे क्यों परीक्षण कर रहे हैं?
- 10. फाइलसाइज में हास्केल/जीएचसी निष्पादन योग्य इतने बड़े क्यों हैं?
- 11. Android लेआउट फ़ाइल नाम इतने सीमित क्यों हैं?
- 12. टेम्पलेट संकलित करने के लिए इतने धीमे क्यों हैं?
- 13. आईओसी कंटेनर उपयोग के Antipatterns। आईओसी कंटेनर इतने जटिल क्यों हैं और इतने "फैंसी" तरीके का इस्तेमाल करते हैं?
- 14. वैक्टर
- 15. जांचें कि क्या दो वैक्टर बराबर हैं
- 16. एएसपी.नेट एमवीसी 4 में इतने सारे NuGet पैकेज क्यों हैं और जो वास्तव में महत्वपूर्ण हैं?
- 17. ArrayList उथले प्रतिलिपि या क्लोन()
- 18. दो वैक्टर
- 19. कैसे वैक्टर
- 20. रोटेशन वैक्टर बनाम quaternions
- 21. समय त्रुटि क्लोनिंग Git "उथले" भंडार
- 22. इंटरविविंग वैक्टर
- 23. इतने लंबे समय तक HttpWebRequest GetResponse ब्लॉक क्यों करता है?
- 24. सी # कनेक्शन पूलिंग के लिए इतने सारे sp_resetconnections क्यों?
- 25. एंटिटी फ्रेमवर्क डाटाबेस में इतने सारे राउंडट्रिप्स क्यों करता है?
- 26. इतने सारे पूर्ण डेटाबेस स्कीमा नमूना ऑनलाइन क्यों?
- 27. एमवीसी-मिनी-प्रोफाइलर: इतने सारे एक्स-मिनीप्रोफाइलर-आईडी क्यों?
- 28. ndk-gdb एकाधिक इतने libs
- 29. C++ वैक्टर सरणियों
- 30. जावाई बनाम PHP - इतने सारे लोग क्यों सोचते हैं कि जावा बेहतर है?
मैं मुख्यधारा के मीडिया को दोष:
मैं आपको यह भी InfoQ पर इस प्रस्तुति, जहां डैनियल Spiewak की चर्चा वेक्टर में लगभग 30 मिनट के शुरू करने से देखने की सलाह देता। – Shmiddty
अपने बेहतरीन पर Trolltember। – rlemon