Tag: 哈希

将string转换为字节数组,然后返回到原始string

是否可以将string转换为字节数组,然后将其转换回Java或Android中的原始string? 我的目标是发送一些string到微控制器(Arduino),并将其存储到EEPROM(只有1 KB)。 我试图使用MD5哈希,但它似乎只是一种单向encryption。 我能做些什么来处理这个问题?

为什么散列表扩展通常是通过加倍大小来完成的?

我已经做了一些关于散列表的研究,并且按照经验法则运行,当有一定数量的条目时(无论是最大值还是通过75%的加载因子),散列表都应该被扩展。 几乎总是build议将散列表的大小加倍(或加1,即2n + 1)。 但是,我一直没有find一个很好的理由。 为什么要扩大一倍,而不是增加25%,或者增加到下一个素数或下一个素数(如三个)的大小? 我已经知道,select一个初始哈希表大小是一个好主意,至less如果你的哈希函数使用通用哈希等模数。 而且我知道这就是为什么通常build议做2n + 1而不是2n(例如http://www.concentric.net/~Ttwang/tech/hashsize.htm ) 然而,正如我所说,我还没有看到任何真正的解释,为什么加倍或加一加实际上是一个不错的select,而不是其他一些方法为新的散列表select一个大小。 (是的,我读过哈希表维基百科的文章:) http://en.wikipedia.org/wiki/Hash_table

MurmurHash – 这是什么?

我一直在试图得到MurmurHash的高层次的理解。 我已经阅读了一个基本的描述,但还没有find一个很好的解释,何时使用它,为什么。 我知道它非常快,但想知道更多。 我问了一个关于如何将UUID放入Redis bitset的相关问题 ,并且有人build议使用MurmurHash。 它的工作原理,但我想了解风险/收益。

哈希sorting保留在迭代之间,如果没有修改?

如果我迭代散列一次,然后再次做,而不修改的内容,密钥保证出现在相同的顺序? 一个快速testingbuild议如此之多: > h = {'a' => 1, 'b' => 2, 'c' => 3} > 100_000.times.map { h.to_s == h.to_s }.all? => true 另一个问题,如果以上是允许的,我可以迭代通过它只改变值,而不添加任何新的密钥,并且按键的顺序是不变的? 类似于这个python问题: 如果dicts没有修改,是否保留迭代次序? 不像提出的重复,我不关心元素是否具有完全指定的顺序,只有两个连续的迭代没有修改提供相同的序列的限制。

SHA-256或MD5用于文件完整性

我知道SHA-256在安全性等方面比MD5更受青睐,但是,如果我要用一种方法来检查文件的完整性(即与密码encryption无关),那么有没有什么好处使用SHA-256? 由于MD5是128位和SHA-256是256位(因此是两倍大)… 需要两倍的时间来encryption? 时间不是本质的,就像在备份程序中一样,文件的完整性是需要的,任何人都会反对MD5提出一个不同的algorithm,甚至build议一种不同的技术? 使用MD5产生校验和吗?

有没有办法通过哈希来初始化一个对象?

如果我有这个class级: class A attr_accessor :b,:c,:d end 和这个代码: a = A.new h = {"b"=>10,"c"=>20,"d"=>30} 是否有可能直接从哈希值初始化对象,而不需要通过每对来调用instance_variable_set ? 就像是: a = A.new(h) 这应该导致每个实例variables被初始化为散列中具有相同名称的variables。

你如何确定两个哈希集是否相等(按值,而不是参考)?

我想确定是否在.NET 3.5(C#)中的两个HashSet对象是相同的集合, 即包含相同的值。 这似乎是一个显然想做的事情,但没有提供的function似乎给你这个信息。 我认为这样做的方式是通过检查两组数是否相等,一组是另一组的子集(不适当)。 我认为唯一可能发生的是如果他们是平等的。 示例代码: HashSet<int> set1 = new HashSet<int>(); set1.Add(1); set1.Add(2); set1.Add(3); HashSet<int> set2 = new HashSet<int>(); set2.Add(1); set2.Add(2); set2.Add(3); if(set1.Count == set2.Count && set1.IsSubsetOf(set2)) { // do something } 这会一直工作吗? 有没有更好的办法? 为什么不HashSet有一个public bool IsEqualSetWith()函数?

如何将哈希键从“符号”更改为“string”?

我正在使用Ruby on Rails 3.2.2,并且我想“很容易”/“快速”地将哈希键从Symbol s更改为String s。 也就是说,从{:one => "Value 1", :two => "Value 2", …} to {"one" => "Value 1", "two" => "Value 2", …} 。 我怎样才能通过使用更less的代码尽可能?

Ruby:什么是最简单的方法来更新哈希值?

说: h = { 1 => 10, 2 => 20, 5 => 70, 8 => 90, 4 => 34 } 我想将每个值v改为foo(v ),这样h将是: h = { 1 => foo(10), 2 => foo(20), 5 => foo(70), 8 => foo(90), 4 => foo(34) } 什么是最优雅的方式来实现这一目标?

Ruby中的数组和哈希性能

我有一个程序可以存储一个类的许多实例,比方说高达10.000或更多。 类实例有几个我不时需要的属性,但最重要的是ID。 class Document attr_accessor :id def ==(document) document.id == self.id end end 现在,存储数千个这些对象的最快方法是什么? 我曾经把它们全部放入一个文档数组中: documents = Array.new documents << Document.new # etc 现在可以select将其存储在Hash中: documents = Hash.new doc = Document.new documents[doc.id] = doc # etc 在我的应用程序中,我主要需要了解一个文档是否存在。 哈希的has_key? 函数显着快于数组的线性search和Document对象的比较? 都在O(n)之内还是has_key? 甚至O(1) 。 我会看到不同之处吗? 另外,有时我需要添加文件,当它已经存在。 当我使用一个数组,我将不得不与include?检查include? 之前,当我使用哈希,我只是使用has_key? 再次。 同上面的问题。 你怎么看? 当90%的时间我只需要知道ID是否存在(而不是对象本身!)时,什么是存储大量数据的最快方法?