क्या प्रोग्रामिंग या कंप्यूटर विज्ञान सामान्य रूप से सभी एल्गोरिदम के बारे में है?


40

एक वर्गीकृत छात्र के रूप में, मुझे प्रतिष्ठित कंपनियों (जैसे Google, Facebook, Microsoft, ...) के लिए अपने परीक्षण और साक्षात्कारों में एल्गोरिदम प्रश्न डालने के लिए यह अधिक से अधिक सामान्य लगता है। मेरे द्वारा लागू किए गए कुछ स्टार्टअप ने एल्गोरिदम के बारे में भी पूछा। मुझे आश्चर्य है कि क्या एल्गोरिदम प्रवाह उन कंपनियों में सॉफ्टवेयर डेवलपर के लिए सबसे महत्वपूर्ण बात है?

यदि उत्तर हाँ है, तो प्रभावी रूप से एल्गोरिदम के बारे में जानने और अभ्यास करने के लिए सबसे अच्छी विधि या संसाधन क्या हैं? मुझे लगता है कि ज्यादातर पाठ्यपुस्तक या वेबसाइटों में पाई जाने वाली जटिल समस्याओं को हल करने में कोई दिलचस्पी नहीं है। हालांकि आसानी से बुनियादी एल्गोरिदम (जैसे क्विकॉर्ट्स, बुलबुले, ...) को समझते हैं, मुझे बाद में उन्हें याद रखना और पुन: उपयोग करना बेहद मुश्किल लगता है।

धन्यवाद।

P / S: यदि आप मुझसे पूछते हैं कि मुझे क्या पसंद है, तो यह उपयोगकर्ताओं की समस्याओं को नवीन रूप से हल करने के लिए अच्छे सॉफ्टवेयर का निर्माण कर रहा है। मुझे लगता है कि जरूरी नहीं कि सॉफ्टवेयर को बहुत जटिल होना चाहिए।


26
Google द्वारा टेक्स्ट बॉक्स और बटन के साथ संपूर्ण वेब पर खोज करने की अनुमति देने के लिए कोई भी विचार कितना जटिल है?
जेएफओ

21
@ जेफ़ो मैं अब बटन का उपयोग भी नहीं करता ;-)
मेपल_शफ़्ट

1
यदि Google इसे और आसान बनाता है, तो अन्य सभी खोज साइटों को किसी भी कोड की आवश्यकता नहीं होगी।
20

मुझे लगा कि यह सवाल होगा कि कंप्यूटर कैसे काम करते हैं, जैसे सीपीयू कैसे काम करता है, रैम कैसे काम करता है, वाईफाई कैसे काम करता है, आदि। ये काफी दिलचस्प सवाल हैं जो अभी भी काफी शोध के अधीन हैं। मुझे अभी भी java या php में सभी geeks प्रोग्रामिंग की तुलना में हार्डवेयर अधिक भयानक लगता है।
जोक

2
यह सभी एल्गोरिदम के बारे में नहीं है, लेकिन वास्तव में वे सीएस के मूल में हैं। लेकिन सिर्फ एल्गोरिदम और लॉजिक की तुलना में प्रोग्रामिंग के लिए बहुत कुछ है (उदाहरण के लिए, कोड को बनाए रखने के लिए, केवल एल्गोरिदम के ज्ञान की आवश्यकता नहीं होगी )।
जाइल

जवाबों:


44

एल्गोरिदम स्पष्ट हैं

यहां एल्गोरिदम के बारे में सुंदर बात है: जिस समस्या से वे निपटते हैं वह अच्छी तरह से परिभाषित है, अर्थात आपकी आवश्यकताओं को वास्तव में केवल ज्ञात नहीं है , लेकिन आमतौर पर समाधान की गुणवत्ता के लिए मैट्रिक्स की तरह बहुत औपचारिक भी।

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

एल्गोरिदम एक कुशल फिल्टर है

उद्योग की वर्तमान समस्या (और शिक्षा) स्नातकों की खराब औसत गुणवत्ता है। यह FizzBuzz परीक्षण के साथ चित्रित किया गया है , जो है:

एक प्रोग्राम लिखें, जो 1 से 100 तक की संख्याओं के माध्यम से जाएगा और "फ़िज़" को प्रिंट करेगा यदि संख्या 3 से विभाज्य है, तो "बज़" यदि यह 5 से विभाज्य है और संख्या स्वयं ही है यदि यह न तो विभाज्य है।

जाहिर है, सभी COMP विज्ञान स्नातकों के बहुमत इस समस्या को हल करने में विफल। कृपया ध्यान दें कि यह एक एल्गोरिथम प्रश्न है, हालांकि निश्चित रूप से एक शर्मनाक सरल है। इसे देखते हुए, कोई ऐसा व्यक्ति जो Google कोड जाम या प्रोजेक्ट यूलर में दी गई समस्याओं का समाधान कर सकता है, आप पहले से ही crème-de-la-crème का आनंद ले रहे हैं।

एल्गोरिदम सॉफ्टवेयर विकास का एक छोटा सा हिस्सा है

सच्चाई यह है कि जैसे ही आप उद्योग में काम करते हैं, आप 1% समय से अधिक अपने एल्गोरिथ्म कौशल का उपयोग नहीं करेंगे।

इससे पहले कि आप कोड लिखना भी शुरू करें, आपको पहले आवश्यकताओं को इकट्ठा और विश्लेषण करना होगा। फिर आपको अपने डिजाइन को उनके आधार पर संश्लेषित करना होगा। फिर आपको डिज़ाइन को लागू करना होगा। फिर आपको मूल आवश्यकताओं के खिलाफ कार्यान्वयन का मूल्यांकन करना होगा, फिर आवश्यकताओं को पुनरावृत्त करना, फिर डिजाइन को पुनरावृत्त करना, फिर कार्यान्वयन को पुनरावृत्त करना और इसी तरह।

आवश्यकताओं में से एक समझदार प्रदर्शन है। यदि वह आवश्यकता पूरी नहीं हुई है, तो आपको अड़चनों को ट्रैक करने के लिए अपने कार्यान्वयन को प्रोफाइल करना होगा और फिर आप इसे ऑप्टिमाइज़ कर सकते हैं, जो कभी-कभी सीधे फॉरवर्ड माइक्रो-ऑप्टिमाइज़ेशन का मामला होता है (जो कि करना आसान है), लेकिन कभी-कभी यह एक बात है बेहतर एल्गोरिदम का उपयोग करना (जो हमेशा बाद में आसानी से नहीं होता है)। इसलिए:

एल्गोरिदम महत्वपूर्ण हैं

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

