Hash Table
unknown
python
2 years ago
4.5 kB
8
Indexable
class Movie:
def __init__(self, quote, title, year):
self.quote = quote
self.title = title
self.year = year
class Node:
def __init__(self, key, data):
self.key = key
self.data = data
self.next = None
class HashTable:
def __init__(self, size):
self.size = size
self.table = [None] * size
self.count = 0
def hash_function(self, key):
if len(key.split()) > 2:
return hash(" ".join(key.split()[:2])) % self.size
else:
return hash(key) % self.size
def add(self, key, data):
index = self.hash_function(key)
new_node = Node(key, data)
if self.table[index] is None:
self.table[index] = new_node
else:
current = self.table[index]
while current.next:
current = current.next
current.next = new_node
self.count += 1
def find(self, key):
index = self.hash_function(key)
current = self.table[index]
while current:
if current.key == key:
return current.data
current = current.next
return None
def delete(self, key):
index = self.hash_function(key)
current = self.table[index]
prev = None
while current:
if current.key == key:
if prev:
prev.next = current.next
else:
self.table[index] = current.next
self.count -= 1
return
prev = current
current = current.next
def print_HT(self):
for i, item in enumerate(self.table):
current = item
while current:
print(f'"{current.data.quote}" - {current.data.title}, {current.data.year}')
current = current.next
def load_factor(self):
return self.count / self.size
def num_items(self):
return self.count
def num_buckets(self):
return sum(1 for item in self.table if item)
# Helper function to read CSV and populate the hash table
def read_csv(file_name, hash_table):
with open(file_name, 'r', encoding='utf-8') as file:
header = file.readline().strip().split(',')
quote_index = header.index('quote')
movie_index = header.index('movie')
year_index = header.index('year')
for line in file:
data = line.strip().split(',')
quote = data[quote_index]
movie = data[movie_index]
year = data[year_index]
movie_title = movie.split(':')[0].strip() # Extracting movie title
movie_obj = Movie(quote, movie_title, year)
hash_table.add(movie_title, movie_obj)
# Main function
def main():
table_size = 977 # Choose a prime number
movie_hash_table = HashTable(table_size)
read_csv('movie_quotes.csv', movie_hash_table)
while True:
command = input("Enter a command (? for help): ").lower()
if command == 'add':
# Implement add functionality
pass
elif command == 'delete':
# Implement delete functionality
pass
elif command == 'find':
movie_title = input("Enter movie title: ")
result = movie_hash_table.find(movie_title)
if result:
print(f'"{result.quote}" - {result.title}, {result.year}')
else:
print("Movie not found.")
elif command == 'printHT':
movie_hash_table.print_HT()
elif command == 'load':
print(f"Current load factor: {movie_hash_table.load_factor()}")
elif command == 'count':
print(f"Number of items in the table: {movie_hash_table.num_items()}")
elif command == 'buckets':
print(f"Number of non-empty buckets: {movie_hash_table.num_buckets()}")
elif command == 'who':
print("I am ChatGPT.")
elif command == 'hash(k)':
# Implement hash(k) functionality
pass
elif command == 'help' or command == '?':
print("Available commands: add, delete, find, printHT, load, count, buckets, who, hash(k), help, exit")
elif command == 'exit':
print("Exiting program. Goodbye!")
break
else:
print("Invalid command. Enter '?' for help.")
if __name__ == "__main__":
main()Editor is loading...
Leave a Comment