设计一个程序,按国家管理有关的城市名,实现输入、报表输出功能。其中,输入时对一个国家每次可录入一个到多个不同的市;输出时的报表格式类似如下(给出的只是例子):美国:华盛顿、纽约、旧金山德国:柏林、法兰克福、汉堡
cities = {}
while True:
country = input("请输入国家名(输入exit退出):")
if country == "exit":
break
city = input("请输入城市名(多个城市用逗号分隔):")
cities[country] = city.split(",")
print("城市清单:")
for country, city_list in cities.items():
print(country + ":" + "、".join(city_list))
散列在最好的情况下,可以提供O(1)常数级时间复杂度的查找性能。由于散列冲突的存在,查找比较次数就没有这么简单。
评估散列冲突的最重要信息就是负载因子λ,一般来说:
如果λ较小,散列冲突的几率就小,数据项通常会保存在其所属的散列槽中
如果λ较大,意味着散列表填充较满,冲突会越来越多,冲突解决也越复杂,也就需要更多的比较来找到空槽;如果采用数据链的话,意味着每条链上的数据项增多
如果采用线性探测的开放定址法来解决冲突(λ在0~1之间)
成功的查找,平均需要比对次数为:12(1+11−λ)\frac{1}{2}(1 + \frac{1}{1 - λ})21(1+1−λ1)
失败的查找,平均需要比对次数为:12(1+(11−λ)2)\frac{1}{2}(1 + (\frac{1}{1 - λ})^2)21(1+(1−λ1)2)
如果采用数据链来解决冲突(λ可大于1)
成功的查找,平均需要比对次数为:1+λ/2
不成功的查找,平均比对次数为:λ