2011-01-19 13 views
6

क्या कोई मुझे उदाहरण दे सकता है कि हम समूह, मोनोइड्स और अंगूठियां जैसे बीजगणितीय संरचनाओं का उपयोग करके हमारे कोड पुन: प्रयोज्यता को कैसे सुधार सकते हैं? (या मैं प्रोग्रामिंग में इस तरह के ढांचे का उपयोग कैसे कर सकता हूं, कम से कम जानना कि मैंने हाईस्कूल में उस सिद्धांत को कुछ भी नहीं सीखा है)।बीजगणितीय संरचना और प्रोग्रामिंग

मैंने सुना है कि यह संभव है लेकिन मैं प्रोग्रामिंग में उन्हें लागू करने और कट्टरपंथी कट्टर गणित को लागू करने में एक तरीका नहीं समझ सकता।

+2

उन अकेले आइसोमोर्फिज़्म के बारे में क्या कर सकते हैं? – Blender

+1

किसी और के बारे में सोच [monads] ​​(http://en.wikipedia.org/wiki/Monad_ (functional_programming)) (और फिर "प्रतीक्षा करें, मैं इसका सुझाव देने के लिए कौन हूं? मुझे प्रोग्रामिंग अवधारणा मुश्किल से मिलती है, गणित बहुत कम इसके पीछे सामान - मुझे यह भी नहीं पता कि क्या इसे सही ढंग से 'मोनाड' कहा जाता है)। – delnan

उत्तर

1

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

0

के रूप में मुझे पता नहीं इस सामग्री कंप्यूटर विज्ञान की दुनिया में अस्तित्व में था, कृपया इस जवाब उपेक्षा;)


मैं दो क्षेत्रों नहीं लगता कि (कोई यमक इरादा) किसी भी ओवरलैप है। अंगूठियां/फ़ील्ड/समूह गणितीय ऑब्जेक्ट्स से निपटते हैं। किसी क्षेत्र की परिभाषा के एक भाग पर विचार करें:

एफ में प्रत्येक के लिए, एफ में एक तत्व मौजूद है- जैसे कि + (-a) = 0. इसी प्रकार, किसी भी अन्य एफ के लिए 0 से, एफ में एक -1^1 तत्व मौजूद है, जैसे कि एक^-1 = 1. (तत्व ए + (-बी) और ए बी^-1 को भी ए-बी और ए/बी, क्रमशः।) दूसरे शब्दों में, घटाव और विभाजन संचालन मौजूद हैं।

प्रोग्रामिंग के मामले में इसका क्या मतलब है? मुझे निश्चित रूप से Python में list ऑब्जेक्ट का एक योजक उलटा नहीं हो सकता है (ठीक है, मैं केवल वस्तु को नष्ट कर सकता हूं, लेकिन यह गुणात्मक उलटा है। मुझे लगता है कि आप कहीं पाइथन-रिंग को परिभाषित करने की कोशिश कर रहे हैं, लेकिन यह अंत में काम नहीं करेगा)। यहां तक ​​कि lists ...

कोड पठनीयता के लिए के रूप में विभाजित के बारे में मत सोचो, मैं बिल्कुल पता नहीं है कि यह कैसे भी लागू किया जा सकता है, तो इस आवेदन अप्रासंगिक है।

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

+0

"क्या बिल्ली ... प्रोग्रामिंग?": एक बीजगणितीय संरचना परिभाषा एक विशेष प्रकार के साथ एक समारोह है। एक monoid के लिए, यह '() | से एक समारोह है जी * जी -> जी ', यानी। पहचान तत्व या गुणा को वापस करने वाला एक फ़ंक्शन। यह बाइनरी पेड़ के रूप में अभिव्यक्ति का मूल्यांकन करने वाले फ़ंक्शन के समान है, है ना? वास्तव में बाइनरी पेड़ और मोनोइड्स समान अवधारणाएं हैं। यही कारण है कि हमारे पास कार्यात्मक प्रोग्रामिंग में * बीजगणितीय डेटा प्रकार * शब्द है। –

+0

