【发布时间】:2016-09-01 15:09:17
【问题描述】:
当时发布了我的问题,我真的不清楚。在这个问题上需要帮助。
给定一个包含 100 万个值和整数 N 的 csv 文件,我必须想出一个算法来检查文件中是否存在 N,如果存在则返回 true,如果不存在则返回 false。这些值被放入一个数组中。
使用 for 循环本身将花费数小时,我需要在 5 分钟内完成此迭代。
编辑:我想出了一个二进制搜索代码。不幸的是,这花了超过 5 分钟。如何加快搜索过程?
def exist?(id)
employee_list = $employee_list
mid = employee_list.length / 2
while mid != 0 and mid+1 != employee_list.length
a = employee_list[mid]
if a != id
if a > id
if mid<=employee_list.length/2
mid = mid / 2
elsif mid>employee_list.length/2
mid = ((mid-(employee_list.length/2))/2) + ((employee_list.length)/2)
end
elsif a < id
if mid>=employee_list.length/2
mid = mid + ((employee_list.length-mid)/2)
elsif mid<employee_list.length/2
mid = (((employee_list.length/2) - mid)/2) + mid
end
end
else
return true
end
end
return false
end
【问题讨论】:
-
我目前所做的是进行二分搜索
-
不能对未排序的数组进行二分查找
-
如果您需要多次搜索数组,那么执行二进制搜索是正确的答案 - 但您必须首先对数组进行排序才能执行此操作。您能否在上面的帖子中包含您当前解决此问题的尝试?
-
"那时" – 你指的是the question你4小时前发帖吗?你仍然可以编辑它。
-
在我看来,用 100 万个对象迭代一个数组需要几个小时。你在数组中存储什么样的对象?他们多大?您的情况如何?