如何确定运行时分析的Big-Oh?

时间:2018-12-11 20:56:28

标签: java data-structures stack nodes

我正在尝试对类“ SlowMaxStack”的方法IsEmpty(),Push(),Pop()和getMaxSoFar()进行运行时分析。

这是我的猜测,但是我不确定答案是否正确,我也怀疑我的推理。

IsEmpty():o(1),只需检查顶部节点。常量

Push():o(1),只需将数据放入顶部节点即可。常量

Pop():o(1),猜测这可能是o(3),但仍为常数,因此我认为它是o(1)

getMaxSoFar():o(n),因为for循环遍历元素直到节点元素的长度。从顶部开始,1 + n + 1-> n + 2-> o(n)

class ListNode<T>{
public T value;
public ListNode<T> next;

public ListNode(T value, ListNode<T> next)
{
    this.value = value;
    this.next = next;
}

public ListNode<T> setValue(T value) 
{
    return new ListNode<T>(value, this); 
}
}

interface Maximizer<T> {
T getMax(T t1, T t2);
T getGlobalMin();
}

interface MaxStack<T> 
{
boolean isEmpty();

void push(T value);

T pop();

T getMaxSoFar();
//returns the maximum value in the stack
}


class SlowMaxStack<T> implements MaxStack<T>  
{
private final Maximizer<T> maximizer; //data 
private ListNode<T> top; // node 

public SlowMaxStack(Maximizer<T> maximizer) 
{
    this.maximizer = maximizer;
}

@Override
public boolean isEmpty() 
{
    return top == null;
}

@Override
public void push(T value)
{
    if (top == null)
    {
        top = new ListNode<T>(value, null);
    } 
    else 
    {
        top = top.setValue(value);
    }
}

@Override
public T pop() 
{
    T value = top.value;
    top = top.next;
    return value;
}

@Override
public T getMaxSoFar() 
{
    T currentMax = maximizer.getGlobalMin();

    for(ListNode<T> node = top; node != null; node = node.next) 
    {
        currentMax = maximizer.getMax(currentMax, node.value);
    }   
    return currentMax;
}
}

0 个答案:

没有答案