Exemple #1
0
    public boolean repOK_KeysAndValues()
    {
        int min = repOK_findMin(root);
        int max = repOK_findMax(root);

        if (!repOK_orderedKeys(root, min - 1, max + 1))
        {
            return(false);
        }

        // touch values
        RoopsList workList = new RoopsList();

        workList.add(root);
        while (workList.getSize() > 0)
        {
            TreeSetEntry current = (TreeSetEntry)workList.get(0);
            workList.remove(0);

            if (current.left != null)
            {
                workList.add(current.left);
            }
            if (current.right != null)
            {
                workList.add(current.right);
            }
        }
        return(true);
    }
Exemple #2
0
    public Object pop()
    {
        int    last_index = list.getSize() - 1;
        Object ret_val    = list.get(last_index);

        list.remove(last_index);
        return(ret_val);
    }
Exemple #3
0
    public V remove(K key)
    {
        int index = getIndex(key);
        V   value = vals.get(index);

        keys.remove(index);
        vals.remove(index);
        entries.remove(index);

        return(value);
    }
Exemple #4
0
    private boolean repOK_isAcyclic()
    {
        RoopsList visited = new RoopsList();

        visited.add(root);
        RoopsList workList = new RoopsList();

        workList.add(root);
        while (!workList.isEmpty())
        {
            BinTreeNode current = (BinTreeNode)workList.get(0);
            workList.remove(0);
            if (current.left != null)
            {
                // checks that the tree has no cycle
                if (visited.contains(current.left))
                {
                    return(false);
                }
                else
                {
                    visited.add(current.left);
                }

                workList.add(current.left);
            }
            if (current.right != null)
            {
                // checks that the tree has no cycle
                if (visited.contains(current.right))
                {
                    return(false);
                }
                else
                {
                    visited.add(current.right);
                }

                workList.add(current.right);
            }
        }
        return(true);
    }
Exemple #5
0
    public Object remove(Object key)
    {
        int index = keys.indexOf(key);

        if (index != -1)
        {
            Object value = vals.get(index);

            keys.remove(index);
            vals.remove(index);
            size--;

            return(value);
        }
        else
        {
            return(null);
        }
    }
Exemple #6
0
    private boolean repOK_parentsAllRight()
    {
        RoopsList workList = new RoopsList();

        workList.add(root);

        while (!workList.isEmpty())
        {
            BinTreeNode current = (BinTreeNode)workList.get(0);
            workList.remove(0);
            if (current.left != null)
            {
                if (current.left.parent != current)
                {
                    return(false);
                }
                else
                {
                    workList.add(current.left);
                }
            }
            if (current.right != null)
            {
                if (current.right.parent != current)
                {
                    return(false);
                }
                else
                {
                    workList.add(current.right);
                }
            }
        }

        return(true);
    }
Exemple #7
0
    //*************************************************************************
    //************** From now on repOK()  *************************************
    //*************************************************************************

    public boolean repOK()
    {
        RoopsSet  allNodes = new RoopsSet();
        RoopsList parent_headers_to_visit = new RoopsList();

        if (min != null)
        {
            // check first level
            {
                int         child_cound = 0;
                FibHeapNode curr        = min;
                do
                {
                    if (curr.left.right != curr)
                    {
                        return(false);
                    }

                    if (curr.parent != null)
                    {
                        return(false);
                    }

                    if (curr.child != null)
                    {
                        parent_headers_to_visit.add(curr);
                    }

                    if (!allNodes.add(curr))
                    {
                        return(false);                       // repeated node
                    }
                    curr = curr.left;
                    child_cound++;
                } while (curr != min);
            }

            while (!parent_headers_to_visit.isEmpty())
            {
                // check other levels

                FibHeapNode node = (FibHeapNode)parent_headers_to_visit.get(0);
                parent_headers_to_visit.remove(0);

                int         node_count = 0;
                FibHeapNode curr_node  = node.child;
                do
                {
                    if (curr_node.left.right != curr_node)
                    {
                        return(false);
                    }

                    if (curr_node.parent != null)
                    {
                        return(false);
                    }

                    if (curr_node.child != null)
                    {
                        parent_headers_to_visit.add(curr_node);
                    }

                    if (curr_node.cost > node.cost)
                    {
                        return(false);
                    }

                    if (!allNodes.add(curr_node))
                    {
                        return(false);                        // repeated node
                    }
                    curr_node = curr_node.left;
                    node_count++;
                } while (curr_node != node.child);

                if (node_count != node.degree)
                {
                    return(false);
                }
            }
        }

        if (allNodes.getSize() != this.n)
        {
            return(false);
        }

        return(true);
    }
