【问题标题】:How to write the Ternary Search alogrithm?如何编写三元搜索算法?
【发布时间】:2021-10-11 22:36:32
【问题描述】:

搜索排序的算法 n 项的列表,通过将其划分为几乎 n/3 项的三个子列表。该算法发现 可能包含给定项目的子列表并将其分成三个较小的子列表 大小相等。算法会重复这个过程,直到找到该项目或得出该项目的结论 不在列表中

【问题讨论】:

    标签: computer-science


    【解决方案1】:

    您在那里描述的称为Ternary Searching Algorithm,它类似于二分搜索,不同之处在于我们将集合分为三个子集。以下是 C++ 的解释:

    // Function to perform Ternary Search
    int ternarySearch(int l, int r, int key, int ar[])
    {
        if (r >= l) {
     
            // Find the mid1 and mid2
            int mid1 = l + (r - l) / 3;
            int mid2 = r - (r - l) / 3;
     
            // Check if key is present at any mid
            if (ar[mid1] == key) {
                return mid1;
            }
            if (ar[mid2] == key) {
                return mid2;
            }
     
            // Since key is not present at mid,
            // check in which region it is present
            // then repeat the Search operation
            // in that region
            if (key < ar[mid1]) {
     
                // The key lies in between l and mid1
                return ternarySearch(l, mid1 - 1, key, ar);
            }
            else if (key > ar[mid2]) {
     
                // The key lies in between mid2 and r
                return ternarySearch(mid2 + 1, r, key, ar);
            }
            else {
     
                // The key lies in between mid1 and mid2
                return ternarySearch(mid1 + 1, mid2 - 1, key, ar);
            }
        }
     
        // Key not found
        return -1;
    }
     
    // Driver code
    int main()
    {
        int l, r, p, key;
     
        // Get the array
        // Sort the array if not sorted
        int ar[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     
        // Starting index
        l = 0;
     
        // length of array
        r = 9;
     
        // Checking for 5
     
        // Key to be searched in the array
        key = 5;
     
        // Search the key using ternarySearch
        p = ternarySearch(l, r, key, ar);
     
        // Print the result
        cout << "Index of " << key
             << " is " << p << endl;
     
        // Checking for 50
     
        // Key to be searched in the array
        key = 50;
     
        // Search the key using ternarySearch
        p = ternarySearch(l, r, key, ar);
     
        // Print the result
        cout << "Index of " << key
             << " is " << p << endl;
    }
     
    

    【讨论】:

    • 我被困在将数组分成 3 个子数组,现在我明白了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2017-10-13
    • 2018-06-06
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多