संख्या आधार प्रणालियों पर आधारित एल्गोरिदम? [बन्द है]


87

मैंने हाल ही में देखा है कि रचनात्मक आधारों में संख्याओं के चतुर उपयोगों के आधार पर या संपूर्ण रूप से वहां बहुत सारे एल्गोरिदम हैं। उदाहरण के लिए:

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

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


5
मुझे भी सवाल पसंद है, लेकिन आप 'सही' उत्तर का चयन कैसे करते हैं? क्या यह सामुदायिक विकि होना चाहिए?
vlad

14
यह सामुदायिक विकी होना चाहिए
ब्लूराजा - डैनी पफ्लुगुएफ्ट

18
@ क्लोज वोटर: अगर एल्गोरिदम के बारे में एक सवाल एसओ पर विषय से दूर है, तो मुझे नहीं पता कि यहां विषय क्या है। सीएसएस के बारे में इडियाटिक नौसिखिया सवाल? "क्या मैं रेगेक्स प्लज़ खतरनाक कर सकता हूं"? "plz email teh codez 4 mi hoemwok"?
MAK

2
गैलेक्सी के लिए सहयात्री की गाइड: जीवन, ब्रह्मांड और सब कुछ का जवाब क्या है? डीप थॉट्स का उत्तर: 42. प्रश्न खोजने की मशीन के रूप में पृथ्वी: 9 x 6 क्या है? और यही कारण है कि सब कुछ इतना च ***** अप है। एक टीशर्ट पर देखा: 9 (बेस 13) x 6 (बेस 13) = 42 (बेस 13)। QED।
क्रिस वाल्टन

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

जवाबों:


39

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

  1. पोजिशनल नंबर सिस्टम
  2. बाइनरी नंबर (बाइनरी रैंडम-एक्सेस लिस्ट, Zeroless रिप्रेजेंटेशन, आलसी रिप्रेजेंटेशन, सेगमेंटेड रिप्रेजेंटेशन)
  3. तिरछा बाइनरी नंबर (तिरछा बाइनरी रैंडम एक्सेस लिस्ट, तिरछा द्विपद हीप्स)
  4. त्रिशंकु और चतुर्धातुक संख्याएँ

कुछ बेहतरीन ट्रिक्स, आसुत:

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

यहाँ उस अध्याय की संदर्भ सूची भी है:

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

2
+1 मेरे पास ओकासाकी की पुस्तक की एक प्रति है ... मुझे उन अध्यायों से प्यार था और उन्होंने आंशिक रूप से कहा था कि मैंने यह सवाल क्यों पूछा (बूटस्ट्रैप्ड तिरछी द्विपद ढेर बहुत शांत हैं!) मैंने इसके माध्यम से सभी तरह से नहीं पढ़ा, हालांकि शायद मुझे। इसके अलावा, मैं उन संदर्भों की जांच करूंगा; वे बहुत अच्छे लग रहे हैं।
templatetypedef

ओकासाकी की पूरी थीसिस ऑनलाइन उपलब्ध है: cs.cmu.edu/~rwh/theses/okasaki.pdf
गिगी

20

"टर्नरी नंबरों का उपयोग स्व-समान संरचनाओं को संप्रेषित करने के लिए किया जा सकता है जैसे सियरपिंस्की ट्रायंगल या कैंटर आसानी से सेट।" स्रोत

"2 डी हिल्बर्ट घटता के प्रतिनिधित्व में चतुर्थांश संख्याओं का उपयोग किया जाता है।" स्रोत

"क्वाटर-काल्पनिक अंक प्रणाली को पहली बार डोनाल्ड नुथ ने 1955 में एक हाई-स्कूल विज्ञान प्रतिभा खोज के लिए प्रस्तुत किया था। यह एक गैर-मानक स्थितिगत अंक प्रणाली है जो काल्पनिक संख्या 2i को अपने आधार के रूप में उपयोग करती है। यह सक्षम है। केवल 0, 1, 2 और 3. का उपयोग करके हर जटिल संख्या का प्रतिनिधित्व करने के लिए " स्रोत

"रोमन अंक एक विशिष्ट प्रणाली है।" स्रोत

"प्राथमिकताओं के अध्ययन के बाद सेरी को उपयोगी माना जा सकता है, क्योंकि आधार-छः में व्यक्त किए जाने पर, 2 और 3 के अलावा अंतिम अंक के रूप में 1 या 5 होता है।" स्रोत

"Sexagesimal (आधार 60) एक साठ प्रणाली है जिसका आधार साठ है। यह 3 वीं सहस्राब्दी ईसा पूर्व में प्राचीन सुमेरियों के साथ उत्पन्न हुआ था, यह प्राचीन बेबीलोनियों को दिया गया था, और इसे अभी भी उपयोग किया जाता है - एक संशोधित रूप में - मापने के लिए समय, कोण और भौगोलिक निर्देशांक जो कोण हैं। " स्रोत