कम्प्यूटेशनल जटिलता के लिए एक भावना प्राप्त करना और इसे कम रखने के लिए वास्तव में क्या महत्वपूर्ण है, जैसा कि मैंने भी इसी तरह के सवाल के जवाब में समझाया था । या उन चीजों में विशेषज्ञता के लिए जहां यह महत्वपूर्ण नहीं है, जैसे कि जीयूआई विकास, लेकिन फिर फिर से लगभग हर कोई इसे नफरत करता है ... एक कारण के लिए!


5
बहुत व्यापक और बुद्धिमान उत्तर के लिए +1। इसके अलावा, यह दुखद है कि एक फिल्टर FizzBuzz कितना प्रभावी है। इसे करने में सक्षम नहीं होने के लिए बिल्कुल कोई बहाना नहीं है।
एडम क्रॉसलैंड

4
मैंने सोचा था कि fizzbuzzयदि आप संख्या को दोनों से विभाजित कर रहे हैं और उस पर कई फिसल गए हैं तो आपको मुद्रण करना चाहिए , क्योंकि आपको सावधानी से जांच करने के लिए आदेश देने की आवश्यकता है।
मैथ्यू एम।

1
1% थोड़ा बहुत अधिक हो सकता है
भांग

1
@ मैथ्यूएमएम .: मुद्रण दोनों की आवश्यकता कैसे निहित है, में निहित है। गुम, इसका मतलब है कि आपने आवश्यकताओं को ध्यान से नहीं देखा; अब, जो मुझे दिलचस्प लगा वह यह है कि यह नहीं कहा गया है कि आपको उन्हें किसी विशेष क्रम में मुद्रित करना है, या लगातार एक ही क्रम में ...
jmoreno

1
@ back2dos: हाँ, लेकिन यह एक यादृच्छिक क्रम में करना अधिक मज़ेदार लगता है ... ध्यान दें कि इस उत्तर में दी गई आवश्यकता के अनुसार लाइनों का उल्लेख नहीं है, बस मुद्रण । यदि आपको एक FizzBuzz परीक्षण दिया जाता है, तो यह इंगित करना सार्थक हो सकता है कि इसमें बहुत सारी अस्थिर धारणाएं हैं (तब फिर से, यह आपको बस एक बुद्धिमान के रूप में चित्रित कर सकता है)।
jororeno

30

सामान्य तौर पर, नौकरी के रूप में प्रोग्रामिंग एल्गोरिदम के बारे में नहीं है। आप गहरी एल्गोरिथम कौशल की आवश्यकता के बिना CRUD प्रोग्रामिंग के वर्षों में खर्च कर सकते हैं।

नौकरी के रूप में प्रोग्रामिंग करना है:

  1. संचार:

    • आपका स्रोत कोड आपके साथियों के लिए आपके विचारों को संप्रेषित करने का एक माध्यम है। यदि कोई आपके कोड को पढ़ / समझ नहीं सकता है, तो यह बेकार है।

    • एक अकेला डेवलपर जो किसी भी अन्य डेवलपर से बात नहीं करता है, शायद कोड में गलतियां करना शुरू कर देगा और यह विश्वास करेगा कि उसका अपना दृष्टिकोण ही स्वीकार्य है।

    • आपको पता होना चाहिए कि हितधारकों, क्यूए विभाग, उपयोगकर्ताओं, दृश्य डिजाइनरों, डीबीए, आदि के साथ कैसे संवाद करना है।

    • एक अनुभवी डेवलपर के रूप में, आपको कम अनुभवी सहयोगियों को सिखाना चाहिए जो अपने कौशल में सुधार करना चाहते हैं।

  2. सही उपकरणों का ज्ञान: संस्करण नियंत्रण, बग ट्रैकिंग सिस्टम, आईडीई, जो भाषा एक विशिष्ट कार्य के लिए बेहतर है और क्यों, कोड विश्लेषण का उपयोग कैसे करें, आदि।

  3. व्यापक ज्ञान और संस्कृति: कार्यात्मक भाषाएं क्या हैं? कंप्यूटर कोड की व्याख्या कैसे करते हैं? एलओसी एक व्यर्थ उपाय क्यों है? आदि।

  4. आप जिस भाषा के साथ काम करते हैं, उसका गहन ज्ञान

  5. एल्गोरिदम।

दूसरी ओर, कंप्यूटर विज्ञान, एल्गोरिदम के लिए अधिक उन्मुख है। यदि आप एक वैज्ञानिक के रूप में काम करते हैं, तो इसका डेवलपर की नौकरी से कोई लेना-देना नहीं हो सकता है, और आप एल्गोरिदम को कैसे अनुकूलित करें, डेटा प्रतिनिधित्व को दूसरे में कैसे परिवर्तित करें आदि पर अधिक काम करेंगे।


12
-1: "CRUD अनुप्रयोग" हैं एल्गोरिदम। वे सिर्फ (आम तौर पर) सरल हैं। कोई "महान अर्थ" नहीं है।
S.Lott

2
और स्रोत कोड कंप्यूटर पर आपका एकमात्र संचार चैनल है जो वास्तव में वही करता है जो आप इसे करने के लिए कहते हैं (और लगभग कभी भी आप इसे करना नहीं चाहते)
शाफ़्ट freak

5
यह आश्चर्यजनक है कि बाजार CRUDdy अनुप्रयोगों की सफाई के लिए कितना अच्छा है, जिनकी इंजीनियरिंग टीमों ने एल्गोरिदम की मूल बातें (या कभी नहीं सीखी) को अनदेखा किया।
जेसनट्र्यू

2
@ S.Lott: "CRUD एप्लिकेशन एल्गोरिदम हैं" "मैं अमेरिका हूं" के अनुरूप है। ;)
जिम जी।

1
@ जिम: जैसा कि स्टीवन कोलबर्ट कहते हैं "मैं अमेरिका हूं और इसलिए आप कर सकते हैं"। CRUD अनुप्रयोगों में शामिल हैं, पर आधारित हैं, शामिल हैं, के कार्यान्वयन हैं, के बोध हैं, अवतार लेते हैं, एल्गोरिदम को दर्शाते हैं। आपने केवल एक विशिष्ट प्रस्ताव के सुझाव के बिना शिकायत की। जिससे आपको खुशी हुई होगी?
8'12 को S.Lott

16

मुझे लगता है कि साक्षात्कारों में एल्गोरिदम के बारे में सवाल मुख्य तरीकों में से एक हैं जो कंपनियां कंप्यूटर विज्ञान की बुनियादी बातों के लिए उम्मीदवार की समझ का न्याय करने की कोशिश करती हैं। जबकि यह एक पेशेवर प्रोग्रामर के लिए कौशल का एकमात्र महत्वपूर्ण क्षेत्र नहीं है, यह एक अच्छे प्रोग्रामर की मुख्य दक्षताओं में से एक है।

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