Exemple #8
0
    private boolean repOK_parentsAllRight()
    {
        RoopsList workList = new RoopsList();
          workList.add(root);

          while(!workList.isEmpty()) {
        BinTreeNode current = (BinTreeNode)workList.get(0);
        workList.remove(0);
        if (current.left != null) {
          if (current.left.parent != current)
            return false;
          else
            workList.add(current.left);
        }
        if (current.right != null) {
          if (current.right.parent != current)
            return false;
          else
            workList.add(current.right);
        }
          }

          return true;
    }
Exemple #9
0
    private boolean repOK_isAcyclic()
    {
        RoopsList visited = new RoopsList();
          visited.add(root);
          RoopsList workList = new RoopsList();
          workList.add(root);
          while (!workList.isEmpty()) {
        BinTreeNode current = (BinTreeNode)workList.get(0);
        workList.remove(0);
        if (current.left != null) {
          // checks that the tree has no cycle
          if (visited.contains(current.left))
            return false;
          else
            visited.add(current.left);

          workList.add(current.left);
        }
        if (current.right != null) {
          // checks that the tree has no cycle
          if (visited.contains(current.right))
            return false;
          else
        visited.add(current.right);

          workList.add(current.right);
        }
          }
          return true;
    }
Exemple #10
0
    public boolean repOK_KeysAndValues()
    {
        int min = repOK_findMin(root);
        int max = repOK_findMax(root);
        if (!repOK_orderedKeys(root, min-1, max+1))
            return false;

        // touch values
        RoopsList workList = new RoopsList();
        workList.add(root);
        while (workList.getSize() > 0) {
            TreeSetEntry current = (TreeSetEntry) workList.get(0);
            workList.remove(0);

            if (current.left != null)
                workList.add(current.left);
            if (current.right != null)
                workList.add(current.right);
        }
        return true;
    }
Exemple #11
0
    public boolean repOK_Colors()
    {
        RoopsList workList = new RoopsList();
        workList.add(root);
        while (workList.getSize() > 0) {
            TreeSetEntry current = (TreeSetEntry) workList.get(0);
            workList.remove(0);
            TreeSetEntry cl = current.left;
            TreeSetEntry cr = current.right;
            if (current.color == RED) {
                if (cl != null && cl.color == RED)
                    return false;
                if (cr != null && cr.color == RED)
                    return false;
            }
            if (cl != null)
                workList.add(cl);
            if (cr != null)
                workList.add(cr);
        }

        int numberOfBlack = -1;
        RoopsList workList2 = new RoopsList();

        workList2.add(new Pair(root, 0));

        while (workList2.getSize() > 0) {
            Pair p = (Pair) workList2.get(0);
            workList2.remove(0);
            TreeSetEntry e = p.e;
            int n = p.n;
            if (e != null && e.color == BLACK)
                n++;
            if (e == null) {
                if (numberOfBlack == -1)
                    numberOfBlack = n;
                else if (numberOfBlack != n)
                    return false;
            } else {
                workList2.add(new Pair(e.left, n));
                workList2.add(new Pair(e.right, n));
            }
        }
        return true;
    }
Exemple #12
0
    //*************************************************************************
    //************************* From now on repOk  ****************************
    //*************************************************************************.
    public boolean repOK()
    {
        if (root == null)
            return size == 0;

        if (root.parent != null)
            return false;

        RoopsSet visited = new RoopsSet();
        visited.add(root);
        RoopsList workList = new RoopsList();
        workList.add(root);

        while (workList.getSize() > 0) {

            TreeSetEntry current = (TreeSetEntry) workList.get(0);
            workList.remove(0);

            TreeSetEntry cl = current.left;
            if (cl != null) {
                if (!visited.add(cl))
                    return false;
                if (cl.parent != current)
                    return false;
                workList.add(cl);
            }
            TreeSetEntry cr = current.right;
            if (cr != null) {
                if (!visited.add(cr))
                    return false;
                if (cr.parent != current)
                    return false;
                workList.add(cr);
            }
        }

        if (visited.getSize() != size)
            return false;

        if (!repOK_Colors())
            return false;

        return repOK_KeysAndValues();
    }