आदि...

यह सूची एक अच्छा प्रारंभिक बिंदु है।


6
इनमें से कोई भी एल्गोरिदम से संबंधित नहीं है ..
ब्लूराजा - डैनी पफ्लुगुएफ्ट

11
निश्चित ही वे हैं। टर्नरी में एक सीरपिन्स्की त्रिभुज त्रिकोण का निर्माण, या सेक्सजेसिमल में भौगोलिक निर्देशांक की गणना करना। रोमन अंकों को दशमलव में बदलने के लिए एक एल्गोरिथ्म के बारे में कैसे? प्राथमिक प्रणाली के आधार पर प्राइम-नंबर खोजने वाले एल्गोरिदम के बारे में कैसे?
बेंजामिन

9

मैंने दूसरे दिन आपका प्रश्न पढ़ा, और आज एक समस्या का सामना कर रहा था: मैं एक सेट के सभी विभाजन कैसे उत्पन्न करूं? समाधान जो मुझे हुआ, और जो मैंने उपयोग किया (शायद आपके प्रश्न को पढ़ने के कारण) यह था:

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

प्रत्येक संख्या विभाजन से मेल खाती है। प्रत्येक अंक सेट में एक तत्व से मेल खाता है, और अंक का मूल्य आपको बताता है कि तत्व को किस भाग में रखा जाए।

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


3
मुझे लगता है कि यह पूरी तरह से templatetypedef के पोस्ट से चुराया गया है, यह मेरे अवचेतन में अटक गया होगा। मैंने केवल इसे छोड़ दिया है क्योंकि यह केवल बाइनरी की तुलना में अधिक आधारों के बारे में बात करता है।
बेन हॉर्नर

2
यह अधिकांश विभाजन के साथ सभी विभाजन उत्पन्न करता है, और इसमें अतिरेक होता है। कैसे 111222अलग है 222111?
नल सेट अप

7

मैं हाल ही में 0 और 2 n के बीच संख्याओं के द्विआधारी निरूपणों के आधार पर लेक्सोग्राफिक क्रम में सबसेट बनाने के लिए एक शांत एल्गोरिथ्म में आया था - 1. यह संख्याओं के बिट्स का उपयोग यह निर्धारित करने के लिए करता है कि सेट के लिए और स्थानीय रूप से पुनरावर्तक के लिए क्या तत्व चुने जाने चाहिए। उत्पन्न सेट उन्हें शाब्दिक क्रम में लाने के लिए। यदि आप उत्सुक हैं, तो मेरे पास यहां एक राइटअप है

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


2
यह सबसे सरल तरीका है सबसेट बनाने का :) :)
st0le

यह दहनशील अवधारणाओं में गणना का सबसे सरल तरीका है।
सईद अमीरी

@ st0le- मुझे लगता है कि यह मानक संस्करण की तुलना में थोड़ा पेचीदा मामला है क्योंकि यह सूची सामान्य क्रम के बजाय बिट्स के बीच एक-से-एक मैपिंग से प्राप्त करने और सेट शामिल करने के क्रम में सेट होती है।
templatetypedef

6

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


6

मैं अस्पष्ट रूप से कुछ मैट्रिक्स गुणा को तेज करने के लिए डबल बेस सिस्टम के बारे में कुछ याद रखता हूं।