एल्गोरिथम डिजाइन का अभ्यास कैसे करें, इसके लिए स्टीव येजे ने एक प्रोग्रामर के रूप में साक्षात्कार के लिए अपने उत्कृष्ट गाइड में स्कीना के एल्गोरिथ्म डिजाइन मैनुअल की सिफारिश की ।


4
+1: प्रोग्रामिंग लैंग्वेज, फ्रेमवर्क, ऑपरेटिंग सिस्टम, एडिटर्स, टूलसेट, वे सभी आते-जाते हैं, लेकिन समस्याओं को हल करने के तरीके को जानने से डेटा संरचनाओं और एल्गोरिदम के मूल सिद्धांतों को जानने के साथ सब कुछ करना पड़ता है। ये चीजें हमेशा हमारे साथ रहती हैं।
एडम क्रॉसलैंड

"एल्गोरिथ्म डिजाइन का अभ्यास कैसे करें, स्टीव यंगेज ने प्रोग्रामर के रूप में साक्षात्कार के लिए अपने उत्कृष्ट गाइड में स्कीना के अल्गोरिदम डिजाइन मैनुअल को फिर से लिखा है।" क्षमा करें, लेकिन यह उस व्यक्ति पर लागू नहीं हो सकता है जिसने यह प्रश्न पूछा है क्योंकि वह एक स्नातक छात्र है। Google / MS ने स्कीना से (स्नातक छात्रों के लिए), उन प्रश्नों को पूछने के लिए स्थानांतरित किया है जो अंतरराष्ट्रीय कॉलेजिएट प्रोग्रामिंग प्रतियोगिताओं में दिखाई दिए हैं। (यह मुझे निश्चित अनुभव से पता है)। स्कीना की पुस्तक अभी भी उपयोग की जाती है - लेकिन मुख्य रूप से अंडरग्रेड स्तर के उम्मीदवारों के लिए।
user396089

प्रोग्रामिंग प्रतियोगिताओं में दिखाई देने वाले प्रश्नों के लिए - यदि आप प्रश्न पहले नहीं देखे हैं, तो आप बहुत अधिक hosed हैं (जब तक कि आपका IQ भी सामान्य से 3 एसडी दूर न हो जाए)
user396089

11

एक सफल सॉफ्टवेयर डेवलपर के रूप में, जो स्वयं पढ़ाया जाता है और कॉलेज में केवल कुछ कंप्यूटर विज्ञान पाठ्यक्रम लेता है, मैं कहूंगा कि आज व्यवसाय के सामने सबसे बड़ी समस्या यह है कि उनके सभी प्रोग्रामर के लिए सबसे कुशल तरीके से बबल सॉर्ट एल्गोरिथ्म लिखने की क्षमता नहीं है। मुमकिन। सही समस्याएं जो व्यवसायों का सामना करती हैं:

  • जो डेवलपर्स जल्दी से सीख नहीं सकते हैं और नए डोमेन के लिए अनुकूल हैं

  • डेवलपर्स जो सामाजिक रूप से ग्राहकों या हितधारकों के साथ सार्थक तरीके से बातचीत नहीं कर सकते हैं

  • डेवलपर्स जो दूसरा अनुमान नहीं लगा सकते हैं और गलत या खराब व्यावसायिक आवश्यकताओं के बारे में सोच सकते हैं

  • डेवलपर्स जो समझ नहीं पाते हैं कि अपने कोड और सुविधाओं का पूरी तरह से परीक्षण कैसे करें

  • डेवलपर्स जो समय पर फैशन में सार्थक अनुमान प्रदान नहीं कर सकते हैं

  • डेवलपर्स जो स्पष्ट और संक्षिप्त दस्तावेज़ नहीं बना सकते हैं

  • डेवलपर्स जो स्वयं शुरू नहीं कर सकते हैं या किसी स्थिति का प्रभार नहीं ले सकते हैं

दस में से नौ बार मैं दांव लगाऊंगा कि लगभग सभी परिस्थितियां जहां एक डेवलपर किसी कंपनी में फ़्लॉन्डर करता है क्योंकि वे उपरोक्त गुणों में से एक में असफल हो जाते हैं। Google और Facebook को भूल जाओ, वे अपवाद मामले हैं और उन लोगों के लिए वैध आवश्यकता है जो कंप्यूटर विज्ञान को गहराई से समझते हैं।

वास्तविक व्यवसाय हालांकि कंप्यूटर विज्ञान की जटिलताओं से संघर्ष नहीं करते हैं, वे मानवता की जटिलताओं के साथ संघर्ष करते हैं। समस्या यह है कि उपरोक्त गुणों के लिए परीक्षण करना वास्तव में कठिन है। अधिकांश समय आपको अपनी आंत प्रतिक्रिया के आधार पर लोगों को इन गुणों का न्याय करना होगा। यह कठिन है यदि आपके पास अच्छे लोग कौशल और अंतर्ज्ञान नहीं हैं, तो एल्गोरिथ्म ज्ञान के लिए परीक्षण करना बहुत आसान है।


+1 नियमित और गैर-Google जैसी-अजीब कंपनियों को अच्छे व्यावसायिक कौशल वाले लोगों की आवश्यकता होती है, और मुख्य रूप से यह समझने में कि कैसे प्रक्रियाओं का आविष्कार / प्रबंधन / संशोधन करना है। यह कोई गलती नहीं है कि Google जैसी कंपनियों ने चुस्त आंदोलन नहीं किया, क्योंकि कंप्यूटर विज्ञान व्यावसायिक समस्याओं को हल करने के बारे में नहीं है।
S.Robins

10

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

इस शब्दावली का आपके निपटान के रूप में होना आपको अपने स्वयं के "समाधानों के साथ आने से रोकता है (ऐसा कहने के लिए पहिया को फिर से मजबूत करना), जिससे आप बेहतर और अक्सर तेज़ काम कर सकते हैं।

"मैं ज्यादातर पाठ्यपुस्तक या वेबसाइटों में पाई जाने वाली जटिल समस्याओं को हल करने में दिलचस्पी नहीं ले सकता।"

"मुझे बाद में उन्हें याद करना और उनका पुन: उपयोग करना बेहद कठिन लगता है"

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


डेटा संरचनाओं के लिए +1। वे एल्गोरिदम के सिक्के का दूसरा हिस्सा हैं।
स्पेंसर रथबुन

9

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

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


1
+1 सही जवाब! एल्गोरिथम ज्ञान के लिए परीक्षण करना आसान है।
मेपल_शाफ्ट

"आपके एल्गोरिदम" - मुझे स्वयं सिखाया जाता है। क्या कोई स्रोत या सूची कहीं है जो बताती है कि ये सामान्य एल्गोरिदम क्या हैं जो प्रत्येक प्रोग्रामर को पता होना चाहिए? मैं उनके माध्यम से पढ़ना चाहूंगा। धन्यवाद!
ओमिनस

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

