व्यावहारिक स्थिति में आपके द्वारा उपयोग की जाने वाली सबसे जटिल डेटा संरचना क्या है? [बन्द है]


17

इस सवाल का रोगाणु एक चर्चा मैं उद्योग के साथी डेवलपर्स के जोड़े के साथ चल रहा था।

यह बताता है कि बहुत सी जगहों पर परियोजना प्रबंधक जटिल डेटा संरचनाओं के बारे में सावधान हैं, और आम तौर पर मानक पुस्तकालय / संकुल से जो कुछ भी मौजूद है, उस पर जोर देते हैं। ऐसा लगता है कि सामान्य विचार पहले से ही उपलब्ध व्हाट्सएप के संयोजन का उपयोग करता है जब तक कि प्रदर्शन गंभीर रूप से बाधित न हो। यह कोड आधार को सरल रखने में मदद करता है, जो गैर-राजनयिक के लिए इसका मतलब होगा "हमारे पास उच्च आकर्षण है, और नए हम जो किराया लेते हैं वह उतना अच्छा नहीं हो सकता है"।

तो आप सीएस नशेड़ियों के लिए कोई ब्लो फिल्टर या स्किप-लिस्ट या स्प्ले ट्री नहीं। तो यहाँ सवाल (फिर से): व्हाट्सएप का सबसे जटिल डेटा स्ट्रक्चर जो आपने किया था या कार्यालय में इस्तेमाल किया था?

यह समझने में मदद करता है कि वास्तविक विश्व सॉफ्टवेयर कितने अच्छे / परिष्कृत हैं।


दूसरों द्वारा लिखा गया है, या अपने आप से?

मेरा मूल इरादा जो कुछ भी था वह स्वयं विकसित था, लेकिन मुझे लगता है कि यह सवाल में एक दिलचस्प आयाम जोड़ता है। मूल प्रश्न संपादित किया।
Fanatic23

इसे जटिल बनाने का मतलब यह नहीं है कि यह परिष्कृत है। सरल = बेहतर हमेशा।
tp1

सबसे जटिल हमेशा एसटीएल से उपलब्ध थे। जटिलता आमतौर पर नेस्टेड डेटा संरचनाओं से आती है, न कि उनके प्रकार से। सरल संरचना = अच्छा, जब तक कि प्रोफाइलर शिकायत नहीं करता।
कोडर

-1 अनावश्यक मूल्य निर्धारण के लिए। मैं बस इतना ही कह सकता हूं: इन दिनों में, यदि आप डेटास्ट्रक्चर को लागू करते हैं, तो आप गूंगे और जिद्दी हो रहे हैं। अगले स्मार्ट बच्चे मत बनो जो सोचता है कि वह गलत तरीके से डेटास्ट्रक्चर को लागू कर सकता है।
पीटर बी

जवाबों:


7

लुकअप के लिए स्किप लिस्ट का इस्तेमाल किया है। जहां मैं काम करता हूं, वहां एक मानक कार्यान्वयन होता है और सभी को इसका उपयोग करने के लिए प्रोत्साहित किया जाता है। उपयोग किया है पेट्रीसिया के भंडारण और आईपी पते को कुशलतापूर्वक प्राप्त करने के लिए प्रयास करता है। फिर से कार्यान्वयन पहले से ही मौजूद था।


7

मैं जावा डेवलपर हूं। जावा संग्रह फ्रेमवर्क मेरी 90% डेटा संरचना की समस्याओं को हल कर सकता है, अन्य 10% को प्रयास की आवश्यकता है। मुझे लगता है कि अगर आप विशेषज्ञों द्वारा लिखे गए परिष्कृत मानक परिवाद को वास्तव में समझते हैं, तो आप पाएंगे कि वे ज्यादातर मामलों में मदद करते हैं।

वास्तविक दुनिया में बनाए रखने के लिए जटिल डेटा संरचनाएं मुश्किल हैं। कोड को गड़बड़ाने से बचने के लिए, मैं एक परेशानी को कुछ छोटे लोगों में बाँटूँगा। प्रत्येक छोटी समस्या को Java Collection Framework द्वारा हल किया जा सकता है । हो सकता है कि समाधान सबसे स्मार्ट नहीं है (इसे अधिक मेमोरी और धीमे की आवश्यकता है), लेकिन यह काम करता है और बनाए रखना आसान है। यह व्यापार बंद है।

अगर मुझे जटिल डेटा संरचना लिखनी है, तो मैं पाठ्यपुस्तक उठाऊंगा :)


4

