增加链接列表时的搜索时间相同

时间:2018-10-14 11:27:34

标签: java algorithm linked-list runtime singly-linked-list

我创建了一个链接列表。但是,我在整理整个列表时注意到-与上一个列表几乎花费相同的时间。我一直在研究双重假设,并且我假设运行时间是线性的,因此:

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;

0 个答案:

没有答案