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数据结构与算法的核心主题,是学习和复习的重要资源。让我们逐一解析每个文件名,探索其中可能涵盖的知识点: 1. **day02 链表.md** - 链表是数据结构的基础,它不依赖于内存位置连续存储元素。...
学习建议:算法和数据结构的内容,用最简单的C语言描述会比较清楚,没有必要使用C++和Java的面向对象描述。面向对象编程在这里没啥用处,反而冲淡了学习主题。初学者,先学习Weiss的《数据结构与算法分析 C语言描述...
#### 第十二章:I/O流 Java I/O流用于处理输入输出操作。 **一、继承InputStream字节流** 用于读取字节数据的抽象类。 **二、继承OutputStream字节** 用于写入字节数据的抽象类。 **三、继承Reader流** 用于...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
#### 第十二周:数据结构与算法复杂度 - 深入学习数组、链表、栈、队列等数据结构。 - 理解时间复杂度和空间复杂度,优化算法性能。 ### 三、学习资源 #### 教材推荐 - Walter Savitch,《Absolute Java》(第4版)...
此书的算法部分也很精到 比算法导论更容易学习和入门 Sartaj Sahni《数据结构算法与应用 C++语言描述》全集 包含中英文图书 代码 习题答案 演示动画 都是我亲自从此书的官方网站下载并汇总的 绝对权威 算法和数据...
学习如何操作这些数据结构和算法,能有效地存储和处理数据。 5. **I/O流**:Java 6提供了丰富的I/O流API,用于进行文件读写、网络通信等。掌握InputStream和OutputStream家族,以及Reader和Writer系列,是进行数据...
### Java入门学习笔记 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java的设计使得它易于学习且避免了许多传统编程语言中存在的复杂性。 - **面向对象:** Java是一种纯面向对象的语言,支持...
#### 第十二章:JAVA IO - **File类** - File类的作用:操作文件和目录。 - File类的常用方法:createNewFile()、delete()等。 - **RandomAccessFile类** - RandomAccessFile类的特点:支持随机访问文件。 - ...
"大学生数据结构学习笔记和资料大全"应该包含各种练习题、实例代码和讲解,帮助学习者掌握这些核心概念,并在实际项目中灵活运用。my_resource文件可能包含了这些资料,建议仔细研读,结合编程实践,以全面提升你的...
以上是根据传智播客视频JavaSE学习笔记总结的关键知识点,覆盖了Java基础环境配置、字符串操作、多线程编程、集合框架、输入输出流、网络编程、反射机制、正则表达式等多个方面,希望对Java初学者和进阶者有所帮助。
【第12章:JAVA IO】章节深入探讨了JAVA的输入输出系统,031203_【第12章:JAVA IO】_字节流与字符流笔记.pdf和031217_【第12章:JAVA IO】_对象序列化笔记.pdf,讲述了如何读写文件、处理字节流和字符流,以及对象...
### 大数据学习笔记知识点概览 #### 第一部分:Spark学习 ##### 第1章:Spark介绍 - **1.1 Spark简介与发展** - **背景**:随着大数据处理需求的增长,传统的Hadoop MapReduce框架虽然提供了强大的计算能力,但...
进阶篇则将焦点转向了更高级的主题,如第十七章的SQL程序设计,这部分内容讲解了如何使用Java与数据库进行交互,例如通过JDBC(Java Database Connectivity)API来执行SQL查询,管理和更新数据库中的数据。第十八章...
3. **集合框架**:Java集合框架是一组接口和类,提供了数据结构和算法,如ArrayList、LinkedList、HashMap等。理解它们的特性和使用场景对于编写高效代码至关重要。 4. **输入/输出(I/O)**:Java的I/O流系统用于...
- 并发工具类库,提供线程安全的数据结构和算法。 #### 四、Java 运行环境 - **字节码与虚拟机**: - 字节码是高度优化的中间代码,由 Java 编译器生成。 - Java 虚拟机 (JVM) 是解释执行字节码的运行时系统。 ...
FrameWork [java] 结构,框架 ['freimwә:k] Generic [java] 泛型 [dʒi'nerik] goto (保留字) 跳转 heap n.堆 [hi:p] implements (关键字) 实现 ['implimәnt] import (关键字) 引入(进口,输入) Info n.信息 ...
Java集合框架是数据结构和算法的Java实现,包括Set(不允许重复元素)、List(有序,允许重复元素)和Map(键值对)。Set中的`HashSet`和`TreeSet`各有特点,Collections提供了一系列操作集合的方法,而Map接口的...
在整个Java学习过程中,理解和掌握基本语法、面向对象编程思想、异常处理机制、数据结构与算法、多线程编程以及IO操作是至关重要的。通过阅读和实践这些课件源码,初学者可以逐步建立起对Java编程的深刻理解,为日后...