数据结构实验七 查找
- 格式:pdf
- 大小:67.28 KB
- 文档页数:7
数据结构实验七 查找
数据结构实验七 查找
一、实验目的
本实验旨在通过实际操作和编程实现不同查找算法,并对其进行性能比较。
二、实验内容
1.线性查找算法
2.二分查找算法
3.插值查找算法
4.哈希查找算法
三、线性查找算法
线性查找算法是最简单的查找算法之一,它的基本思想是从第一个元素开始逐个比较,直到找到目标元素或遍历完整个数组。
1.算法步骤:
●从数组的第一个元素开始遍历,比较当前元素与目标元素是否相等。
●如果相等,则查找成功,返回当前元素的索引。 ●如果不相等,继续遍历下一个元素,重复上述步骤,直到遍历完整个数组。
●如果遍历完数组仍未找到目标元素,则查找失败,返回.1.
2.算法示例代码(Python):
```
def linear_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return .1
```
四、二分查找算法
二分查找算法适用于有序数组,它通过每次将目标值与数组的中间元素进行比较,并根据比较结果缩小搜索范围。
1.算法步骤:
●初始化左边界为数组的第一个元素的索引,右边界为数组的最后一个元素的索引。 ●在每一次循环中,找到数组中间元素的索引(mid)。
●将目标值与中间元素进行比较:
●如果相等,则查找成功,返回中间元素的索引。
●如果目标值大于中间元素,则说明目标值在中间元素的右侧,将左边界更新为mid + 1.
●如果目标值小于中间元素,则说明目标值在中间元素的左侧,将右边界更新为mid ●1.
●重复上述步骤,直到左边界大于右边界,表示查找失败。
2.算法示例代码(Python):
```
def binary_search(arr, target):
left = 0
right = len(arr) ●1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid elif arr[mid] < target:
left = mid + 1
else:
right = mid ●1
return .1
```
五、插值查找算法
插值查找算法是对二分查找算法的改进,它通过根据目标值在数组中的分布情况,更准确地预测目标值的位置,从而提高查找效率。
1.算法步骤:
●计算插值公式:
●pos = left + (right ●left) (target ●arr[left]) / (arr[right] ●arr[left])
●如果目标值等于arr[pos],则查找成功,返回pos。
●如果目标值小于arr[pos],则说明目标值在左侧,更新right为pos ●1. ●如果目标值大于arr[pos],则说明目标值在右侧,更新left为pos + 1.
●重复上述步骤,直到查找成功或左边界大于右边界,表示查找失败。
2.算法示例代码(Python):
```
def interpolation_search(arr, target):
left = 0
right = len(arr) ●1
while left <= right and arr[left] <= target <= arr[right]:
pos = left + (right ●left) (target ●arr[left]) // (arr[right] ●arr[left])
if arr[pos] == target:
return pos
elif arr[pos] < target:
left = pos + 1
else: right = pos ●1
return .1
```
六、哈希查找算法
哈希查找算法利用哈希函数将目标值映射到数组的索引,从而快速找到目标值。
1.算法步骤:
●建立哈希表,将数组中的元素进行哈希计算,并将结果存储在对应的索引位置。
●通过哈希函数计算目标值的索引。
●在目标值的索引位置进行查找,如果找到目标值,则查找成功。
●如果目标值的索引位置为空或不等于目标值,说明目标值不存在。
2.算法示例代码(Python):
```
def hash_search(arr, target):
hash_table = [None] len(arr) for i in range(len(arr)):
index = arr[i] % len(arr)
while hash_table[index] is not None:
index = (index + 1) % len(arr)
hash_table[index] = arr[i]
index = target % len(arr)
while hash_table[index] is not None:
if hash_table[index] == target:
return index
index = (index + 1) % len(arr)
return .1
```
七、附件
本文档不涉及任何附件。
八、法律名词及注释
本文档不涉及任何法律名词及注释。