查找迅速的散列表

130 阅读2分钟

这是我参与2022首次更文挑战的第32天,活动详情查看:2022首次更文挑战

查找迅速的散列表

试想你在写一个快餐店的点单程序,准备实现一个展示各种食物及相应价格的菜单。你可能会用数组来做(当然这没问题)。

menu=[ ["french fries", 0.75], ["hamburger", 2.5], ["hot dog", 1.5], ["soda", 0.6] ]

该数组由一些子数组构成,每个子数组包含两个元素。第一个元素是表示食物名称的字符串,第二个元素是该食物的价格。

就如第2章学到的,在无序的数组里查找某种食物的价格,得用线性查找,需要步。有序数组则可以用二分查找,只需要步。

尽管也不错,但我们可以做得更好。事实上,可以好很多。到了本章结尾,你会掌握一种名为散列表的数据结构,只用步就能找出数据。理解此数据结构的原理以及其适用场景,你就能依靠其快速查找的能力来应对各种状况。

探索散列表

大多数编程语言都自带散列表这种能够快速读取的数据结构。但在不同的语言中,它有不同的名字,除了散列表,还有散列、映射、散列映射、字典、关联数组。

以下便是用Ruby的散列表来实现的菜单。

menu={ "french fries" => 0.75, "hamburger" => 2.5, "hot dog" => 1.5, "soda" => 0.6 }

散列表由一对对的数据组成。一对数据里,一个叫作,另一个叫作。键和值应该具有某种意义上的关系。如上例,"french fries"是键,0.75是值,把它们组成一对就表示“炸薯条的价格为75美分”。

在Ruby中,查找一个键所对应的值,语法是:

menu["french fries"]

这会返回值0.75。

在散列表中查找值的平均效率为,因为只要一步。下面来看看为什么。