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

From Vigyanwiki
No edit summary
Line 64: Line 64:
*[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
*[https://github.com/adrianuswarmenhoven/uniformbinarysearch_go An implementation of Knuth's algorithm] in [[Go (programming language)|Go]], by [[:nl:Adrianus_Warmenhoven|Adrianus Warmenhoven]]
*[https://github.com/adrianuswarmenhoven/uniformbinarysearch_go An implementation of Knuth's algorithm] in [[Go (programming language)|Go]], by [[:nl:Adrianus_Warmenhoven|Adrianus Warmenhoven]]
[[Category: एल्गोरिदम खोजें]] [[Category: उदाहरण सी कोड वाले लेख]]


[[Category: Machine Translated Page]]
[[Category:Created On 25/06/2023]]
[[Category:Created On 25/06/2023]]
[[Category:Vigyan Ready]]
[[Category:Machine Translated Page]]
[[Category:उदाहरण सी कोड वाले लेख]]
[[Category:एल्गोरिदम खोजें]]

Revision as of 09:01, 16 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;
}

संदर्भ

बाहरी संबंध