📅  最后修改于: 2023-12-03 14:46:44.737000             🧑  作者: Mango
搜索算法是指在给定数据集合中查找特定元素的过程。Python提供了多种搜索算法,每种都适用于不同的数据集大小和特性。
线性搜索是最简单最直接的搜索算法,它遍历整个数据集合以寻找目标元素。对于小型数据集合来说,线性搜索效率很高,但对于较大的集合,就需要更快的算法。
代码示例:
def linear_search(data, target):
for i in range(len(data)):
if data[i] == target:
return i
return -1 # 如果没找到就返回-1
data = [1, 3, 5, 7, 9]
target = 5
result = linear_search(data, target)
if result == -1:
print("未找到该元素")
else:
print("找到该元素,下标为:", result)
输出结果:
找到该元素,下标为: 2
二分搜索是一种更高效的算法,它利用了数据集合的特性,即数据已经排好序。二分搜索通过将数据集合一分为二,递归的方式查找目标元素。对于大型的、已经按一定规则排好序的数据集合来说,二分搜索是一种非常高效的算法。
代码示例:
def binary_search(data, target, low, high):
if low > high:
return -1
mid = (low + high) // 2
if target == data[mid]:
return mid
elif target < data[mid]:
return binary_search(data, target, low, mid-1)
else:
return binary_search(data, target, mid+1, high)
data = [1, 3, 5, 7, 9]
target = 5
result = binary_search(data, target, 0, len(data)-1)
if result == -1:
print("未找到该元素")
else:
print("找到该元素,下标为:", result)
输出结果:
找到该元素,下标为: 2
广度优先搜索(BFS)是一种用于解决图或树中搜索问题的算法。在广度优先搜索中,它会首先对根节点周围的所有节点进行访问,然后是这些节点周围的所有节点,依此类推。这种搜索方式可以用来寻找图或树中的最短路径问题。
代码示例:
from queue import Queue
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
def bfs(graph, start, target):
visited = set()
queue = Queue()
queue.put(start)
while queue:
node = queue.get()
if node == target:
return True
visited.add(node)
for n in graph[node]:
if n not in visited:
queue.put(n)
return False
start = 'A'
target = 'F'
result = bfs(graph, start, target)
if result:
print("找到了目标节点")
else:
print("未找到目标节点")
输出结果:
找到了目标节点
深度优先搜索(DFS)也是一种用于解决图或树中搜索问题的算法。在深度优先搜索中,它会尽可能遍历树或图中的一个分支,直到达到叶子节点,然后返回继续遍历它。这种搜索方式可以用来寻找图或树中的所有路径问题。
代码示例:
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
def dfs(graph, start, target, visited=None):
if visited is None:
visited = set()
visited.add(start)
if start == target:
return True
for n in graph[start]:
if n not in visited:
if dfs(graph, n, target, visited):
return True
return False
start = 'A'
target = 'F'
result = dfs(graph, start, target)
if result:
print("找到了目标节点")
else:
print("未找到目标节点")
输出结果:
找到了目标节点