在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python搜索算法
Python樹遍歷算法
Python雙端隊列
Python隊列
Python回溯
Python棧
Python數(shù)據(jù)結(jié)構(gòu)開發(fā)環(huán)境
Python數(shù)據(jù)結(jié)構(gòu)簡介
Python算法分析
Python圖遍歷算法
Python搜索算法
Python圖
Python鏈表
Python集合
Python元組
Python字典
Python矩陣
Python高級鏈表(雙向鏈表)
Python搜索樹
Python二維數(shù)組
Python堆
Python節(jié)點
Python排序算法
Python數(shù)據(jù)結(jié)構(gòu)
Python遞歸
Python列表
Python數(shù)組
Python算法設(shè)計
Python哈希表

Python搜索算法

將數(shù)據(jù)存儲在不同的數(shù)據(jù)結(jié)構(gòu)中時,搜索是非?;镜谋匦钘l件。 最簡單的方法是遍歷數(shù)據(jù)結(jié)構(gòu)中的每個元素,并將其與要搜索的值進行匹配。 這就是所謂的線性搜索。 它效率低下,很少使用。下面創(chuàng)建一個程序演示如何實現(xiàn)一些高級搜索算法。

線性搜索

在這種類型的搜索中,逐個搜索所有項目。 每個項目都會被檢查匹配,如果找到匹配項,那么返回該特定項目,否則搜索將繼續(xù)到數(shù)據(jù)結(jié)構(gòu)的末尾。

def linear_search(values, search_for):
    search_at = 0
    search_res = False

# Match the value with each data element    
    while search_at < len(values) and search_res is False:
        if values[search_at] == search_for:
            search_res = True
        else:
            search_at = search_at + 1

    return search_res

l = [64, 34, 25, 12, 22, 11, 90]
print(linear_search(l, 12))
print(linear_search(l, 91))

當上面的代碼執(zhí)行時,它會產(chǎn)生以下結(jié)果 -

True
False

插值搜索

該搜索算法適用于所需值的探測位置。 為了使該算法正常工作,數(shù)據(jù)收集應(yīng)該以排序形式并平均分布。 最初,探針位置是集合中最大項目的位置。如果匹配發(fā)生,則返回項目的索引。 如果中間項目大于項目,則再次在中間項目右側(cè)的子數(shù)組中計算探針位置。 否則,該項目將在中間項目左側(cè)的子數(shù)組中搜索。 這個過程在子數(shù)組上繼續(xù),直到子數(shù)組的大小減小零。

有一個特定的公式來計算下面的程序中指出的中間位置。參考以下代碼的實現(xiàn) -

def intpolsearch(values,x ):
    idx0 = 0
    idxn = (len(values) - 1)

    while idx0 <= idxn and x >= values[idx0] and x <= values[idxn]:

# Find the mid point
        mid = idx0 +\
               int(((float(idxn - idx0)/( values[idxn] - values[idx0]))
                    * ( x - values[idx0])))

# Compare the value at mid point with search value 
        if values[mid] == x:
            return "Found "+str(x)+" at index "+str(mid)

        if values[mid] < x:
            idx0 = mid + 1
    return "Searched element not in the list"


l = [2, 6, 11, 19, 27, 31, 45, 121]
print(intpolsearch(l, 2))

當上面的代碼執(zhí)行時,它會產(chǎn)生以下結(jié)果 -

Found 2 at index 0