代码示例:
def linear_search(arr, key):
for i in range(len(arr)):
if arr[i] == key:
return i
return -1
代码分析:
线性查找算法通过遍历整个数组,逐个比较数组中的元素和目标元素,直到找到目标元素或遍历完整个数组。最坏情况下需要遍历整个数组才能找到目标元素,最好情况下只需比较一次即可找到目标元素。该算法的时间复杂度为O(n),其中n为数组的长度。
代码示例:
def binary_search(arr, low, high, key):
if low <= high:
mid = low + (high - low) // 2
if arr[mid] == key:
return mid
if arr[mid] > key:
return binary_search(arr, low, mid - 1, key)
return binary_search(arr, mid + 1, high, key)
return -1
代码分析:
二分查找算法通过将数组分成两部分,判断目标元素位于数组的哪一部分,然后在该部分进行查找。每次查找都将数组分成两部分,因此每次查找后数组的规模都会减半。最坏情况下的时间复杂度出现在需要查找的元素在数组的两端或不存在的情况,最好情况下的时间复杂度出现在目标元素就是数组的中间元素的情况。该算法的时间复杂度为O(logn),其中n为数组的长度。
代码示例:
SIZE = 10
class Node:
def __init__(self, key, value):
self.key = key
self.value = value
hashTable = [Node(-1, -1) for _ in range(SIZE)]
def hash_code(key):
return key % SIZE
def insert(key, value):
index = hash_code(key)
while hashTable[index].key != -1:
index = (index + 1) % SIZE
hashTable[index].key = key
hashTable[index].value = value
def search(key):
index = hash_code(key)
while hashTable[index].key != key:
index = (index + 1) % SIZE
return hashTable[index].value
代码分析:
哈希查找算法通过将值映射到哈希表中的索引位置,然后在该位置进行查找。平均情况下的时间复杂度为O(1),最坏情况下的时间复杂度为O(n),其中n为哈希表的大小。在哈希表中查找元素的时间复杂度主要取决于哈希函数的设计和哈希表的大小。如果哈希函数的设计合理且哈希表的大小足够大,哈希查找算法可以实现快速查找。然而,当哈希冲突较多时,查找性能可能会下降,导致最坏情况下的时间复杂度为O(n)。以上代码示例展示了如何使用哈希查找来查找目标元素。