初始化链接列表与数组所花费的时间

时间:2011-12-05 21:25:38

标签: c linked-list

对于项目,我们必须优化代码以计算某个素数。我的问题是在时间方面与数组相比初始化链表的速度有多快或多慢。显然,由于数据量较小,可以忽略不计,但我们正在使用100,000,000个不同的数据点,所以在这种情况下确实会有所不同。

3 个答案:

答案 0 :(得分:3)

  • 如果一次分配所有100,000,000个点,则阵列分配是单个恒定时间操作。

  • 对于链接列表,如果您一次分配所有数字,那么您的查找速度会非常慢。

  • 如果优化空间:使用链表,因为它永远不会超过必要的数量,并且删除可以轻松释放内存。如果优化时间,阵列搜索速度会更快。

  • 如果你必须快速选择,那么阵列可能就是这样。我从未见过在链表中实现的复杂数学算法。链接列表通常只适合学习内存,计算和指针的基础知识 - 它们似乎没有太大的算法价值。

  • 最后,对于集合类型,您可能会充分利用这两个方面 - 初始化时间初始时间很短,但是一旦集合达到给定大小,可能会有一段时间需要重新分配一些新的记忆。

实际上说 我很少发现链接列表或数组都是必要的......大多数工作对抽象集合类型(即向量)做得更好。但我猜测这是一个家庭作业...也许考虑在帖子中添加该标签?

答案 1 :(得分:2)

一个数组远远快于初始化(带数据或没有数据)的链接列表,但是如果您要在中间或开头删除和/或插入数据数组(通常或根本不是取决于大小),通过移动元素来填充从移除项目或创建新项目时留下的漏洞,您从初始化中获得的速度将会丢失一个新项目的洞。

答案 2 :(得分:1)

1)如果初始化容量为100,000,000个元素的ArrayList,将立即分配所有必需的内存,并且阵列永远不必扩展,因此它会更快。

2)使用链接列表,相同数量的元素将需要更多内存,因为存在与下一个指针相关的开销。因此,初始化列表也需要更长时间。

就Arraylist的速度而言,你可以用Java做一个简单的实验并弄清楚。

编辑:我很抱歉我认为它是一个arrayList而不是一个数组。但是,第2点仍然适用。