创建三个python源文件,分别在其中编写 3 种算法的程序,具体如下: (1)打开包含英文单词的文件,读取其中所有的英文单词。 (2)将所有的英文单词依次存入一个顺序表 ST 中。 (3)由用户输入一个单词,分别利用
时间: 2024-02-09 16:08:08 浏览: 118
线性查找、二分查找和哈希查找三种算法在 ST 中查找该单词,并输出查找结果。
好的,我明白了你的问题。这是一个编程题目,需要编写三个Python程序,分别实现三种不同的查找算法:线性查找、二分查找和哈希查找。以下是我的回答:
首先,我们需要创建三个Python源文件,命名为linear_search.py、binary_search.py和hash_search.py。
其中,linear_search.py文件中的代码如下:
```python
def linear_search(word, word_list):
for i, w in enumerate(word_list):
if w == word:
return i
return -1
```
binary_search.py文件中的代码如下:
```python
def binary_search(word, word_list):
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
```
hash_search.py文件中的代码如下:
```python
def hash_search(word, word_list):
hash_table = {}
for i, w in enumerate(word_list):
hash_table[w] = i
return hash_table.get(word, -1)
```
这三个文件分别实现了线性查找、二分查找和哈希查找三种算法。其中,linear_search()函数使用线性查找算法,在word_list中查找word;binary_search()函数使用二分查找算法,在已经排好序的word_list中查找word;hash_search()函数使用哈希查找算法,在word_list中查找word。
接下来,我们需要在一个主程序中调用这三个函数来进行单词查找。主程序的代码如下:
```python
import sys
# 打开包含英文单词的文件,读取其中所有的英文单词
with open(sys.argv[1], 'r') as f:
word_list = f.read().splitlines()
# 将所有的英文单词依次存入一个顺序表 ST 中
ST = sorted(word_list)
# 由用户输入一个单词
word = input("请输入一个单词:")
# 分别利用线性查找、二分查找和哈希查找三种算法在 ST 中查找该单词
linear_res = linear_search(word, ST)
binary_res = binary_search(word, ST)
hash_res = hash_search(word, ST)
# 输出查找结果
if linear_res != -1:
print("线性查找:单词 %s 在列表中的位置是 %d" % (word, linear_res))
else:
print("线性查找:单词 %s 不在列表中" % word)
if binary_res != -1:
print("二分查找:单词 %s 在列表中的位置是 %d" % (word, binary_res))
else:
print("二分查找:单词 %s 不在列表中" % word)
if hash_res != -1:
print("哈希查找:单词 %s 在列表中的位置是 %d" % (word, hash_res))
else:
print("哈希查找:单词 %s 不在列表中" % word)
```
这段程序首先打开包含英文单词的文件,并读取其中所有的英文单词。然后,将所有的英文单词依次存入一个顺序表ST中,并对ST进行排序。接着,程序等待用户输入一个单词,并分别使用线性查找、二分查找和哈希查找三种算法在ST中查找该单词。最后,程序输出查找结果。
运行程序时,需要将包含英文单词的文件名作为命令行参数传递给程序。例如,假设单词列表保存在words.txt文件中,可以使用以下命令运行程序:
```
python main.py words.txt
```
希望这个回答能够对你有所帮助!
阅读全文