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搜索一个雇员的名字,并检索该雇员对象。
注意:搜索复杂度应该是O(logn),我们不应该使用任何map。
事
val emp = list.binarysearch("name2")
println("the returned employee's age: ", emp.age) //should print 102
任何帮助将不胜感激!
2条答案
按热度按时间f87krz0w1#
搜索提供了二分搜索,但你需要一个索引序列,而不是一个线性的(即。
List
),正如其他人所解释的那样-否则你仍然可以使用search
,但你会得到线性O(n)行为而不是O(Log n)。你说你想按名字搜索,所以你需要按名字排序,否则你的结果可能不一致。你应该研究
scala.math.Ordering
如果你能把你的列表转换成数组,那么你就可以做到这一点。
然后...
要检索元素,请对结果使用
insertionPoint
方法。如果未找到元素,则返回其插入点在排序序列中的索引。
jjhzyzn02#
你永远不能在O(log n)中对scala List()进行二分搜索,因为我们不能一次丢弃一半的列表,我们必须遍历到中点。但是,它可以用数组来完成。在Scala中,您可以创建一个隐式类,以便在任何Array[String]示例上拥有一个binarySearch()方法
您可以使用它如下