Exemple #13
0
    public boolean repOK_Colors()
    {
        RoopsList workList = new RoopsList();

        workList.add(root);
        while (workList.getSize() > 0)
        {
            TreeSetEntry current = (TreeSetEntry)workList.get(0);
            workList.remove(0);
            TreeSetEntry cl = current.left;
            TreeSetEntry cr = current.right;
            if (current.color == RED)
            {
                if (cl != null && cl.color == RED)
                {
                    return(false);
                }
                if (cr != null && cr.color == RED)
                {
                    return(false);
                }
            }
            if (cl != null)
            {
                workList.add(cl);
            }
            if (cr != null)
            {
                workList.add(cr);
            }
        }

        int       numberOfBlack = -1;
        RoopsList workList2     = new RoopsList();

        workList2.add(new Pair(root, 0));

        while (workList2.getSize() > 0)
        {
            Pair p = (Pair)workList2.get(0);
            workList2.remove(0);
            TreeSetEntry e = p.e;
            int          n = p.n;
            if (e != null && e.color == BLACK)
            {
                n++;
            }
            if (e == null)
            {
                if (numberOfBlack == -1)
                {
                    numberOfBlack = n;
                }
                else if (numberOfBlack != n)
                {
                    return(false);
                }
            }
            else
            {
                workList2.add(new Pair(e.left, n));
                workList2.add(new Pair(e.right, n));
            }
        }
        return(true);
    }
Exemple #14
0
    //*************************************************************************
    //************************* From now on repOk  ****************************
    //*************************************************************************.
    public boolean repOK()
    {
        if (root == null)
        {
            return(size == 0);
        }

        if (root.parent != null)
        {
            return(false);
        }

        RoopsSet visited = new RoopsSet();

        visited.add(root);
        RoopsList workList = new RoopsList();

        workList.add(root);

        while (workList.getSize() > 0)
        {
            TreeSetEntry current = (TreeSetEntry)workList.get(0);
            workList.remove(0);

            TreeSetEntry cl = current.left;
            if (cl != null)
            {
                if (!visited.add(cl))
                {
                    return(false);
                }
                if (cl.parent != current)
                {
                    return(false);
                }
                workList.add(cl);
            }
            TreeSetEntry cr = current.right;
            if (cr != null)
            {
                if (!visited.add(cr))
                {
                    return(false);
                }
                if (cr.parent != current)
                {
                    return(false);
                }
                workList.add(cr);
            }
        }

        if (visited.getSize() != size)
        {
            return(false);
        }

        if (!repOK_Colors())
        {
            return(false);
        }

        return(repOK_KeysAndValues());
    }
Exemple #15
0
    //*************************************************************************
    //************** From now on repOK()  *************************************
    //*************************************************************************
    public boolean repOK()
    {
        RoopsSet allNodes = new RoopsSet();
        RoopsList parent_headers_to_visit = new RoopsList();

        if (min != null) {

            // check first level
            {
                int child_cound = 0;
                FibHeapNode curr = min;
                do  {
                    if (curr.left.right != curr)
                        return false;

                    if (curr.parent != null)
                        return false;

                    if (curr.child != null)
                        parent_headers_to_visit.add(curr);

                    if (!allNodes.add(curr))
                        return false;// repeated node

                    curr = curr.left;
                    child_cound++;

                } while (curr!=min);

            }

            while (!parent_headers_to_visit.isEmpty()) {

                // check other levels

                FibHeapNode node = (FibHeapNode) parent_headers_to_visit.get(0);
                parent_headers_to_visit.remove(0);

                int node_count = 0;
                FibHeapNode curr_node = node.child;
                do {
                    if (curr_node.left.right != curr_node)
                        return false;

                    if (curr_node.parent != null)
                        return false;

                    if (curr_node.child != null)
                        parent_headers_to_visit.add(curr_node);

                    if (curr_node.cost>node.cost)
                        return false;

                    if (!allNodes.add(curr_node))
                        return false; // repeated node

                    curr_node = curr_node.left;
                    node_count++;

                } while (curr_node != node.child);

                if (node_count != node.degree)
                    return false;

            }

        }

        if (allNodes.getSize() != this.n)
            return false;

        return true;
    }