假设我想存储一个字符串字典,我想知道某个字符串是否存在。我可以使用Trie或 HashMap。HashMap 的时间复杂度为 O(1),概率很高,而在这种情况下,Trie 的时间复杂度为 O(k),其中 k 是字符串的长度。
现在我的问题是:计算字符串的哈希值是否具有 O(k) 的时间复杂度,从而使 HashMap 的复杂度相同?如果不是,为什么?
我的看法是,这里的 Trie 比查找字符串的 HashMap 具有更低的时间复杂度,因为 HashMap - 除了计算哈希值 - 可能会发生冲突。我错过了什么吗?
更新:在构建字典时,您会使用哪种数据结构来优化速度?
如果我的一个模型函数做了一些复杂的事情或者它的逻辑有一些可以在另一个模型函数中重用的部分,那么在模型中定义第三个函数以使它成为实例方法或将其定义为类方法是否正确?
我的第一个解决方案是在我的模型文件中执行类似的操作(例如user.rb):
#Some Function
def magic_function
return true
end
class User < ActiveRecord::Base
def first_function
return magic_function
end
def second_function
return 1 if magic_function
return 0
end
end
Run Code Online (Sandbox Code Playgroud)
但我无法在进行rspec测试时浏览magic_function并浏览互联网让我相信我所做的通常不是由其他人完成的...有些人似乎使用模块但在我的情况下,这个功能只需要在这个文件.我只是将它定义为干掉我的代码或使其更具可读性,但我不认为它应该是一个实例方法,因为我不需要从该文件外部调用它,它也不需要是一个类方法出于同样的原因.在哪里定义这样的函数的正确位置?