सबसे जटिल डेटा संरचना जो मैंने नौकरी पर इस्तेमाल की है वह एक ट्राइ थी। हालांकि, वह बीस साल पहले था।

औद्योगिक सॉफ्टवेयर विकास के साथ समस्या यह है कि अधिकांश औद्योगिक प्रोग्रामर कंप्यूटर साइंस (CompSci) ग्रेड नहीं हैं; इसलिए, तकनीक जो कि CompSci ग्रेड के लिए औसत लेता है, उसे बनाए रखने के लिए ब्रेड-एंड-बटर प्रोग्रामर के लिए बहुत मुश्किल माना जाता है।

उद्योग में सामान्य CompSci ज्ञान की कमी एक गंभीर समस्या है। उदाहरण के लिए, मैंने उन सॉफ्टवेयर डेवलपर्स की संख्या खो दी है जो मुझे मिले हैं, जो उस तरह के भावों को नहीं समझते हैं! (A =! = 5 && b! = 3) और a == 5 || b == 3 तार्किक रूप से समतुल्य हैं। जो कोई भी DeMorgan के प्रमेय को लागू करना जानता है, वह पहचान सकता है कि ये भाव तार्किक रूप से समतुल्य हैं। ज्यादातर गैर-कॉम्प्सी स्नातकों ने डेमोरोन के प्रमेय के बारे में कभी नहीं सुना है। यदि कोई किसी भी पर्याप्त कोड आधार का सर्वेक्षण करता है, तो किसी को नकारात्मक तार्किक उप-संदर्भों को नकारने वाले अभिव्यक्तियों की कई घटनाएं मिलेंगी। कोड की पठनीयता जिसमें नकारात्मक नकारात्मक तार्किक उपसमूह शामिल हैं, इन भावों को उनके गैर-नकारात्मक रूप में परिवर्तित करके लगभग हमेशा बेहतर होता है।


5
"डाउन" वोट डालने वाले किसी को भी मेरी सलाह है कि किसी को यह कहते हुए टिप्पणी करनी चाहिए कि किसी ने "डाउन" वोट क्यों डाला। मैं एक अलग राय रखने वाले को संभाल सकता हूं। हालाँकि, मैं जो संभाल नहीं सकता वह कायरता है।
बिट-ट्विडलर

2
@ बिट-ट्विडलर मैंने अपने दर्शनशास्त्र में डी मॉर्गन के प्रमेय को सीखा। अब मैं सीएस कर रहा हूं, इसका उल्लेख नहीं किया गया है। ईमानदारी से, हालांकि, मैं इस तरह की चीजों को एक शॉर्टहैंड के रूप में देखता हूं जो अनुभव के साथ आता है। क्या आपको वास्तव में नियमों को याद करने की आवश्यकता है (और नाम से!) आप एक समीकरण को बनाते समय नियोजित करते हैं? मैं आपके बारे में नहीं जानता, लेकिन मैं इस बात पर आधारित हूं कि मेरे सामने क्या है और रट से नहीं। वही तार्किक भावों को संशोधित करने के लिए जाता है।
रूपर्ट मैडेन-एबोट

2
@ रुपर्ट: डी मॉर्गन के प्रमेय को आमतौर पर असतत गणित और कंप्यूटर संगठन (दोनों अमेरिका में स्नातक पाठ्यक्रमों की आवश्यकता होती है) में शामिल किया गया है। मैंने अंडरग्रेजुएट के रूप में कंप्यूटर आर्किटेक्चर / सिस्टम सॉफ्टवेयर में ध्यान केंद्रित किया। डी मॉर्गन की प्रमेय का उपयोग डिजिटल लॉजिक डिज़ाइन में बहुत अधिक किया जाता है। निम्न स्तर के सॉफ्टवेयर विकास में ऐसे क्षेत्र हैं जहां डी मॉर्गन के प्रमेय को जानना महत्वपूर्ण हो जाता है। उदाहरण के लिए, न्यूनतम निर्देश सेट कंप्यूटर हैं जिनमें बूलियन निर्देशों का एक पूरा सेट शामिल नहीं है; इसलिए, एक बूलियन ऑपरेशन को दूसरे से प्राप्त करने में सक्षम होना चाहिए।
बिट-ट्विडलर

