對於有序的列表(假設公升序),我們可以估計目標項的大概位置。根據這一思路,我們能省去一些不必要的過程以達到快速搜尋的目的。
過程:1.找到列表的中間位置並與目的項進行比較。如果相等,則返回改位置
2.若不相等,假設目標項小於當前項,那麼演算法將搜尋中間位置以前的部分,並重複上述操作(反之亦反)
def binarysearch(target, lyst):
"""returns the position of the target item if found,
or -1 otherwise."""
left = 0
right = len(lyst) - 1
while left <= right:
midpoint = (left + right) // 2
if target == lyst[midpoint]:
return midpoint
elif target < lyst[midpoint]:
right = midpoint - 1
else:
left = midpoint + 1
return -1
二叉樹的深度和廣度搜尋演算法
度優先搜尋演算法 depth first search 是搜尋演算法的一種。是沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所有邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中乙個作為源節...
演算法 二叉搜尋樹的後序遍歷序列
description 二叉搜尋樹的後序遍歷序列 問題 題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。思路 1 判斷長度極端情況,為零則直接返回false 2 判斷為節點小於等於頭節點的極端情況 3...
二叉搜尋樹的後序序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。1 因為是二叉搜尋樹 所以每個結點的左邊都小於根結點,右邊都大於根結點 2 而二叉搜尋樹的子樹也是二叉搜尋樹,因此也符合1 3 因此,除了最後結點之外的序列前部分...