array.contains运行时的数组类型的大小

时间:2015-11-17 03:14:57

标签: java arrays memory language-agnostic contains

假设我有两个长度相等的数组,一个是x型,另一个是y型,x是y内存的一半。如果我生成了两个对象,一个是x型,另一个是y型,并检查它们各自的数组是否包含它们,那么两个操作平均会同时进行吗?
这次可以通过使用另一个(有序的)数据结构来改进吗?

3 个答案:

答案 0 :(得分:0)

在无序数组中搜索给定元素具有O(n)复杂度,这意味着它线性地依赖于元素数量。 它不依赖于元素的大小,因为数组具有恒定的随机访问时间(数组中第n个元素的地址可以使用简单的指针算法计算)。

所以是的,搜索2个对象平均需要同时进行。或者更确切地说 - 具有相同的复杂性(线性)。

搜索有序数据结构(例如排序列表或二叉树)允许使用O(log (n))算法(二进制搜索),这平均来说要快得多。

请参阅this cheatsheet以查看一些常见的数据结构以及对它们执行的操作的复杂性。

答案 1 :(得分:0)

使用hash-table / hash-set。假设比较两个对象为O(1),则预期或估计的查找为O(1)

但一般情况下,2倍大的物体可能需要2倍的时间进行比较。但是它不会影响数组查找时间,因为在该操作期间使用索引而不是对象本身

答案 2 :(得分:0)

我的系统教授回答了这个问题:

  

如果工作时间受指令数量的限制,那么对两个阵列的详尽搜索会产生相同的时间。

     

如果工作时间受内存访问速度的限制,那么搜索较大的数组(此处"较大的"表示更多字节)需要更多时间。

     

工作时间是指令绑定还是内存访问绑定可能取决于编译器。糟糕的编译器可能会生成许多指令,使得时间受指令限制。