`
xiaoyongzeng
  • 浏览: 15057 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA数据结构和算法(第十二章)学习笔记

 
阅读更多
DATE:2013-8-4
-------------------------------
一.堆的特点:
A)它是完全二叉树
B)一般情况下,用数组实现
C)堆中的每一节点都满足堆的条件(每一节点的关键字都大小或等于子节点的关键字)
D)相对于二叉搜索树,它是弱序的
E)节点索引下标:
》父节点下标:(index-1)/2
》左子节点:2*index + 1
》右子节点:2*index + 2

二、用堆实现的优先队列
1、前提
2、关键算法:
A)向上筛选(插入)

 int parent = (index-1) / 2;
      Node bottom = heapArray[index];
      while( index > 0 && //向上寻找合适的位置
             heapArray[parent].getKey() < bottom.getKey() )
         {
         heapArray[index] = heapArray[parent];  // move it down
         index = parent;
         parent = (parent-1) / 2;
         }  // end while
      heapArray[index] = bottom;//找到了合适的插入位置
     
     
    B)向下筛选(移除、排序) 
   
     int largerChild;
      Node top = heapArray[index];       // save root
      while(index < currentSize/2)       // while node has at
         {                               //    least one child,
         int leftChild = 2*index+1;
         int rightChild = leftChild+1;
                                         // find larger child
         if(rightChild < currentSize &&  // (rightChild exists?)
                             heapArray[leftChild].getKey() <
                             heapArray[rightChild].getKey())
            largerChild = rightChild;
         else
            largerChild = leftChild;
                                         // top >= largerChild?
         if( top.getKey() >= heapArray[largerChild].getKey() )
            break;
                                         // shift child up
         heapArray[index] = heapArray[largerChild];
         index = largerChild;            // go down
         }  // end while
      heapArray[index] = top; 
     
     
   3、优缺点:相对于快速排序,略慢;但它对初始数据的分布不敏感
   4、效率:O(N*logN) 
     
     
分享到:
评论

相关推荐

    Java数据结构与算法15天笔记.zip

    这些文件涵盖了Java数据结构与算法的核心主题,是学习和复习的重要资源。让我们逐一解析每个文件名,探索其中可能涵盖的知识点: 1. **day02 链表.md** - 链表是数据结构的基础,它不依赖于内存位置连续存储元素。...

    数据结构与算法分析——C语言描述(Weiss著)的学习笔记

    学习建议:算法和数据结构的内容,用最简单的C语言描述会比较清楚,没有必要使用C++和Java的面向对象描述。面向对象编程在这里没啥用处,反而冲淡了学习主题。初学者,先学习Weiss的《数据结构与算法分析 C语言描述...

    java私塾学习笔记整理

    #### 第十二章:I/O流 Java I/O流用于处理输入输出操作。 **一、继承InputStream字节流** 用于读取字节数据的抽象类。 **二、继承OutputStream字节** 用于写入字节数据的抽象类。 **三、继承Reader流** 用于...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    java lecture note(Java学习笔记)

    #### 第十二周:数据结构与算法复杂度 - 深入学习数组、链表、栈、队列等数据结构。 - 理解时间复杂度和空间复杂度,优化算法性能。 ### 三、学习资源 #### 教材推荐 - Walter Savitch,《Absolute Java》(第4版)...

    《算法导论》第二版中文全集,含:全世界唯一带“完整”目录的版本,代码。第3部分(共4部分)。学好核心技术,既为自己,也为天空不落下别国的炸弹

    此书的算法部分也很精到 比算法导论更容易学习和入门 Sartaj Sahni《数据结构算法与应用 C++语言描述》全集 包含中英文图书 代码 习题答案 演示动画 都是我亲自从此书的官方网站下载并汇总的 绝对权威 算法和数据...

    JAVA6学习笔记 最新版的

    学习如何操作这些数据结构和算法,能有效地存储和处理数据。 5. **I/O流**:Java 6提供了丰富的I/O流API,用于进行文件读写、网络通信等。掌握InputStream和OutputStream家族,以及Reader和Writer系列,是进行数据...

    Java入门学习笔记

    ### Java入门学习笔记 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java的设计使得它易于学习且避免了许多传统编程语言中存在的复杂性。 - **面向对象:** Java是一种纯面向对象的语言,支持...

    JAVA经典教材笔记

    #### 第十二章:JAVA IO - **File类** - File类的作用:操作文件和目录。 - File类的常用方法:createNewFile()、delete()等。 - **RandomAccessFile类** - RandomAccessFile类的特点:支持随机访问文件。 - ...

    这里是一些知识点的归纳。知识点包括:Android、数据结构、Java、操作系统、数据库等。.zip

    "大学生数据结构学习笔记和资料大全"应该包含各种练习题、实例代码和讲解,帮助学习者掌握这些核心概念,并在实际项目中灵活运用。my_resource文件可能包含了这些资料,建议仔细研读,结合编程实践,以全面提升你的...

    传智播客视频JavaSE学习笔记

    以上是根据传智播客视频JavaSE学习笔记总结的关键知识点,覆盖了Java基础环境配置、字符串操作、多线程编程、集合框架、输入输出流、网络编程、反射机制、正则表达式等多个方面,希望对Java初学者和进阶者有所帮助。

    MLDN JAVA讲座 课程PDF文档

    【第12章:JAVA IO】章节深入探讨了JAVA的输入输出系统,031203_【第12章:JAVA IO】_字节流与字符流笔记.pdf和031217_【第12章:JAVA IO】_对象序列化笔记.pdf,讲述了如何读写文件、处理字节流和字符流,以及对象...

    大数据学习笔记

    ### 大数据学习笔记知识点概览 #### 第一部分:Spark学习 ##### 第1章:Spark介绍 - **1.1 Spark简介与发展** - **背景**:随着大数据处理需求的增长,传统的Hadoop MapReduce框架虽然提供了强大的计算能力,但...

    Java笔记2013

    进阶篇则将焦点转向了更高级的主题,如第十七章的SQL程序设计,这部分内容讲解了如何使用Java与数据库进行交互,例如通过JDBC(Java Database Connectivity)API来执行SQL查询,管理和更新数据库中的数据。第十八章...

    网上收集的java学习文档

    3. **集合框架**:Java集合框架是一组接口和类,提供了数据结构和算法,如ArrayList、LinkedList、HashMap等。理解它们的特性和使用场景对于编写高效代码至关重要。 4. **输入/输出(I/O)**:Java的I/O流系统用于...

    CoreJava重点要点笔记

    - 并发工具类库,提供线程安全的数据结构和算法。 #### 四、Java 运行环境 - **字节码与虚拟机**: - 字节码是高度优化的中间代码,由 Java 编译器生成。 - Java 虚拟机 (JVM) 是解释执行字节码的运行时系统。 ...

    整理后java开发全套达内学习笔记(含练习)

    FrameWork [java] 结构,框架 ['freimwә:k] Generic [java] 泛型 [dʒi'nerik] goto (保留字) 跳转 heap n.堆 [hi:p] implements (关键字) 实现 ['implimәnt] import (关键字) 引入(进口,输入) Info n.信息 ...

    自学java基础Xmind思维导图笔记

    Java集合框架是数据结构和算法的Java实现,包括Set(不允许重复元素)、List(有序,允许重复元素)和Map(键值对)。Set中的`HashSet`和`TreeSet`各有特点,Collections提供了一系列操作集合的方法,而Map接口的...

    java视频教程_黑马Java零基础辅导班[第二期]13天课件源码

    在整个Java学习过程中,理解和掌握基本语法、面向对象编程思想、异常处理机制、数据结构与算法、多线程编程以及IO操作是至关重要的。通过阅读和实践这些课件源码,初学者可以逐步建立起对Java编程的深刻理解,为日后...

Global site tag (gtag.js) - Google Analytics