1
(cont) यहां एक परीक्षण है कि अधिकांश गैर-कंप्यूटर विज्ञान / कंप्यूटर इंजीनियरिंग / इलेक्ट्रिकल इंजीनियरिंग (कंप्यूटर इंजीनियरिंग एकाग्रता) की ग्रेड या तो एकमुश्त विफल हो जाती है या उत्तर देने में बहुत लंबा समय लेती है। केवल NAND (नकारात्मक) ऑपरेशन को देखते हुए, निम्नलिखित बूलियन संचालन प्राप्त करें: NOT, AND, OR, NOR, XOR और XNOR। डी मॉर्गन के प्रमेय को जानने से उन छह बूलियन संचालन को प्राप्त करना आसान हो जाता है। डी मॉर्गन की प्रमेय आसानी से डिजिटल लॉजिक डिजाइन में सबसे महत्वपूर्ण प्रमेय है।
बिट-ट्विडलर

1
..... हालांकि निष्पक्ष होने के लिए, एक उद्योग में जहां काम का एक बहुत कुछ छोटे व्यवसाय के लिए आधे-assed RoR एप्लिकेशन लिखने में चला जाता है, शायद 1000000000 में लगभग 1 बार होता है जहां आपको HEARD की आवश्यकता होगी तर्क गेट्स और बूलियन बीजगणित की अवधारणा, केवल अंग्रेजी शब्दों "या" और "और" का अर्थ जानने के बजाय। यह कहते हुए कि आप सीएस काम या जटिल एल्गोरिदम या अनुकूलन या निम्न स्तर की प्रोग्रामिंग कर रहे हैं, लेकिन यह जानने के लिए प्रासंगिक नहीं हैं, लेकिन प्रोग्रामर के रूप में काम करने वाले अधिकांश लोगों के लिए, यह एक तरह से बेकार सामान्य ज्ञान है।
सारा

2

मैंने एक बार एक घटना-आधारित सिमुलेशन के लिए एक कैलेंडर कतार (O (1) प्राथमिकता कतार) लिखी थी जिसमें प्रोफाइलिंग से पता चला था कि मौजूदा ढेर एक अड़चन थी।

मैंने एक उत्पाद भी जारी किया जिसमें लगभग 80000 राज्यों के साथ एक परिमित राज्य मशीन शामिल थी - इसे उत्पन्न करने के लिए कोड कम से कम कहने के लिए, थोड़ा फ़िज़ूल था।


2

लम्बी, लंबी, पहले, एक आकाशगंगा में ... एक टीम पर काम किया जो कोडर में आरटीओएस में नूथ के "दोस्त बफ़र्स" का इस्तेमाल करती थी।

इसके अलावा, 1024 x 1024 की दुनिया के लिए 256 पीढ़ियों के साथ कॉनवे का गेम ऑफ लाइफ।


1

वास्तव में कुछ भी विशेष उपयोग नहीं किया है, खरोंच से यह एक डबल-लिंक की गई सूची होगी

बहुत रोमांचक नहीं है, मैंने अन्य संरचनाओं का उपयोग किया है। लेकिन आपके सवाल ने खरोंच से कहा।


सी ++ में, वह std::list, और वास्तव में इसके लिए कुछ भी जटिल नहीं है: / मुझे लाल-काला पेड़ / एवीएल पेड़ बहुत अधिक जटिल लगता है, उन सभी असंतुलित परिस्थितियों के साथ!
मैथ्यू एम।

@ मैथ्यू एसटीडी :: नक्शा और आप सबसे अधिक संभावना एक आरबी पेड़ प्राप्त करेंगे।
aufather

1

वित्तीय डेटा की सामान्य सूची वाले हैशटेबल्स का एक पेड़ - भी नहीं पूछते हैं। कभी-कभी मेरी इच्छा होती है कि मैं एक चरवाहा हो। आह, सितारों के नीचे सादा जीवन ...


चश्मा निकालता है "प्रिय भगवान।"
लेन जोसफ

1

मुझे सुडोकू सॉल्वर के लिए डांसिंग लिंक एल्गोरिथ्म के लिए स्क्रैच से एक सर्कुलर डबल-लिंक्ड-लिस्ट संरचना लिखना था । ऐसा लगा जैसे रुबिक का क्यूब डिज़ाइन कर रहा हो। पूरी संरचना मूल रूप से सूचियों की एक सूची थी - प्रत्येक नोड के साथ चार अन्य की ओर इशारा करते हुए।


1
यह एक सुडोकू सॉल्वर के लिए ओवरकिल की तरह लगता है, चूंकि एक जानवर-बल बैकग्राउंडिंग एल्गोरिथ्म पहेली को हल करता है जिससे आप डेटा दर्ज कर सकते हैं।
केविन क्लाइन