@ ओमिनस - मैं भी स्वयं पढ़ा हुआ हूं लेकिन मुझे लगता है कि "परिचय टू एल्गोरिदम" - सीएलआरएस क्षेत्र से परिचित होने का एक अच्छा तरीका है। स्कीना की पुस्तक "द अल्गोरिथम डिज़ाइन मैनुअल" भी अच्छी है।
टॉड

5

हां, प्रोग्रामिंग ज्यादातर एल्गोरिदम के बारे में है।

लेकिन शायद इस अर्थ में नहीं कि आप सोच रहे हैं।

मुझे लगता है कि हम सभी एल्गोरिथ्म की विभिन्न परिभाषाओं का उपयोग कर रहे हैं। ईमानदार होने के लिए, इस प्रश्न का उत्तर देना कठिन है क्योंकि एल्गोरिथ्म एक अस्पष्ट शब्द है। मैं इस प्रश्न का उत्तर देने के लिए विकिपीडिया की परिभाषा का उपयोग करूंगा:

नियमों का एक सेट जो ऑपरेशन के अनुक्रम को ठीक से परिभाषित करता है।

यह प्रोग्रामिंग का दिल और आत्मा है। जब आप कोई कोड लिखते हैं, तो आप एक एल्गोरिथ्म लागू कर रहे हैं। यदि आप कुछ CRUD अनुप्रयोग लिख रहे हैं, तो आप एक साधारण एल्गोरिथ्म लागू कर रहे हैं। एक समस्या को हल करने के लिए एक एल्गोरिथ्म के साथ आने में सक्षम होना प्रोग्रामिंग क्या है। बाकी सिर्फ विवरण हैं।

मैं पिछले पोस्टर से असहमत हूं जिसने कहा कि एल्गोरिदम को समझने की तुलना में भाषा की गहरी समझ होना बहुत महत्वपूर्ण है। किसी भी अच्छे प्रोग्रामर को किसी भाषा को गहराई से सीखने में सक्षम होना चाहिए, लेकिन एल्गोरिदम के बिना, आप अपने दम पर किसी भी कोड के साथ नहीं आ सकते।


एक अन्य दृष्टिकोण से, गणित में हृदय और आत्मा एल्गोरिदम हो सकते हैं, हालांकि प्रोग्रामिंग के लिए यह कुछ और है। आप प्रति सेगमेंट एल्गोरिदम की आवश्यकता के बिना सॉफ्टवेयर लिख सकते हैं (शायद अच्छा सॉफ्टवेयर नहीं), लेकिन आप तर्क, और अमूर्त सोच के बिना सॉफ्टवेयर नहीं लिख सकते। हालांकि यह दिल से है , यह समस्याओं को हल करने के बारे में है। समाधान ढूँढना एक एल्गोरिथम प्रक्रिया है, फिर भी समाधान स्वयं एक एल्गोरिथ्म नहीं है।
S.Robins

4

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

एल्गोरिदम की एक मजबूत समझ प्रदान करना आपके संभावित नियोक्ता के लिए सबूत है कि आप एक समस्या है। यह वास्तव में एक अच्छे कर्मचारी का एक अच्छा संकेतक (IMO) नहीं है, लेकिन कुछ नियोक्ता स्क्रीनिंग के लिए इसका उपयोग करते हैं। यदि आप एक ऐसी स्थिति के लिए आवेदन कर रहे हैं जिसके लिए एक स्नातक की डिग्री की आवश्यकता होती है, तो आपको एल्गोरिदम में अधिक कठोर नींव की उम्मीद होगी।

क्या (IMO) अभ्यास में बहुत मददगार है, विशिष्ट एल्गोरिदम को याद करने के लिए नहीं है, लेकिन यह समझने के माध्यम से कि कुछ एल्गोरिदम कैसे काम करते हैं, आपके दिमाग के पीछे यह छोटा सा डला है, जहां आप कहेंगे "मैंने इसे पहले देखा है" या "मुझे पता है" यह बेहतर हो सकता है "जो आपकी समस्या के समाधान पर थोड़ा शोध करेगा।


ग्रेडिंग छात्रों के लिए हायरिंग बार के बारे में बात करने के लिए +1। अंडरग्राउंड की तुलना में ग्रेड छात्रों को काम पर रखने पर कुछ कंपनियां बहुत ज्यादा फजी होती हैं। लेकिन उनके निष्पक्ष होने के लिए, स्नातक छात्रों को भी बेहतर भुगतान किया जाता है, और आमतौर पर आंतरिक रूप से उच्च स्तर पर भर्ती किया जाता है।
user396089

1

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

यह गणित की तरह नहीं लग सकता है, और बहुत से एल्गोरिदमिक कार्य जो आप दिन-प्रतिदिन करेंगे, बहुत सरलता से एक GUI और एक प्रोग्राम के बीच डेटा भेजने जैसे सामान हैं, लेकिन यह एक एल्गोरिथ्म के रूप में भी गिना जाता है। किसी सूची बॉक्स में एक तत्व सम्मिलित करना एक मानक सम्मिलित एल्गोरिथ्म है जो अपने स्वयं के मुद्दों जैसे प्रदर्शन और सूची संरचना जोड़तोड़ के साथ आता है।


1

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

एक स्वतंत्र प्रोग्रामिंग सलाहकार के रूप में मेरे अनुभव में, सफलता तीन चीजों से आई है। 1. ग्राहकों के साथ प्रभावी ढंग से संवाद करना 2. लेखन कोड जो काम करता है। 3. प्रबंध जटिलता

सिर्फ 1 और 2 नंबर करना ही काफी नहीं है। यदि कोड अनुरक्षण योग्य नहीं है (प्रोग्रामर के अलावा किसी और के द्वारा) जिसने इसे लिखा है, तो यह बर्बाद है।

नंबर 3 मास्टर करने के लिए सबसे कठिन प्रोग्रामिंग कौशल है। यह सोचा जाना चाहिए कि वास्तुकला, डिजाइन और कोडिंग में डाल दिया जाए। इसके लिए निपुणता की आवश्यकता होती है। इसके लिए SOLID / DRY सिद्धांतों की समझ की आवश्यकता है। अगर मुझे एक प्रोग्रामर किराए पर लेना था, जिसने इंट्रो को अल्गोरिदम में पढ़ा था और खुद को इसमें महारत हासिल करने के लिए समर्पित किया या एक जिसने द प्रोगैमैटिक प्रोग्रामर को पढ़ा और खुद को एक होने के लिए समर्पित किया, तो मैं हर बार बाद वाला काम पर रखूंगा। (ऐसा नहीं कि उन्हें परस्पर अनन्य होना है)।


1

हाँ।

कंप्यूटर विज्ञान ज्यादातर एल्गोरिदम (प्रतिशत द्वारा) है।

नहीं।

