博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algs4-2.4.22调优先队列的整数组大小
阅读量:6554 次
发布时间:2019-06-24

本文共 1299 字,大约阅读时间需要 4 分钟。

2.4.22调整数组大小。在MaxPQ中加入调整数组大小的代码,并和命题Q一样证明对于一般性长度为N的队列其数组访问上限。

public class E2d4d22<Key extends Comparable<Key>>
{
    private Key[] pq;
    private int N=0;
   
    public  E2d4d22(int maxN)
    { pq=(Key[]) new Comparable[maxN+1];}
   
    public boolean isEmpty()
    { return N==0;}
   
    public int size()
    { return N;}
   
    public void Insert(Key v)
    {
       if(N==pq.length-1) resize(2*N);
        pq[++N]=v;
        swim(N);
    }
    public Key delMax()
    {
        Key max=pq[1];
        exch(1,N--);
        pq[N+1]=null;
        sink(1);
        if(N==(pq.length-1)/4) resize(2*N);
        return max;
    }
   
      
    private void swim(int k)
    {
        while(k>1 && less(k/2,k))
        {
            exch(k/2,k);
            k=k/2;
        }
    }//end swim
   
    private void sink(int k)
    {
        while (2*k<=N)
        {
            int j=2*k;
            if(j<N && less(j,j+1)) j++;
            if(!less(k,j)) break;
            exch(k,j);
            k=j;
        }
    }//end sink
    private  boolean less(int i,int j)
    { return pq[i].compareTo(pq[j])<0;}
   
    private void exch(int i,int j)
    {
        Key tmp=pq[i];
        pq[i]=pq[j];
        pq[j]=tmp;
    }
    public void show()
    {
        for(int i=1;i<=N;i++)
            StdOut.printf("%s ",pq[i]);
        StdOut.println();
    }
   
    private void resize(int max)
    {
        Key[] temp=(Key[]) new Comparable[max+1];
        for(int i=1;i<=N+1;i++)
            temp[i]=pq[i];
        pq=temp;
    }
}
1)插入元素最坏情况下因增倍数组长度需要读写数组长度为N,再加swim()方法最多需要访问lg(N+1)次,共计2N+2lg(N+1)次。
2)删除元素最坏情况下因减半数组长度需要读写数组N次,再加个sink()方法最多需要访问lg(N)正比次(两个子节点比较,一个父结点和大子结点比较,一次父结点与大子结点交换),共计2N+6lg(N)次。

转载于:https://www.cnblogs.com/longjin2018/p/9868647.html

你可能感兴趣的文章
电子商务系统的设计与实现(十二):技术选型
查看>>
加密与解密
查看>>
bootstrap栅格错位问题的解决方法
查看>>
Install Ubuntu 12.04 on Macbook pro Retina
查看>>
git相关操作总结
查看>>
python调用mongodb发送微信企业号
查看>>
字符串分割小例子
查看>>
va_start和va_end使用详解
查看>>
我的友情链接
查看>>
系统性能信息模块篇psutil之系统进程管理方法
查看>>
zabbix 自定义脚本
查看>>
docker 加速器
查看>>
CentOS项目实例之二--DHCP配置
查看>>
胡侃游戏自动化测试
查看>>
《跟老男孩学习Linux运维:MySQL入门与提高实践》一书勘误
查看>>
bash小小小脚本
查看>>
linux sed命令详解
查看>>
Zabbix 3.4.6 新特性:历史数据支持 Elasticsearch
查看>>
oracle PLS-00363: 表达式 'A1' 不能用作赋值目标
查看>>
Centos6.5_salt自动部署zabbix_agentd(二)-- 部署windows以及linux系统
查看>>