美文网首页
查找算法:小顶堆、二叉树

查找算法:小顶堆、二叉树

作者: SMSM | 来源:发表于2018-01-21 18:41 被阅读92次

小顶堆

PriorityQueue\DelayedWorkQueue\PriorityBlockingQueue
小顶堆的实现,主要用于快速输出最小值,时间、空间复杂度都很低,不存在平衡
性。相比于借助二分查找法完成有序列表,每次输出数组首位,后面再整体移位,这种做法,维护有序性的时间成本高!

Java堆结构PriorityQueue完全解析
PriorityQueue

有两个应用场景 1、优先级队列 2、延时执行ScheduledThreadPoolExecutor。
延时执行的实现方式是:当前时间点+延时时长 作为 K , 线程池到任务队列中取任务时,若时间未到则发生阻塞,阻塞时长available.awaitNanos(delay); 具体代码如下:

        public RunnableScheduledFuture<?> take() throws InterruptedException {
            final ReentrantLock lock = this.lock;
            lock.lockInterruptibly();
            try {
                for (;;) {
                    RunnableScheduledFuture<?> first = queue[0];
                    if (first == null)
                        available.await();
                    else {
                        long delay = first.getDelay(NANOSECONDS);
                        if (delay <= 0)
                            return finishPoll(first);
                        first = null; // don't retain ref while waiting
                        if (leader != null)
                            available.await();
                        else {
                            Thread thisThread = Thread.currentThread();
                            leader = thisThread;
                            try {
                                available.awaitNanos(delay);
                            } finally {
                                if (leader == thisThread)
                                    leader = null;
                            }
                        }
                    }
                }
            } finally {
                if (leader == null && queue[0] != null)
                    available.signal();
                lock.unlock();
            }
        }

二叉查找树

二叉树的遍历,用中序遍历的结果是,从小到大排序。

屏幕快照 2018-01-21 下午8.56.05.png
    /**
     * 中序遍历,
     * 每个叶子节点可以看做是,左右子叶子节点都为null的父节点
     */
    public void midForeach(int index) {
        if (isV(index)) {
            return;
        }
        midForeach(index * 2);
        System.out.print(array[index] + ",");
        midForeach(index * 2 + 1);
    }

红黑树

相关文章

  • 查找算法:小顶堆、二叉树

    小顶堆 PriorityQueue\DelayedWorkQueue\PriorityBlockingQueue小...

  • Timer实现分析

    分析Timer实现以前,先复习下堆算法,以小顶堆为例。 堆 堆是一个完全二叉树,按照广度遍历的方式存储在数组里。 ...

  • C 语言实现堆排序 (Heap Sort)

    堆排序是一种基于「堆」这一数据结构的排序算法。堆是一种近似完全二叉树的结构,分为大顶堆和小顶堆这两种。 大顶堆:子...

  • 堆排序

    【啊哈!算法】算法11:堆——神奇的优先队列(上) 以小顶堆为例,(小顶堆一般用来实现降序排列)讲一下堆排序的思路...

  • 高频题

    字符串 数学 数组 二叉树 二分查找 链表 动态规划 贪心算法 堆 广度优先搜索 深度优先 哈希表 回溯算法 设计

  • iOSer必须了解的数据结构

    数据结构 :哈希表、堆、栈、队列、链表、二叉树 操作系统(iOS)的堆、栈 算法 :排序、冒泡、快排、二分查找 数...

  • 堆在java中的应用--PriorityQueue

    堆的特点 堆是一种完全二叉树的模拟,堆一般是基于数组的实现,堆分大顶堆和小顶堆,大顶堆就是堆顶是最大的数据,然后子...

  • Java基础算法:堆排,快排,二分查找

    Java基础算法:堆排,快排,二分查找 1. 堆排 满二叉树:所有叶结点都有同样的深度,每个内部结点都有两个儿子 ...

  • 算法:手动实现大顶堆、小顶堆

    在刷LeetCode时,经常看到Java系统函数PriorityQueue。swift中没有,只能手动构造一个了。...

  • 数据结构与算法

    今天任务:快排,冒泡,堆排,归并排序,二分查找,二叉树的遍历,二叉树增删查改晚上回去写总结,算法才是灵魂,数据结构...

网友评论

      本文标题:查找算法:小顶堆、二叉树

      本文链接:https://www.haomeiwen.com/subject/ygdqaxtx.html