我创建了一个链接列表。但是,我在整理整个列表时注意到-与上一个列表几乎花费相同的时间。我一直在研究双重假设,并且我假设运行时间是线性的,因此:
T(n) = cn
T(kn) = c(kn) = ckn
T(kn)/T(n) = k
其中 k 是增长因素。
我的观察结果看起来像这样,在这里我进行了多次测试并取得了中位数。
| nodes | 4632 | 31744 | 51723 | 101295 | 166079 |
|--------|------|-------|-------|--------|--------|
| factor | - | 6.85 | 1.63 | 1.96 | 1.64 |
| search (ms) | 0.71 | 4.38 | 3.66 | 3.79 | 5.39 |
|-------------|------|-------|-------|-------|-------|
| factor | - | 6.190 | 0.836 | 1.035 | 1.424 |
它清楚地表明,运行时没有以与增加节点相同的常数增加,这是为什么呢?
我的节点看起来像这样
public class Node
{
private String value;
private Node next;
public String getValue(){ return value;}
public Node getNext(){ return this.next;}
}
我的迭代看起来像这样,我在其中搜索不存在的东西。
public boolean search(String word)
{
Node current = head;
while(current != null)
{
if(current.getValue().equals(word))
{
return true;
}
current = current.getNext();
}
return false;
}
long startTime = System.nanoTime();
search("nonexisting")
long endTime = System.nanoTime();
long totalTime = endTime - startTime;