【发布时间】:2018-05-22 08:09:24
【问题描述】:
对于 C++ 语言,从算法设计的角度来看,处理运行时(在多核处理器中)的最快方法是搜索数组(或拼接或其他更快)内的数字(例如 100 到 1000 之间)为此目的的数据结构)并返回仅限于返回 10 个项目的数字范围?例如golang 中的伪代码:
var listofnums := []uint64
var numcounter := 1
// splice of [1,2,3,4,5,31,32 .. 932536543] this list has 1 billion numeric items.
// the listofnums are already sorted each time an item is added but we do not know the lower_bound or upper_bound of the item list.
// I know I can use binary search to find listofnums[i] where it is smallest at [i] too... I'm asking for suggestions.
for i:=uint(0); i < len(listofnums); i++ {
if listofnums[i] > 100 && listofnums[i] < 1000 {
if listofnums[i]> 1000 || numcounter == 10 {
return
}
fmt.Println("%d",listofnums[i])
numcounter++
}
}
这是最快的方法吗?我在 C++ 中看到了位图结构,但不确定是否可以在这里应用。
我遇到过这个问题,这对于资深程序员来说是完全可以问的,但我不知道为什么它被否决了。 What is the fastest search method for array?
有人可以不要删除这个问题,而是让我改写一下吗?提前致谢。我希望找到从大量数字项中返回一系列数字的最佳方法。
【问题讨论】:
-
哪种语言?选择一个
-
我需要测试 Go 的内存需求和使用是否比 C++ 执行此范围返回的最快方法值得实现。所以……这样可以吗?我的意思是,如果 Go 使用太多内存来完成此任务,那么我将使用 C++,反之亦然。最快还必须取决于是否值得实施(考虑的因素不仅仅是纯粹的速度)
-
这还取决于您对数据的其他了解。例如,如果第二个元素已经与
> 100匹配,那么您的搜索速度很快。如果我们什么都不知道,二分查找会更好。在 C++ 中,你有 lower_bound 和 upper_bound 。 -
首先,每个问题你还是应该问一种语言,否则这个问题太板了。其次,你对“最快”的定义太模糊了。是时间复杂度、运行时间还是开发时间?第三,这种算法与语言无关。第四,语言开销和算法设计是两个问题。
-
好的,我删除了 Go 部分。然后使用 C++。我不知道我必须如此具体。这是我关于stackoverflow的第二个问题。对于新手,我如何才能足够快且有意义地改进问题以提高投票率? :)