3
@kevin, डांसिंग लिंक एक ब्रूट-फोर्स बैकट्रैकिंग एल्गोरिदम है - लेकिन एक प्रशंसनीय अनुमान के साथ।
पीटर टेलर

यदि आपको समाधान की कुल संख्या की गणना करने और एक सुडोकू केवल 1 अद्वितीय समाधान है, यह कहते हुए कि आपको ऐसा करने की आवश्यकता है, तो आपको एक अनुमानी होना चाहिए।
प्रोडिजीसिम

1

मैंने एक बार एक विशेष कैश के लिए एक भारित पथ लंबाई के पेड़ का उपयोग किया था । वह मजेदार था। एक malloc()प्रतिस्थापन के लिए अपने हीप प्रबंधन दिनचर्या भी लिखी है , लेकिन बहुत से लोगों ने ऐसा किया है।


0

यह एक विचार देने के बाद, सबसे जटिल "जटिल" डेटा संरचना जो मैंने स्क्रैच से की है, तत्वों का एक नेटवर्क मॉडलिंग कर रहा है जो दोगुनी-लिंक वाली सूचियों पर आधारित था। लेकिन यह वर्षों पहले था जब मैं सिस्टम-स्तरीय प्रोग्रामिंग करता था।

इन दिनों मैं शायद ही किसी भी फैंसी डेटा संरचनाओं का निर्माण करता हूं। यह अधिकतर उस डेटाबेस में होता है जहां आप तय करते हैं कि आपने एक तालिका में क्या रखा है, शायद कुछ पूर्वगामी मूल्य शायद अनावश्यक पुनर्प्राप्ति से बचने के लिए त्वरित पुनर्प्राप्ति के लिए कुछ संबंधित रिकॉर्ड की आईडी।

मैं व्यक्तिगत रूप से बात करता हूं कि हाथ में काम साधन को परिभाषित करता है। अगर इसके लिए कोई उपयोग नहीं है, तो कुछ विदेशी डेटा संरचना का उपयोग करने का प्रयास क्यों करें? और अगर मैं व्यावहारिक रूप से लागू अधिकांश प्रोग्रामिंग में कह सकता हूं कि पहिया को फिर से मजबूत करने की आवश्यकता नहीं है।


मेरा इरादा कुछ विदेशी डेटा संरचना को बाध्य करने का नहीं था। लेकिन इसकी एक दुखद स्थिति है जब आपको बॉक्स से बाहर कुछ चाहिए और जो भी पहले से ही उपलब्ध है उससे निपटना होगा क्योंकि कॉर्पोरेट नीति ऐसा करती है।
Fanatic23

0

क्या प्राथमिकता कतार में गिना जाता है? यह मेरे द्वारा लिखे गए हर वास्तविक समय के अनुप्रयोग के बारे में है। यह हाल ही में मानक जावा पुस्तकालय का हिस्सा बन गया (जावा 1.5)।

इसके अलावा, मैं कुछ भी जटिल नहीं सोच सकता हूं जो मैं वास्तव में चाहता था कि मैं एक पुस्तकालय से बाहर निकलने में सक्षम नहीं हूं। मैं उसे रोक नहीं सकता, लेकिन मैं सवाल करूंगा कि मुझे पुस्तकालयों को शामिल करने के लिए डेटा संरचना की भी आवश्यकता क्यों है। इससे पहले कि मैं खुद को लिखने की कोशिश करूँ, मैं निश्चित रूप से एक मौजूदा ओपन-सोर्स कार्यान्वयन ट्राय या ब्लूम फ़िल्टर या एक स्किप सूची की तलाश करूँगा।

सामान्य तौर पर मैं आपके प्रबंधक से सहमत हूं कि कोई लाइब्रेरी संस्करण होने के लिए कस्टम डेटा संरचना के निर्माण और लागत को बनाए रखने में बहुत गूढ़ है, इससे प्राप्त किसी भी प्रदर्शन लाभ से आगे बढ़ने की संभावना नहीं है। मैं आपको प्रोफाइलिंग के माध्यम से यह दिखाना चाहता हूं कि सादे पुस्तकालय संरचनाएं एक महत्वपूर्ण प्रदर्शन दंड का कारण बन रही हैं, इससे पहले कि मैं आपको आगे बढ़ने दूं और उन्हें कुछ फैंसी के साथ अनुकूलित करूं। क्योंकि एक सामान्य नियम के रूप में, यह इंजीनियरिंग चक्रों की तुलना में प्रोसेसर साइकिल खरीदने के लिए सस्ता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.