【发布时间】:2018-09-12 18:59:06
【问题描述】:
case class Employee (id: Int, name : String, age : Int)
// Added four emplyees emp1, emp2 emp3, emp4 to the list like below::
val emp1 = Employee(101, "name1", 101)
val emp2 = Employee(102, "name2", 102)
val emp3 = Employee(103, "name3", 103)
val emp4 = Employee(104, "name4", 104)
list = scala.List(emp1, emp2, emp3, emp4)
我想使用 BINARY SEARCH 在列表中按其姓名搜索员工,并检索该员工对象..
注意:搜索复杂度应为 O(logn),我们不应为此使用任何地图。
类似
val emp = list.binarysearch("name2")
println("the returned employee's age: ", emp.age) //should print 102
任何帮助将不胜感激。!
【问题讨论】:
-
这个问题看起来像您要求我们为您实现二进制搜索。 How to ask a good question。二进制搜索是一个众所周知的话题,如果你付出一些努力,你应该能够在网上找到足够的资源来理解这一点。
-
不,这不是我要问的。我不希望有人为我实现任何搜索机制,我自己可以做到这一点。我只需要知道:scala 中是否有任何现有的 api 可以对排序列表执行二进制搜索..并从列表中检索对象如果找到匹配项。
-
所有二进制搜索实现都涉及对列表/数组上的
x'th索引的随机索引访问,并继续确定要查看的下一个x'th索引。基本上O(log n)时间复杂度的二进制搜索要求随机索引访问为constant时间。但是 Scala 中任何list: List的list.get(i)是linear时间,这意味着 Scala 中的List无法实现O(log n)时间复杂度。 -
我认为你忽略了我的要求,我已经在说我的列表已经排序了。保持你的想法。我对所有这些细节并不天真。我非常理解好吧..请仔细阅读我的第一条评论,您将了解我的需求..
-
get的函数List是O(n)。二进制搜索不是在List上运行的明智算法。如果你改用Array,二分查找可以正常工作,而且代码看起来和其他语言基本一样。
标签: scala big-o binary-search scala-collections