हे, यह दिखाता है कि मेरे बैग में मेरे पास बहुत अधिक कंप्यूटर विज्ञान नहीं है। मुझे बाइनरी पेड़ों और उन मोनोइड चीजों में और अधिक देखना होगा। जानकारी के लिए धन्यवाद! – Blender

0

कार्यात्मक प्रोग्रामिंग में, esp। हास्केल, उन कार्यक्रमों के निर्माण के लिए आम है जो राज्यों को मोनैड के रूप में बदलते हैं। ऐसा करने का मतलब है कि आप बहुत अलग कार्यक्रमों में मोनैड पर जेनेरिक एल्गोरिदम का पुन: उपयोग कर सकते हैं।

सी ++ मानक टेम्पलेट लाइब्रेरी में monoid की अवधारणा है। विचार फिर से है कि जेनेरिक एल्गोरिदम को अपनी शुद्धता के लिए मोनोइड्स के सिद्धांतों को संतुष्ट करने के लिए एक ऑपरेशन की आवश्यकता हो सकती है।

उदा।, अगर हम टी टाइप कर सकते हैं तो हम ऑपरेशन के तहत बंद (संख्या, स्ट्रिंग, जो कुछ भी) चालू हैं, हम जानते हैं कि हमें कुछ त्रुटियों की जांच नहीं करनी होगी; हम हमेशा वैध टी वापस प्राप्त करते हैं। अगर हम साबित कर सकते हैं कि ऑपरेशन (x * (y * z) = (x * y) * z) सहयोगी है, तो हम फोर्क-जॉइन आर्किटेक्चर का पुन: उपयोग कर सकते हैं; विभिन्न पुस्तकालयों में समानांतर प्रोग्रामिंग का एक सरल लेकिन तरीका।

0

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

0

सूचियां एक जनरेटर के साथ मुफ़्त मोनोइड्स हैं, बाइनरी पेड़ समूह हैं। आपके पास या तो सीमित या अनंत संस्करण है।

शुरू अंक:

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

उदाहरण: प्रकार ट्री एक

Tree A =() | Tree A | Tree A * Tree A 

जो एक समाकृतिकता (*) के अस्तित्व के रूप में पढ़ता है (मैं G = Tree A सेट)

1 + G + G x G -> G 

जो एक समूह संरचना

रूप में ही है
phi : 1 + G + G x G -> G 
() € 1   -> e 
x € G   -> x^(-1) 
(x, y) € G x G -> x * y 

दरअसल, बाइनरी पेड़ अभिव्यक्तियों का प्रतिनिधित्व कर सकते हैं, और वे बीजगणितीय संरचना बनाते हैं ure। जी का एक तत्व या तो पहचान, एक तत्व के विपरीत या दो तत्वों के उत्पाद के रूप में पढ़ता है। एक बाइनरी पेड़ या तो एक पत्ता, एक पेड़ या पेड़ की एक जोड़ी है। आकार में समानता पर ध्यान दें।

(*) साथ ही एक सार्वभौमिक संपत्ति, लेकिन वे उनमें से दो (सीमित पेड़ या अनंत आलसी पेड़) हैं इसलिए मैं विवरण में नहीं रहूंगा।

+0

इसके अलावा, एक पेड़ सहयोगी नहीं है, है ना? (दुर्भाग्य से, मुझे वास्तव में श्रेणी सिद्धांत नहीं पता है, इसलिए मुझे नहीं पता कि यह इन चीजों को कैसे देखता है ...) – comingstorm

+0

@ आने वाली बात: अच्छी टिप्पणी।समूहों के लिए, एक * कम्यूटिव आरेख * है जिसमें वर्णन किया गया है कि 'phi' एप्लिकेशन सहयोगीता के संबंध में कैसे व्यवहार करता है। यदि आप इसे पेड़ों में अनुवाद करना चाहते हैं, तो आप एक * predicate * लिखेंगे जब आपको दो पेड़ बराबर होंगे। पेड़ अभिव्यक्ति (यानी वाक्यविन्यास) का प्रतिनिधित्व करते हैं, समूह कानून की साझेदारी पेड़ में * अर्थशास्त्र * देते समय खेल में आती है। –