लेकिन वह कंप्यूटर का "विज्ञान" है। कंप्यूटर विज्ञान का सबसे आम अनुप्रयोग सॉफ्टवेयर इंजीनियरिंग है। सॉफ्टवेयर इंजीनियरिंग मुख्य रूप से एल्गोरिदम नहीं है। यह मुख्य रूप से बनाने की कला, पूर्णता की खोज के बारे में है, और वास्तविक लोगों के जीवन को सकारात्मक रूप से प्रभावित करने के आसपास केंद्रित है जो आज मौजूद हैं। जबकि कंप्यूटर विज्ञान कुछ इसी प्रेरणा को साझा कर सकता है, यह सॉफ्टवेयर इंजीनियरिंग से बहुत दूर है।

एक प्रमुख कंप्यूटर विज्ञान विश्वविद्यालय में एक कार्यकाल प्राप्त प्रोफेसर से पूछें कि प्रोग्रामिंग के बारे में समझने के लिए सबसे महत्वपूर्ण बात क्या है, और वे आपको "एल्गोरिदम और डेटा संरचनाएं" बताएंगे।

एक प्रमुख सॉफ्टवेयर कंपनी के एक वरिष्ठ डेवलपर से पूछें कि प्रोग्रामिंग के बारे में समझने के लिए सबसे महत्वपूर्ण बात क्या है, और वे संभवतः आपको बताएंगे, "ग्राहकों को प्रसन्न करना सीखना" (इसमें निहित है कि चुस्त, ग्राहक की तरह सोच, समय पर शिपिंग और निरंतर, काम करने वाली चीजें आदि)

शब्दार्थ की तरह लग सकता है, लेकिन मेरी समझ से दोनों व्यवहार और सिद्धांत दोनों में उल्लेखनीय रूप से भिन्न हैं।


1

अगर मुझे कंप्यूटर साइंस में सबसे महत्वपूर्ण भाग के रूप में एक चीज़ चुननी थी, तो मैं एल्गोरिदम नहीं, बल्कि सार चुनूँगा।


1

कंप्यूटर विज्ञान में, आप जो भी सीखते हैं, वह तब तक आपके काम आएगा जब तक आप इसे नहीं दिखाते। समस्या मुख्य चिंता का विषय है, इसलिए इसे हल करने की आवश्यकता है, इसलिए एल्गोरिथ्म एक संक्षिप्त योजना है कि समस्या को सामान्य रूप से कैसे हल किया जाएगा। इसलिए यह कंप्यूटर विज्ञान की दुनिया में प्रमुख चिंता का विषय है।

मुझे लगता है कि Computer Science के लगभग हर पहलू को Algorithm की जरूरत है। मैं आपको यह दिखाता हूं कि निम्नलिखित सूची में विभिन्न कंप्यूटर विज्ञान क्षेत्र शामिल होंगे और वे कौन से एल्गोरिदम का उपयोग करेंगे।

ऑटोमेटा

पॉवरसेट निर्माण। Nondeterministic automaton को नियतात्मक automaton में बदलने के लिए एल्गोरिथम। टोड-कॉक्सटर एल्गोरिथ्म। कोष्ठक उत्पन्न करने की प्रक्रिया।

कृत्रिम होशियारी

अल्फा बीटा। अल्फा अधिकतम प्लस बीटा मिनट। व्यापक रूप से बोर्ड गेम में उपयोग किया जाता है। चींटी-एल्गोरिदम। चींटी कॉलोनी अनुकूलन एक समस्या को हल करने के लिए चींटी के व्यवहार से प्रेरित एल्गोरिदम का एक सेट है, दो स्थानों के बीच सबसे अच्छा रास्ता खोजें। DE (डिफरेंशियल डेवलपमेंट)। Chebyshev बहुपद फिटिंग समस्या का समाधान करें। ऑनलाइन उत्पाद समीक्षा में सारिक-वाक्य की अर्ध-पर्यवेक्षित मान्यता । Algortithm जो एक ट्वीट या एक ऑनलाइन दस्तावेज़ में संस्कार या विडंबना को पहचानते हैं। ह्यूमनॉइड रोबोट प्रोग्रामिंग के लिए भी ऐसा एल्गोरिथ्म आवश्यक होगा।

कंप्यूटर दृष्टी

प्रतीक। एक छोटे से एक छवि या वीडियो का प्रतिनिधित्व करते हैं। एक छवि में वस्तुओं की गिनती । प्रत्येक ऑब्जेक्ट को पहले लेबल करने के लिए कनेक्ट-कंपोनेंट लेबलिंग एल्गोरिदम का उपयोग करता है, और फिर ऑब्जेक्ट्स की गिनती करता है। O'Carroll एल्गोरिथ्म। कीट दृष्टि के गणितीय रूपांतरण से, यह एल्गोरिथ्म मूल्यांकन करता है कि वस्तुओं से बचने के लिए कैसे प्राप्त किया जा सकता है।

आनुवंशिक एल्गोरिदम

वे तीन ऑपरेटर का उपयोग करते हैं। चयन (समाधान चुनें), प्रजनन (अन्य लोगों के निर्माण के लिए चुना समाधान का उपयोग करें), प्रतिस्थापन (यदि बेहतर हो तो समाधान बदलें)।

फिटनेस आनुपातिक चयन। रूलेट-व्हील चयन के रूप में भी जाना जाता है, समाधानों के चयन के लिए उपयोग किया जाने वाला एक फ़ंक्शन है। ट्रंकेशन चयन। फिटनेस द्वारा ऑर्डर किए गए समाधानों के चयन के लिए एक और तरीका। टूर्नामेंट का चयन एक तरह के टूर्नामेंट द्वारा सर्वश्रेष्ठ समाधान का चयन करें। स्टोचैस्टिक यूनिवर्सल सैंपलिंग। व्यक्तियों को एक पंक्ति के सन्निहित खंडों में मैप किया जाता है, जैसे कि प्रत्येक व्यक्ति का खंड आकार में उसकी फिटनेस के बराबर होता है, जैसे कि रूलेट-व्हील चयन में।

तंत्रिका जाल

होपफील्ड नेट। आवर्तक कृत्रिम तंत्रिका नेटवर्क जो बाइनरी दहलीज इकाइयों के साथ सामग्री-पता योग्य मेमोरी सिस्टम के रूप में काम करते हैं। वे एक स्थिर स्थिति में परिवर्तित होते हैं। Backpropagation। कृत्रिम तंत्रिका नेटवर्क के प्रशिक्षण के लिए उपयोग की जाने वाली पर्यवेक्षण तकनीक। स्व-आयोजन मानचित्र (कोहेनेन मानचित्र)। प्रशिक्षण नमूने के कम आयामी (2 डी, 3 डी) प्रतिनिधित्व का उत्पादन करने के लिए अप्रशिक्षित सीखने का उपयोग करके प्रशिक्षित तंत्रिका नेटवर्क। उच्च-आयामी डेटा को देखने के लिए अच्छा है।

