当你需要使用哈希以及何时使用数组可能更好时,我只是试图抓住它。例如,在字符串的情况下,哈希表示什么样的现实世界对象?
答案 0 :(得分:14)
我相信哈希有时被称为“字典”,我认为这本身就是一个很好的例子。如果你想查找一个单词的定义,那么做一些像这样的事情很好:
definition['pernicious']
而不是试图找出定义将存储在的正确数字索引。
这个答案假定通过“hash”你基本上只是指一个关联数组。
答案 1 :(得分:5)
我认为你正在朝错误的方向看问题。决定是否应该使用哈希值的方式不是您访问它的方式。哈希的常见用法是使用查找表时。如果您的对象是字符串,并且您想检查它们是否存在于Dictionary
中,那么查找它们(假设哈希正常工作)将由O(1)完成。通过排序,时间将改为O(logn),这可能是不可接受的。
因此,散列非常适合与字典(散列图),集合(hashsets)等一起使用。
它们也是表示对象而不存储对象本身(用于密码)的有用方法。
答案 2 :(得分:2)
电话簿 - 键=姓名,值=电话号码。
我也想到了旧世界图书百科全书(实际书籍)。每篇文章都被“哈希”成一本书(猫进入“C”卷)。
答案 3 :(得分:1)
任何时候您都拥有由1对1地图提供良好服务的数据。
例如,班级成绩:
“John Smith”=> “B +”
“Jacob Jenkens”=> “C”
等
答案 4 :(得分:1)
一般情况下,哈希用于快速查找内容 - 哈希映射可用于将一个事物与另一个事物快速联系起来,哈希集只会“快速”存储事物。
在考虑是否更好地使用哈希容器或普通的容器时,请考虑哈希函数的复杂性和成本 - 哈希值的额外大小和计算“完美”哈希所需的时间,以及在哈希函数冲突的情况下,最后进行1:1比较所需的时间实际上可能比使用less less运算符通过具有logharitmic复杂性的树结构要高得多。
答案 5 :(得分:0)
当您需要将一个变量与另一个变量相关联时。对于哈希中的键/值,没有“类型限制”。
答案 6 :(得分:0)
哈希有很多用途。除了加密用途之外,它们通常用于快速查找信息。要使用数组进行类似的快速查找,您需要保持数组排序,然后使用二进制搜索。使用哈希,您可以快速查找而无需排序。这就是大多数脚本语言在一个或多个名称下实现散列的原因(字典等)。
答案 7 :(得分:0)
我经常使用一个用于我的应用程序设置的“词典”。
设置|值
我将它们从数据库或配置文件加载到哈希表中,供我的应用程序使用。
效果很好,很简单。
答案 8 :(得分:0)
一个例子可能是与地区,城市或任何邮政地址相关联的邮政编码。
答案 9 :(得分:0)
一个很好的例子是包含大量元素的缓存。您有一些标识符可以通过它来查找值(例如URL,并且您希望找到相应的缓存网页)。您希望这些查找尽可能快,并且不希望每次请求某些URL时都搜索所有存储的页面。对于像这样的问题,哈希表是一个很好的数据结构。
答案 10 :(得分:0)
我刚才写的一个真实世界的例子就是当我在提交费用报告时将人们用于膳食的金额加起来。
我需要每天得到一个总数而不知道会有多少项目存在在某一天,不知道费用报告的日期范围是什么。一个人可以用多少变量支出多少是有限制的(什么城市,周末等......)
哈希表是处理此问题的完美工具。关键是价值为收货金额的日期(转换为美元)。收据可以按任何顺序进入,我只是继续获取该日期的值并添加到该工作完成之前。显示也很简单。
答案 11 :(得分:0)
(php code)
$david = new stdclass();
$david->name = "david";
$david->age = 12;
$david->id = 1;
$david->title = "manager";
$joe = new stdclass();
$joe->name = "joe";
$joe->age = 17;
$joe->id = 2;
$joe->title = "employee";
// option 1: lets put users by index
$users[] = $david;
$users[] = $joe;
// option 2: lets put users by title
$users[$david->title] = $david;
$users[$joe->title] = $joe;
现在的问题是:谁是经理? 回答:
$users["manager"]