线性搜索未成功完成

Posted

技术标签:

【中文标题】线性搜索未成功完成【英文标题】:Linear Search not completing successfully 【发布时间】:2015-04-26 04:40:57 【问题描述】:

在数组上循环执行基本线性搜索,但不返回预期值。给定:

students = ["Alex", "Kyle", "Libby", "Monkey Boy"]

我正在尝试进行基本的线性搜索以查看名称“Monkey Boy”是否存在,并返回它的索引。

def linear_search(array, name)
  i = 0
  while i < array.length
    if array[i] == "#name"
      return i
    else
      return -1
    end
    i+=1
  end
end

linear_search(students, "Alex") # returns 0
linear_search(students, "Monkey Boy") # returns -1, should return 3

非常困惑。这是怎么回事?

【问题讨论】:

【参考方案1】:

如果仔细看,你的 while 块是不正确的

def linear_search(array, name)
 i = 0
 while i < array.length
  if array[i] == "#name"
   return i
  else
   return -1
  end
  i+=1
 end
end

当你搜索linear_search(students, "Alex") "Alex" 存在于数组 [0] 中,array[i] == "#name"true 它返回 i 并中断循环

当你搜索linear_search(students, "Monkey Boy") "Monkey Boy" 存在于数组 [3] 中,第一次 array[i] == "#name"false"Alex" == "Monkey Boy" 它返回 -1,即执行 else 部分并打破循环不增加强>

如果您将 else 部分从 while 中删除,它将作为较早的答案或更优雅的方式工作

def linear_search(array, name)
  return array.index(name).nil? ? -1 : array.index(name)
end 

linear_search(students, "Kyle") # 0
linear_search(students, "Monkey Boy") # 3
linear_search(students, "Monkey") # -1

【讨论】:

【参考方案2】:

return -1 应该在 while 循环之外。

def linear_search(array, name)
  i = 0
  while i < array.length
    if array[i] == "#name"
      return i
    end
    i+=1
  end
  return -1 
end

【讨论】:

但这不就是“else”子句的用途吗? @liuzxc @KyleSnowSchwartz 这是真的,如果你将else 保留在for loop 中,那么if 语句将只运行一次,发现字符串不相等,所以它会运行 else 部分并返回 -1。 @KyleSnowSchwartz 如果您正在寻找更好的方法。 Ruby 有很多函数可以让你用更少但更有表现力的代码来做到这一点。

以上是关于线性搜索未成功完成的主要内容,如果未能解决你的问题,请参考以下文章

如何计算完成线性搜索的步骤

线性选择算法(未完成)

二元和线性搜索

线性代数回顾+深化(未完成版)

线性代数回顾+深化(未完成版)

计量经济学 学习笔记(长篇 未完成)