जैव सूचना विज्ञान

Needleman-Wunsch। प्रोटीन या न्यूक्लियोटाइड अनुक्रमों के लिए, दो अनुक्रमों पर एक वैश्विक संरेखण करता है। स्मिथ-वाटरमैन। नीडलमैन-वुनश का रूपांतर।

दबाव

दोषरहित संपीड़न एल्गोरिदम

बर्स-व्हीलर ट्रांसफॉर्म। दोषरहित संपीड़न में सुधार के लिए उपयोगी प्रीप्रोसेसिंग। हवा निकालना। डेटा संपीड़न ज़िप द्वारा इस्तेमाल किया। डेल्टा एन्कोडिंग। डेटा के संपीड़न के लिए जिसमें अनुक्रमिक डेटा अक्सर होता है। वृद्धिशील एन्कोडिंग। डेल्टा एन्कोडिंग तारों के अनुक्रमों पर लागू होती है। LZW। (Lempel-Ziv-वेल्च)। LZ78 का उत्तराधिकारी। संपीड़ित करने के लिए डेटा से अनुवाद तालिका बनाता है। जीआईएफ ग्राफिकल प्रारूप द्वारा उपयोग किया जाता है। LZ77 और 78. आगे LZ विविधताओं का आधार (LZW, LZSS, ...)। वे दोनों शब्दकोश कोडर हैं। LZMA। लेम्पेल-ज़िव-मार्कोव श्रृंखला-एल्गोरिथम के लिए लघु। LZO। डेटा संपीड़न एल्गोरिथ्म जो गति पर केंद्रित है। पीपीएम(आंशिक मिलान द्वारा भविष्यवाणी)। संदर्भ मॉडलिंग और भविष्यवाणी के आधार पर अनुकूली सांख्यिकीय डेटा संपीड़न तकनीक। शैनन-फ़ानो कोडिंग। प्रतीकों और उनकी संभावनाओं के एक सेट के आधार पर उपसर्ग कोड का निर्माण करता है। काट दिया बाइनरी। आम तौर पर एक परिमित वर्णमाला के साथ समान संभावना वितरण के लिए एक एन्ट्रापी एन्कोडिंग का उपयोग किया जाता है। बाइनरी एन्कोडिंग में सुधार करें। रन-लंबाई एन्कोडिंग। प्राथमिक संपीड़न जो घटनाओं की संख्या से समान कोड के अनुक्रम को बदलता है। Sequitur। एक स्ट्रिंग पर वृद्धिशील व्याकरण इंजेक्शन। EZW (एंबेडेड ज़ेरोट्री वेवलेट)। बढ़ती सटीकता के साथ एक छवि को एक बिट स्ट्रीम में संपीड़ित करने के लिए प्रगतिशील एन्कोडिंग। बेहतर परिणाम के साथ हानिपूर्ण संपीड़न भी हो सकता है।

एंट्रोपी एन्कोडिंग कोडिंग योजना जो प्रतीकों को कोड प्रदान करती है ताकि प्रतीकों की संभावनाओं के साथ कोड की लंबाई मेल खा सके।

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

हानिपूर्ण संपीड़न एल्गोरिदम

रैखिक भविष्य कहनेवाला कोडिंग। संकुचित रूप में भाषण के डिजिटल सिग्नल के वर्णक्रमीय लिफाफे का प्रतिनिधित्व करके हानिपूर्ण संपीड़न। A- कानून एल्गोरिथ्म। मानक कंपाउंडिंग एल्गोरिथ्म। म्यू-लॉ एल्गोरिथ्म। मानक एनालॉग सिग्नल संपीड़न या कम्प्यूटिंग एल्गोरिदम। भग्न संपीड़न। फ्रैक्चर का उपयोग करके चित्रों को संपीड़ित करने के लिए विधि। रूपांतरण कोडिंग। ऑडियो सिग्नल या फोटोग्राफिक इमेज जैसे डेटा के लिए डेटा कंप्रेशन का प्रकार। वेक्टर मात्रा का ठहराव। तकनीक अक्सर हानिपूर्ण डेटा संपीड़न में उपयोग की जाती है। वेवलेट कम्प्रेशन। छवि और ऑडियो संपीड़न के लिए अनुकूल डेटा संपीड़न का रूप।

क्रिप्टोग्राफी

गुप्त कुंजी (सममित एन्क्रिप्शन)

डिक्रिप्शन और एन्क्रिप्शन दोनों के लिए एक गुप्त कुंजी (या सीधे संबंधित कुंजी की एक जोड़ी) का उपयोग करें।

उन्नत एन्क्रिप्शन स्टैंडर्ड (AES) , जिसे रिजंडल भी कहा जाता है। ब्लोफिश। Schneier द्वारा एक सामान्य-उद्देश्य एल्गोरिथ्म के रूप में डिज़ाइन किया गया है, जिसका उद्देश्य बूढ़ा DE के प्रतिस्थापन के रूप में किया गया है। डेटा एन्क्रिप्शन स्टैंडर्ड (डीईएस) , पूर्व में डी एल्गोरिथम। आईडिया (अंतर्राष्ट्रीय डेटा एन्क्रिप्शन एल्गोरिथम) । पूर्व आईपीईएस (इम्प्रूव्ड पीईएस), डेस के लिए एक और प्रतिस्थापन। पीजीपी (सुंदर अच्छा गोपनीयता) द्वारा उपयोग किया जाता है। एक कुंजी का उपयोग करके ब्लॉक में विभाजित डेटा पर रूपांतरण करता है। आरसी 4 या एआरसी 4। स्ट्रीम साइफर व्यापक रूप से प्रोटोकॉल में उपयोग किया जाता है जैसे कि इंटरनेट ट्रैफिक के लिए एसएसएल और वायरलेस नेटवर्क के लिए WEP। छोटे एन्क्रिप्शन एल्गोरिथ्म। कुछ सूत्रों का उपयोग करके ब्लॉक सिफर एल्गोरिदम को लागू करना आसान है। PES (प्रस्तावित एन्क्रिप्शन मानक)। IDEA का पुराना नाम।

सार्वजनिक कुंजी (असममित एन्क्रिप्शन)

सार्वजनिक कुंजी और निजी कुंजी के रूप में निर्दिष्ट कुंजियों की एक जोड़ी का उपयोग करें। सार्वजनिक कुंजी संदेश को एन्क्रिप्ट करती है, केवल निजी कुंजी इसे डिक्रिप्ट करने की अनुमति देती है।

