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