用法和灵芝:
散列表
用于快速存储和检索数据(或记录)。- 记录存储在
桶
使用散列键
散列键
通过将散列算法应用到选定的值(钥匙
值)包含在记录中。所选值必须是所有记录的公共值。- 各
斗
可以有多个按特定顺序组织的记录。
真实世界的例子:
哈希公司,成立于1803年,缺乏任何计算机技术,总共有300个文件柜,为他们的大约30,000名客户保存详细的信息(记录)。每个文件夹都清楚地标识了其客户端编号,这是一个从0到29,999之间的唯一编号。
当时的档案办事员必须迅速为工作人员提取和储存客户记录。工作人员决定,使用散列方法存储和检索其记录将更为有效。
若要归档客户记录,归档办事员将使用写入文件夹上的唯一客户编号。使用此客户端编号,它们将对散列键到300,以确定它包含在其中的文件柜。当他们打开文件柜时,他们会发现里面有许多按客户编号订购的文件夹。在确定正确的位置后,他们就会简单地溜进去。
为了检索客户记录,档案办事员将在一张纸条上得到客户号码。使用此唯一客户端编号(散列键),他们会调整它300,以确定哪个文件柜有客户文件夹。当他们打开文件柜时,他们会发现里面有许多按客户编号订购的文件夹。通过搜索记录,他们会快速找到客户端文件夹并检索它。
在我们的现实世界中,我们的桶是文件柜而我们记录是文件文件夹.
需要记住的一件重要的事情是,计算机(及其算法)处理数字比处理字符串更好。因此,使用索引访问大型数组比按顺序访问要快得多。
正如西蒙提到的我相信非常重要哈希部分是转换一个大空间(任意长度,通常是字符串等),并将其映射到一个小空间(已知大小,通常是数字)进行索引。这如果是非常重要的记住!
所以在上面的例子中,30,000个可能的客户机被映射到一个较小的空间。
其中的主要思想是将整个数据集分割成段,以加快实际的搜索,这通常是耗时的。在我们上面的例子中,300个文件柜中的每一个都会(统计上)包含大约100条记录。通过100条记录进行搜索(不管顺序如何)比处理30,000条记录要快得多。
你可能已经注意到有些人实际上已经这样做了。但是,在大多数情况下,它们不会设计哈希方法来生成散列密钥,而只是使用姓氏的第一个字母。因此,如果你有26个文件柜,每个都包含一个字母从A到Z,理论上你只是分割了你的数据,并加强了归档和检索过程。
希望这能帮上忙
吉奇!