请分别使用顺序查找、折半查找和索引查找算法来进行该单词的查找。 创建三个python源文件,分别在其中编写 3 种算法的程序,具体如下: (1)打开包含英文单词的文件,读取其中所有的英文单词。 (2)将所有的英文单词依次存入一个顺序表 ST 中。 (3)由用户输入一个单词,分别利用顺序查找、折半查找和索引查找算法查找该单词。 (4)对这 3 种算法的性能进行比较。
时间: 2024-02-13 14:59:50 浏览: 60
非常抱歉,我无法创建三个 Python 源文件,但我可以为您提供每种算法的 Python 代码示例,并进行性能比较。
首先,我们需要一个包含英文单词的文件。我们可以使用以下代码创建一个包含 10,000 个单词的文件:
```python
import random
import string
with open('words.txt', 'w') as f:
for i in range(10000):
word = ''.join(random.choice(string.ascii_lowercase) for i in range(5))
f.write(word + '\n')
```
现在我们有了一个包含 10,000 个随机生成的 5 个字母组成的单词的文件。接下来,我们可以编写顺序查找、折半查找和索引查找算法的代码。
1. 顺序查找算法
顺序查找算法是一种简单的查找算法,它从列表的第一个元素开始,依次比较每个元素,直到找到目标元素或搜索到列表的末尾。以下是顺序查找算法的 Python 代码:
```python
def sequential_search(lst, target):
for i in range(len(lst)):
if lst[i] == target:
return i
return -1
```
2. 折半查找算法
折半查找算法是一种更快的查找算法,它要求列表必须是有序的。它首先将列表的中间元素与目标元素进行比较,如果相等,则返回该元素的索引。如果目标元素小于中间元素,则在列表的左半部分继续查找,否则在右半部分查找。以下是折半查找算法的 Python 代码:
```python
def binary_search(lst, target):
left, right = 0, len(lst) - 1
while left <= right:
mid = (left + right) // 2
if lst[mid] == target:
return mid
elif lst[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
```
3. 索引查找算法
索引查找算法是一种更快的查找算法,它要求列表必须是有序的。它首先将列表分成若干个块,每个块包含一定数量的元素。然后,它在每个块中找到一个关键字,称为索引项。当我们需要查找一个元素时,我们首先使用索引项来确定它所在的块,然后在该块中进行顺序查找。以下是索引查找算法的 Python 代码:
```python
def index_search(lst, target):
block_size = int(len(lst) ** 0.5)
index_items = [lst[i] for i in range(0, len(lst), block_size)]
index = binary_search(index_items, target)
if index == -1:
return -1
else:
block_start = index * block_size
block_end = min(block_start + block_size, len(lst))
return sequential_search(lst[block_start:block_end], target)
```
现在我们已经编写了三种不同的查找算法的代码,我们可以测试它们的性能。以下是测试代码:
```python
import time
# 读取单词列表
with open('words.txt') as f:
words = [line.strip() for line in f]
# 测试顺序查找算法的性能
start = time.time()
for word in words:
sequential_search(words, word)
end = time.time()
print('顺序查找算法的平均查询时间:', (end - start) / len(words))
# 测试折半查找算法的性能
sorted_words = sorted(words)
start = time.time()
for word in words:
binary_search(sorted_words, word)
end = time.time()
print('折半查找算法的平均查询时间:', (end - start) / len(words))
# 测试索引查找算法的性能
start = time.time()
for word in words:
index_search(sorted_words, word)
end = time.time()
print('索引查找算法的平均查询时间:', (end - start) / len(words))
```
这个测试程序将读取单词列表,然后在每个算法上运行相同的查询,以计算每个查询的平均运行时间。通过运行这个测试程序,我们可以比较不同算法的性能。顺序查找算法的平均查询时间应该最长,索引查找算法的平均查询时间应该最短,折半查找算法的平均查询时间应该介于两者之间。
阅读全文