समान द्विभाजी अन्वेषण: Difference between revisions

From Vigyanwiki
(Created page with "यूनिफ़ॉर्म द्विआधारी खोज , डोनाल्ड नुथ द्वारा आविष्कृत और नुथ...")
 
(TEXT)
Line 1: Line 1:
यूनिफ़ॉर्म [[ द्विआधारी खोज ]], [[डोनाल्ड नुथ]] द्वारा आविष्कृत और नुथ की ''[[कंप्यूटर प्रोग्रामिंग की कला]]'' में दिए गए क्लासिक बाइनरी सर्च एल्गोरिदम का एक अनुकूलन है। यह प्रत्येक पुनरावृत्ति पर ऊपरी और निचली सीमा के मध्यबिंदु को लेने के बजाय, एकल सरणी सूचकांक को अद्यतन करने के लिए एक लुकअप तालिका का उपयोग करता है; इसलिए, इसे आर्किटेक्चर (जैसे नथ के [[मिक्स]]) के लिए अनुकूलित किया गया है
'''समान द्विभाजी अन्वेषण''', [[डोनाल्ड नुथ]] द्वारा आविष्कृत और नुथ की ''[[कंप्यूटर प्रोग्रामिंग की कला]]'' में दिए गए उत्कृष्ट द्विभाजी अन्वेषण कलन विधि का एक अनुकूलन है। यह प्रत्येक पुनरावृत्ति पर ऊपरी और निचली सीमा के मध्यबिंदु को लेने के बदले, एकल सरणी सूचकांक को अद्यतन करने के लिए एक लुकअप टेबल का उपयोग करता है; इसलिए, इसे संरचना (जैसे नथ के [[मिक्स|मिश्रण]]) के लिए अनुकूलित किया गया है।


*एक टेबल लुकअप आम तौर पर एक जोड़ और एक बदलाव से तेज़ होता है, और
*एक टेबल लुकअप सामान्यतः एक जोड़ और शिफ्ट से तेज़ होता है, और
*कई खोजें एक ही सारणी पर, या एक ही लंबाई की कई सारणियों पर की जाएंगी
*कई खोज एक ही सरणी पर, या एक ही लंबाई की कई सरणियों पर की जाएंगी


==सी कार्यान्वयन==
==C कार्यान्वयन==
[[सी (प्रोग्रामिंग भाषा)]] में लागू होने पर एकसमान [[बाइनरी खोज एल्गोरिदम]] इस तरह दिखता है।
[[सी (प्रोग्रामिंग भाषा)|C (प्रोग्रामिंग भाषा)]] में उपयोजित होने पर एकसमान [[बाइनरी खोज एल्गोरिदम|द्विभाजी अन्वेषण कलन विधि]] इस प्रकार दिखती है।
<!-- Please don't break this code. Test before editing! -->
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
#define LOG_N 4
#define LOG_N 4
Line 59: Line 58:
}
}
</syntaxhighlight>
</syntaxhighlight>


==संदर्भ==
==संदर्भ==
*[[Donald Knuth|Knuth]]. ''[[The Art of Computer Programming]]'', Volume 3. Page 412, Algorithm C.
*[[Donald Knuth|Knuth]]. ''[[The Art of Computer Programming]]'', Volume 3. Page 412, Algorithm C.
==बाहरी संबंध==
==बाहरी संबंध==
*[https://github.com/adrianuswarmenhoven/uniformbinarysearch_go/blob/master/Pascal/unizoek.pas An implementation of Knuth's algorithm] in [[Pascal (programming language)|Pascal]], by Han de Bruijn
*[https://github.com/adrianuswarmenhoven/uniformbinarysearch_go/blob/master/Pascal/unizoek.pas An implementation of Knuth's algorithm] in [[Pascal (programming language)|Pascal]], by Han de Bruijn

Revision as of 11:54, 6 July 2023

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

  • एक टेबल लुकअप सामान्यतः एक जोड़ और शिफ्ट से तेज़ होता है, और
  • कई खोज एक ही सरणी पर, या एक ही लंबाई की कई सरणियों पर की जाएंगी

C कार्यान्वयन

C (प्रोग्रामिंग भाषा) में उपयोजित होने पर एकसमान द्विभाजी अन्वेषण कलन विधि इस प्रकार दिखती है।

#define LOG_N 4

static int delta[LOG_N];

void make_delta(int N)
{
    int power = 1;
    int i = 0;

    do {
        int half = power;
        power <<= 1;
        delta[i] = (N + half) / power;
    } while (delta[i++] != 0);
}

int unisearch(int *a, int key)
{
    int i = delta[0] - 1;  /* midpoint of array */
    int d = 0;

    while (1) {
        if (key == a[i]) {
            return i;
        } else if (delta[d] == 0) {
            return -1;
        } else {
            if (key < a[i]) {
                i -= delta[++d];
            } else {
                i += delta[++d];
            }
        }
    }
}

/* Example of use: */
#define N 10

int main(void)
{
    int a[N] = {1, 3, 5, 6, 7, 9, 14, 15, 17, 19};

    make_delta(N);

    for (int i = 0; i < 20; ++i)
        printf("%d is at index %d\n", i, unisearch(a, i));

    return 0;
}

संदर्भ

बाहरी संबंध