डबल बेस सिस्टम एक निरर्थक प्रणाली है जो एक संख्या के लिए दो आधारों का उपयोग करती है।

 n = Sum(i=1 --> l){ c_i * 2^{a_i} * 3 ^ {b_i}, where c in {-1,1}

निरर्थक का अर्थ है कि एक संख्या को कई तरीकों से निर्दिष्ट किया जा सकता है।

आप वासिल दिमित्रोव, टोडर कुकलेव द्वारा "हाइब्रिड एल्गोरिदम के लिए मैट्रिक्स पॉलीनोमियल की गणना के लिए" लेख देख सकते हैं।

मैं जो सबसे अच्छा संक्षिप्त अवलोकन देने की कोशिश कर रहा हूं।

वे मैट्रिक्स बहुपद की गणना करने की कोशिश कर रहे थे G(N,A) = I + A + ... + A^{N-1}

G(N,A) = G(J,A) * G(K, A^J)यदि हम J = 2 के लिए आवेदन करते हैं, तो एन को चुनना कम्पोजिट है :

         / (I + A) * G(K, A^2)        , if N = 2K
G(N,A) = |
         \ I + (A + A^2) * G(K, A^2)  , if N = 2K + 1

भी,

         / (I + A + A^2) * G(K, A^3)           , if N = 3K
G(N,A) = | I + (A + A^2 + A^3) * G(K, A^3)     , if N = 3K + 1
         \ I + A * (A + A^2 + A^3) * G(K, A^3) , if N = 3K + 2

जैसा कि यह "स्पष्ट" (मज़ाकिया रूप से) है कि इनमें से कुछ समीकरण पहले सिस्टम में तेज़ हैं और कुछ दूसरे में बेहतर हैं - इसलिए यह सबसे अच्छा है जो उन पर निर्भर करता है N। लेकिन इसके लिए 2 और 3 दोनों के लिए तेज़ मोडुलो ऑपरेशन की आवश्यकता होगी। यहाँ पर डबल बेस क्यों आता है - आप मूल रूप से इन दोनों के लिए मोडुलो ऑपरेशन तेजी से कर सकते हैं, जो आपको एक संयुक्त सिस्टम देता है:

         / (I + A + A^2) * G(K, A^3)       , if N = 0 or 3 mod 6
G(N,A) = | I + (A + A^2 + A^3) * G(K, A^3) , if N = 1 or 4 mod 6
         | (I + A) * G(3K + 1, A^2)        , if N = 2 mod 6
         \ I + (A + A^2) * G(3K + 2, A^2)  , if N = 5 mod 6

बेहतर स्पष्टीकरण के लिए लेख को देखें क्योंकि मैं इस क्षेत्र का विशेषज्ञ नहीं हूं।



5

यहां "नकली सिक्का" समस्या को हल करने के लिए टर्नरी नंबरों का उपयोग करने पर एक अच्छी पोस्ट है (जहां आपको नियमित रूप से बैग का एक नकली सिक्के का पता लगाना है, जहां तक ​​संभव हो संतुलन का उपयोग करना)


यह एक बहुत बढ़िया पोस्ट था और मैंने इसे "फन विथ नंबर सिस्टम्स" नामक एक बात में प्रयोग करके समाप्त कर दिया। इसे पोस्ट के लिए बहुत - बहुत धन्यवाद!
templatetypedef

आपका स्वागत है, और खुशी है कि आप इसका उपयोग करने में सक्षम थे!
मार्टिन डीमेलो

5

हैशिंग स्ट्रिंग्स (जैसे राबिन-कार्प एल्गोरिथ्म में) अक्सर स्ट्रिंग का मूल्यांकन बेस-बी नंबर के रूप में होता है जिसमें n अंक होते हैं (जहां n स्ट्रिंग की लंबाई होती है, और b कुछ चुने हुए आधार होते हैं जो काफी बड़े होते हैं)। उदाहरण के लिए स्ट्रिंग "ABCD" को हैशड किया जा सकता है:

'A'*b^3+'B'*b^2+'C'*b^1+'D'*b^0

वर्णों के लिए ASCII मानों को प्रतिस्थापित करना और 256 का बी होना,

65*256^3+66*256^2+67*256^1+68*256^0

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



4

में Hackers Delight(एक पुस्तक हर प्रोग्रामर को मेरी आँखों में पता होना चाहिए) असामान्य आधारों के बारे में एक पूर्ण अध्याय है, जैसे -2 आधार (हाँ, सही नकारात्मक आधार) या -1 + i (मैं काल्पनिक इकाई sqrt (-1) के रूप में) आधार। इसके अलावा, मेरी गणना है कि सबसे अच्छा आधार क्या है (हार्डवेयर डिज़ाइन के संदर्भ में, सभी के लिए जो इसे पढ़ना नहीं चाहते हैं: समीकरण का हल ई है, इसलिए आप 2 या 3 के साथ जा सकते हैं, 3 थोड़ा बेहतर होगा (कारक) 1.056 गुना 2 से बेहतर) - लेकिन तकनीकी अधिक व्यावहारिक है)।

मेरे दिमाग में आने वाली अन्य चीजें ग्रे काउंटर हैं (जब आप इस प्रणाली में केवल 1 बिट परिवर्तन गिनते हैं, तो आप अक्सर मेटास्टेबिलिटी मुद्दों को कम करने के लिए हार्डवेयर डिज़ाइन में इस संपत्ति का उपयोग करते हैं) या पहले से उल्लेख किए गए हफ़मैन एन्कोडिंग के अंकन - अंकगणित एन्कोडिंग।


3

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



1

बड़ा सवाल है। सूची वास्तव में लंबी है। समय बताने का मिश्रित आधारों का एक सरल उदाहरण है (दिन | घंटे | मिनट | सेकंड | सुबह / दोपहर)

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


1
और कोई भी कैलेंडर प्रणाली - मय, चंद्र, बेबीलोन .... साथ में 1971 (एलएसडी) से पहले अंग्रेजी मुद्रा के साथ। जैसा कि आप कहते हैं कि सूची जारी है।
क्रिस वाल्टन

1

बेस 2 का उपयोग करते हुए मेरा पसंदीदा में से एक अंकगणितीय एन्कोडिंग है । इसका असामान्य है क्योंकि एल्गोरिथ्म का हार्ट बाइनरी में 0 और 1 के बीच संख्याओं के प्रतिनिधित्व का उपयोग करता है।


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