डीएसए (डिजिटल सिग्नेचर एल्गोरिथम)। प्राइम और रैंडम नंबर्स के साथ कीज जनरेट करें। अमेरिकी एजेंसियों और अब सार्वजनिक डोमेन द्वारा उपयोग किया गया था। ElGamal। जीएनयू प्राइवेसी गार्ड सॉफ्टवेयर, पीजीपी और अन्य क्रिप्टोग्राफिक सिस्टम द्वारा उपयोग किए जाने वाले डिफी-हेलमैन के आधार पर। आरएसए (रिवेस्ट, शमीर, एडेलमैन)। इलेक्ट्रॉनिक कॉमर्स प्रोटोकॉल में व्यापक रूप से उपयोग किया जाता है। अभाज्य संख्या का प्रयोग करें। डिफी-हेलमैन (मर्कल) कुंजी विनिमय (या घातीय कुंजी विनिमय)। विधि और एल्गोरिथ्म एक असुरक्षित संचार चैनल पर गुप्त साझा करने के लिए। RSA द्वारा उपयोग किया जाता है। NTRUEncrypt। पॉल्यूशन के छल्ले का उपयोग कन्वेंशन गुणा के साथ करें।

संदेश पाचन कार्य

एक संदेश पाचन एक स्ट्रिंग का एन्क्रिप्शन या किसी भी लंबाई के डेटा के परिणामस्वरूप एक कोड है, जो एक हैश फ़ंक्शन द्वारा संसाधित होता है।

MD5। सीडी या डीवीडी की आईएसओ छवियों की जाँच के लिए उपयोग किया जाता है। RIPEMD (RACE अखंडता आदिम मूल्यांकन संदेश डाइजेस्ट)। MD4 के सिद्धांतों पर आधारित और SHA-1 के समान। SHA-1 (सुरक्षित हैश एल्गोरिथम 1)। संबंधित क्रिप्टोग्राफिक हैश फ़ंक्शन के SHA सेट का सबसे अधिक उपयोग किया जाता है। एनएसए एजेंसी द्वारा डिजाइन किया गया था। HMAC। कुंजी-हैश संदेश प्रमाणीकरण। टाइगर (TTH)। आमतौर पर टाइगर ट्री हैश में उपयोग किया जाता है।

क्रिप्टोग्राफिक छद्म यादृच्छिक संख्याओं का उपयोग करके देखें। रैंडम नंबर जेनरेटर

क्रिप्टोग्राफी में तकनीक

गुप्त साझाकरण, गुप्त विभाजन, कुंजी विभाजन, एन एल्गोरिदम का एम।

शमीर की गुप्त साझा योजना। यह बहुपद प्रक्षेप पर आधारित एक सूत्र है। ब्लेकली की गुप्त साझा योजना। प्रकृति में ज्यामितीय है, रहस्य एक आयामी अंतरिक्ष में एक बिंदु है।

अन्य तकनीकों और डिक्रिप्शन

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

ज्यामिति

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

रेखांकन 3 डी भूतल ट्रैकर प्रौद्योगिकी। एक वीडियो में दीवारों पर छवियों को जोड़ने की प्रक्रिया जबकि छिपी हुई सतहों को ध्यान में रखा जाता है। Bellman- फोर्ड। एक भारित ग्राफ में कम से कम रास्तों की गणना करता है (जहां कुछ बढ़त भार नकारात्मक हो सकते हैं)। दीजकस्ट्रा का एल्गोरिदम। गैर-नकारात्मक किनारे भार के साथ एक ग्राफ में सबसे छोटे पथों की गणना करता है। संयम के तरीके। एक एल्गोरिथ्म जो एक ग्राफ में स्थानीय रूप से सबसे छोटे रास्तों की गणना करता है। फ्लोयड-Warshall। सभी जोड़े को एक भारित, निर्देशित ग्राफ में सबसे छोटी पथ समस्या हल करता है। फ्लोयड का चक्र-खोज। पुनरावृत्तियों में चक्र ढूँढता है। जॉनसन। सभी जोड़े विरल भारित निर्देशित ग्राफ में कम से कम पथ एल्गोरिथम। Kruskal।एक ग्राफ के लिए न्यूनतम फैले हुए पेड़ को ढूँढता है। रस्मी की। एक ग्राफ के लिए न्यूनतम फैले हुए पेड़ को ढूँढता है। जिसे DJP, Jarník या Prim-Jarník algorithm भी कहा जाता है। * बोरुक्का। * एक ग्राफ के लिए एक न्यूनतम फैले हुए पेड़ को ढूँढता है। फोर्ड-Fulkerson। एक ग्राफ में अधिकतम प्रवाह की गणना करता है। एडमंड्स-कार्प। Ford-Fulkerson का कार्यान्वयन। नॉनब्लॉकिंग मिनिमल स्पैनिंग स्विच। एक टेलीफोन एक्सचेंज के लिए। वुडहाउस-तीव्र। एक ग्राफ के लिए न्यूनतम फैले हुए पेड़ को ढूँढता है। वसंत आधारित। ग्राफ ड्राइंग के लिए एल्गोरिदम। हंगेरी। एक आदर्श मिलान खोजने के लिए एल्गोरिथम। रंग एल्गोरिथ्म। ग्राफ रंग एल्गोरिथ्म। निकटतम पड़ोसी।निकटतम पड़ोसी का पता लगाएं। सामयिक प्रकार। एक निर्देशित चक्रीय ग्राफ को इस तरह से क्रमबद्ध करें कि प्रत्येक नोड सभी नोड्स से पहले आता है जिसमें इसके किनारों (दिशाओं के अनुसार) हैं। टारजन की ऑफ-लाइन कम से कम सामान्य पूर्वजों एल्गोरिथ्म। एक पेड़ में नोड्स के जोड़े के लिए सबसे कम सामान्य पूर्वजों की गणना करें।

ग्राफिक्स

