请分别使用顺序查找、折半查找和索引查找算法来进行该单词的查找。 创建三个python源文件,分别在其中编写 3 种算法的程序,具体如下: (1)打开包含英文单词的文件,读取其中所有的英文单词。 (2)将所有的英文单词依次存入一个顺序表 ST 中。 (3)由用户输入一个单词,分别利用顺序查找、折半查找和索引查找算法查找该单词。 (4)对这 3 种算法的性能进行比较
时间: 2024-02-09 22:13:02 浏览: 60
好的,下面是顺序查找、折半查找和索引查找三个算法的Python代码实现。
顺序查找:
```python
# 顺序查找
def sequential_search(word_list, word):
for i, w in enumerate(word_list):
if w == word:
return i
return -1
# 打开包含英文单词的文件,读取其中所有的英文单词
with open('words.txt', 'r') as f:
words = [line.strip() for line in f]
# 将所有的英文单词依次存入一个顺序表 ST 中
ST = words
# 由用户输入一个单词
word = input("请输入要查找的单词:")
# 利用顺序查找算法查找该单词
index = sequential_search(ST, word)
if index != -1:
print(f"顺序查找:单词 {word} 在顺序表 ST 中的索引为 {index}")
else:
print(f"顺序查找:单词 {word} 不在顺序表 ST 中")
```
折半查找:
```python
# 折半查找
def binary_search(word_list, word):
left, right = 0, len(word_list) - 1
while left <= right:
mid = (left + right) // 2
if word_list[mid] == word:
return mid
elif word_list[mid] < word:
left = mid + 1
else:
right = mid - 1
return -1
# 打开包含英文单词的文件,读取其中所有的英文单词
with open('words.txt', 'r') as f:
words = [line.strip() for line in f]
# 将所有的英文单词依次存入一个顺序表 ST 中
ST = words
# 由用户输入一个单词
word = input("请输入要查找的单词:")
# 利用折半查找算法查找该单词
index = binary_search(ST, word)
if index != -1:
print(f"折半查找:单词 {word} 在顺序表 ST 中的索引为 {index}")
else:
print(f"折半查找:单词 {word} 不在顺序表 ST 中")
```
索引查找:
```python
# 索引查找
def index_search(word_list, word, index):
if word not in index:
return -1
block_index = index[word]
block_start, block_end = block_index[0], block_index[-1]
for i in range(block_start, block_end + 1):
if word_list[i] == word:
return i
return -1
# 打开包含英文单词的文件,读取其中所有的英文单词
with open('words.txt', 'r') as f:
words = [line.strip() for line in f]
# 将所有的英文单词依次存入一个顺序表 ST 中
ST = words
# 构建索引
index = {}
block_size = 1000
for i in range(0, len(words), block_size):
block_end = min(i + block_size, len(words))
index[words[i]] = (i, block_end - 1)
# 由用户输入一个单词
word = input("请输入要查找的单词:")
# 利用索引查找算法查找该单词
index = index_search(ST, word, index)
if index != -1:
print(f"索引查找:单词 {word} 在顺序表 ST 中的索引为 {index}")
else:
print(f"索引查找:单词 {word} 不在顺序表 ST 中")
```
我们可以使用time模块来比较这3种算法的性能:
```python
import time
# 顺序查找
def sequential_search(word_list, word):
for i, w in enumerate(word_list):
if w == word:
return i
return -1
# 折半查找
def binary_search(word_list, word):
left, right = 0, len(word_list) - 1
while left <= right:
mid = (left + right) // 2
if word_list[mid] == word:
return mid
elif word_list[mid] < word:
left = mid + 1
else:
right = mid - 1
return -1
# 索引查找
def index_search(word_list, word, index):
if word not in index:
return -1
block_index = index[word]
block_start, block_end = block_index[0], block_index[-1]
for i in range(block_start, block_end + 1):
if word_list[i] == word:
return i
return -1
# 打开包含英文单词的文件,读取其中所有的英文单词
with open('words.txt', 'r') as f:
words = [line.strip() for line in f]
# 将所有的英文单词依次存入一个顺序表 ST 中
ST = words
# 构建索引
index = {}
block_size = 1000
for i in range(0, len(words), block_size):
block_end = min(i + block_size, len(words))
index[words[i]] = (i, block_end - 1)
# 由用户输入一个单词
word = input("请输入要查找的单词:")
# 测试顺序查找的性能
start_time = time.time()
index = sequential_search(ST, word)
end_time = time.time()
if index != -1:
print(f"顺序查找:单词 {word} 在顺序表 ST 中的索引为 {index}")
else:
print(f"顺序查找:单词 {word} 不在顺序表 ST 中")
print(f"顺序查找的运行时间为:{end_time - start_time:.6f}秒")
# 测试折半查找的性能
ST.sort()
start_time = time.time()
index = binary_search(ST, word)
end_time = time.time()
if index != -1:
print(f"折半查找:单词 {word} 在顺序表 ST 中的索引为 {index}")
else:
print(f"折半查找:单词 {word} 不在顺序表 ST 中")
print(f"折半查找的运行时间为:{end_time - start_time:.6f}秒")
# 测试索引查找的性能
start_time = time.time()
index = index_search(ST, word, index)
end_time = time.time()
if index != -1:
print(f"索引查找:单词 {word} 在顺序表 ST 中的索引为 {index}")
else:
print(f"索引查找:单词 {word} 不在顺序表 ST 中")
print(f"索引查找的运行时间为:{end_time - start_time:.6f}秒")
```
这样就可以比较三种算法的性能了,可以看看哪种算法更适合处理这个问题。
阅读全文