ब्रेसेनहम की लाइन एल्गोरिदम। 2 निर्दिष्ट बिंदुओं के बीच एक सीधी रेखा को प्लॉट करने के लिए निर्णय चर का उपयोग करता है। लैंडस्केप एक 3 डी दृश्यों ड्रा। * डीडीए लाइन एल्गोरिथ्म। * 2 निर्दिष्ट बिंदुओं के बीच एक सीधी रेखा को प्लॉट करने के लिए फ्लोटिंग-पॉइंट गणित का उपयोग करता है। बाढ़ भराव। एक जुड़े क्षेत्र को एक रंग से भरता है। छवि बहाल करना। फ़ोटो को पुनर्स्थापित करें, छवियों को सुधारें। ज़ियाओलिन वू की लाइन एल्गोरिदम। लाइन एंटीएलियासिंग। पेंटर का एल्गोरिदम। 3-आयामी दृश्यों के दृश्य भागों का पता लगाता है। किरण पर करीबी नजर रखना। यथार्थवादी छवि प्रतिपादन। फोंग छायांकन। एक रोशनी मॉडल और 3 डी कंप्यूटर ग्राफिक्स में एक प्रक्षेप विधि। गौड़ छायांकन।3 डी ऑब्जेक्ट की सतह पर प्रकाश और रंग के अलग-अलग प्रभावों का अनुकरण करें। स्कैनलाइन रेंडरिंग। एक काल्पनिक रेखा को स्थानांतरित करके एक छवि का निर्माण करता है। वैश्विक चमक। अन्य वस्तुओं से प्रत्यक्ष रोशनी और परावर्तन करता है। प्रक्षेप। डिजिटल ज़ूम जैसे नए डेटा बिंदुओं का निर्माण। Resynthesizer। फ़ोटो पर एक ऑब्जेक्ट निकालें और फ़ोटोशॉप और द जिम्प द्वारा उपयोग की जाने वाली पृष्ठभूमि का पुनर्निर्माण करें। Resynthesizer ट्यूटोरियल। ढलान-अवरोधन एल्गोरिथ्म। यह एक रेखा खींचने के लिए ढलान-अवरोधन फार्मूला का कार्यान्वयन है। प्रक्षेप प्रक्षेप। Runge की घटना के साथ त्रुटि को कम करता है। 3 डी भूतल ट्रैकर प्रौद्योगिकी। एक vidéo में दीवारों पर चित्र या vidéo जोड़ना, छिपी हुई सतहों को ध्यान में रखा जा रहा है।

सूचियाँ, सरणियाँ और पेड़

खोज कर

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

छंटाई

बाइनरी ट्री सॉर्ट। एक बाइनरी ट्री, वृद्धिशील, सॉर्टिंग सॉर्ट के समान। Bogosort। डेस्क कार्ड का अक्षम यादृच्छिक क्रम। बबल शॅाट। सूचकांकों के प्रत्येक जोड़े के लिए, ऑर्डर से बाहर होने पर आइटम स्वैप करें। बाल्टी की तरह। बाल्टी में एक सूची को विभाजित करें और उन्हें व्यक्तिगत रूप से सॉर्ट करें। कबूतर को सॉर्ट करता है। कॉकटेल सॉर्ट (या द्विदिश बुलबुला, शेकर, रिपल, शटल, हैप्पी ऑवर सॉर्ट)। बुलबुले की भिन्नता इस प्रकार होती है कि दोनों दिशाओं में सूची से होकर गुजरती है। कंघी की छँटाई। बुलबुला प्रकार की कुशल भिन्नता जो "कछुए" को समाप्त करती है, सूची के अंत के पास छोटे मान और अंतराल बीवियों के मूल्यों का उपयोग करता है। गिनती की तरह।यह इस लंबाई की एक सरणी बी बनाने के लिए सूची ए में संख्याओं की श्रेणी का उपयोग करता है। B में अनुक्रमित का उपयोग यह गणना करने के लिए किया जाता है कि A में कितने तत्व हैं जिनका मूल्य i से कम है। सूक्ति प्रकार। सम्मिलन प्रकार के समान, सिवाय इसके कि एक तत्व को उसके उचित स्थान पर ले जाना स्वैप की एक श्रृंखला द्वारा पूरा किया जाता है, जैसा कि बुलबुला सॉर्ट में होता है। ढेर बनाएं और छांटें। सूची को एक ढेर में परिवर्तित करें, ढेर से सबसे बड़े तत्व को हटाते रहें और सूची के अंत में जोड़ दें। सम्मिलन सॉर्ट। निर्धारित करें कि वर्तमान आइटम सॉर्ट किए गए लोगों की सूची में कहां है, और इसे वहां डालें। Introsort। या आत्मनिरीक्षण प्रकार। यह क्विकसॉर्ट में शुरू होता है और कुछ पुनरावृत्ति स्तर पर हीप्सॉर्ट में बदल जाता है। मर्ज़ सॉर्ट।सूची की पहली और दूसरी छमाही को अलग-अलग क्रमबद्ध करें, फिर क्रमबद्ध सूचियों को मर्ज करें। पैनकेक सॉर्ट। किसी क्रम के कुछ उपसर्ग के उल्टे तत्व। कबूतर की तरह। किसी सरणी के सभी तत्वों के साथ एक खाली सरणी भरें, क्रम में। डाकिया क्रमबद्ध। बाल्टी प्रकार के पदानुक्रमित संस्करण, डाकघरों द्वारा उपयोग किए जाते हैं। जल्दी से सुलझाएं। सूची को दो में विभाजित करें, पहली सूची पर सभी वस्तुओं के साथ दूसरी सूची पर सभी वस्तुओं से पहले आने वाली ;; फिर दो सूचियों को क्रमबद्ध करें। अक्सर पसंद का तरीका। मूलांक छाँटे। अंकों से संबंधित कुंजी, या अंकों को संसाधित करके पूर्णांक बनाता है। चयन छांटना। शेष तत्वों में से सबसे छोटा उठाओ, इसे सॉर्ट की गई सूची के अंत में जोड़ें। खोल छाँटे।मूल्यों के बीच अंतराल के उपयोग के साथ सम्मिलन प्रकार में सुधार करता है। Smoothsort। ढेर देखें। स्टोकेस्टिक प्रकार। बोगोसॉर्ट देखें।

और बहुत सारे...


0

आपने प्रश्न शीर्ष लेख में दो प्रश्न पूछे हैं, इसलिए मैं उन दोनों का उत्तर दूंगा।

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

नहीं, प्रोग्रामिंग सभी एल्गोरिदम के बारे में नहीं है। प्रोग्रामिंग विनिर्देशों को लेने और उन्हें कोड में परिवर्तित करने के बारे में है जिसे निष्पादन के लिए संकलित किया जा सकता है।

उत्तर का अतिरिक्त भाग: सॉफ़्टवेयर डेवलपमेंट प्रोग्रामिंग नहीं है, और फिर भी बहुत से लोग शब्दों को भ्रमित करते हैं और उनका उपयोग परस्पर करते हैं। प्रोग्रामिंग केवल एक फ़ंक्शन या तकनीक है जो सॉफ़्टवेयर डेवलपमेंट की बड़ी प्रक्रिया है। सॉफ़्टवेयर डेवलपमेंट निश्चित रूप से सभी एल्गोरिदम के बारे में नहीं है, यह सॉफ़्टवेयर के साथ समस्याओं को हल करने और समस्याओं को कुशलतापूर्वक हल करने की अनुमति देने के लिए ध्वनि व्यापार संगत प्रक्रियाओं को लागू करने के बारे में है। जबकि सॉफ्टवेयर विकास प्रक्रियाएं - और यहां तक ​​कि स्वयं प्रोग्रामिंग - उनके स्वभाव में एल्गोरिदम प्रक्रियाएं हो सकती हैं, यह एल्गोरिदम के बारे में होने के समान नहीं है।

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