算法导论Java实现-MAX-HEAPIFY算法(6.2章节)

简介:

 


 
 
  1. package lhz.algorithm.chapter.six; 
  2.  
  3. /** 
  4.  * MAX-HEAPIFY,《算法导论》第六章  
  5.  * 算法导论原文: 
  6.  * MAX-HEAPIFY is an important subroutine for manipulating max-heaps. Its inputs are an 
  7.  * array A and an index i into the array. When MAX-HEAPIFY is called, it is assumed that the 
  8.  * binary trees rooted at LEFT(i) and RIGHT(i) are max-heaps, but that A[i] may be smaller than 
  9.  * its children, thus violating the max-heap property. The function of MAX-HEAPIFY is to let 
  10.  * the value at A[i] "float down" in the max-heap so that the subtree rooted at index i becomes a 
  11.  * max-heap. 
  12.  * 伪代码: 
  13.  * MAX-HEAPIFY(A, i)  
  14.  * 1 l ← LEFT(i)  
  15.  * 2 r ← RIGHT(i)  
  16.  * 3 if l ≤ heap-size[A] and A[l] > A[i]  
  17.  * 4 then largest ← l  
  18.  * 5 else largest ← i  
  19.  * 6 if r ≤ heap-size[A] and A[r] > A[largest]  
  20.  * 7 then largest ← r  
  21.  * 8 if largest ≠ i  
  22.  * 9 then exchange A[i] ↔ A[largest] 10 MAX-HEAPIFY(A, largest) 
  23.  * @author lihzh(苦逼coder) 
  24. * 本文地址:http://mushiqianmeng.blog.51cto.com/3970029/736717
  25.  */ 
  26. public class MaxHeapify { 
  27.  
  28.     private static int[] input = new int[] { 1641014793281 }; 
  29.     private static int heapSize = input.length; 
  30.  
  31.     public static void main(String[] args) { 
  32.         maxHeapify(input, 2);//此处,2对于二叉树中的索引值,对应数组中的4 
  33.         //打印数组 
  34.         printArray(); 
  35.     } 
  36.      
  37.     /** 
  38.      * MaxHeap,调整算法,前提是假设所有的子二叉树已经是max-heap。 
  39.      * 复杂度: 
  40.      * 因为:T (n) ≤ T(2n/3) + Θ(1) 
  41.      * 所以有:  * T (n) = O(lgn) 
  42.      * @param array 
  43.      * @param index 
  44.      */ 
  45.     private static void maxHeapify(int[] array, int index) { 
  46.         int l = index * 2
  47.         int r = l + 1
  48.         int largest; 
  49.         //如果左叶子节点索引小于堆大小,比较当前值和左叶子节点的值,取值大的索引值 
  50.         if (l <= heapSize && array[l-1] > array[index-1]) { 
  51.             largest = l; 
  52.         } else { 
  53.             largest = index; 
  54.         } 
  55.         //如果右叶子节点索引小于堆大小,比较右叶子节点和之前比较得出的较大值,取大的索引值 
  56.         if (r <= heapSize && array[r-1] > array[largest-1]) { 
  57.             largest = r; 
  58.         } 
  59.         //交换位置,并继续递归调用该方法调整位置。 
  60.         if (largest != index) { 
  61.             int temp = array[index-1]; 
  62.             array[index-1] = array[largest-1]; 
  63.             array[largest-1] = temp; 
  64.             maxHeapify(array,largest); 
  65.         } 
  66.     } 
  67.      
  68.     private static void printArray() { 
  69.         for (int i : input) { 
  70.             System.out.print(i + " "); 
  71.         } 
  72.     } 
  73.  

图示: 




本文转自mushiqianmeng 51CTO博客,原文链接:http://blog.51cto.com/mushiqianmeng/736717,如需转载请自行联系原作者





相关文章
|
3月前
|
存储 监控 算法
企业上网监控场景下布隆过滤器的 Java 算法构建及其性能优化研究
布隆过滤器是一种高效的数据结构,广泛应用于企业上网监控系统中,用于快速判断员工访问的网址是否为违规站点。相比传统哈希表,它具有更低的内存占用和更快的查询速度,支持实时拦截、动态更新和资源压缩,有效提升系统性能并降低成本。
73 0
|
3月前
|
存储 负载均衡 算法
我们来说一说 Java 的一致性 Hash 算法
我是小假 期待与你的下一次相遇 ~
114 1
|
4月前
|
存储 算法 安全
Java中的对称加密算法的原理与实现
本文详细解析了Java中三种常用对称加密算法(AES、DES、3DES)的实现原理及应用。对称加密使用相同密钥进行加解密,适合数据安全传输与存储。AES作为现代标准,支持128/192/256位密钥,安全性高;DES采用56位密钥,现已不够安全;3DES通过三重加密增强安全性,但性能较低。文章提供了各算法的具体Java代码示例,便于快速上手实现加密解密操作,帮助用户根据需求选择合适的加密方案保护数据安全。
346 58
|
5月前
|
人工智能 算法 NoSQL
LRU算法的Java实现
LRU(Least Recently Used)算法用于淘汰最近最少使用的数据,常应用于内存管理策略中。在Redis中,通过`maxmemory-policy`配置实现不同淘汰策略,如`allkeys-lru`和`volatile-lru`等,采用采样方式近似LRU以优化性能。Java中可通过`LinkedHashMap`轻松实现LRUCache,利用其`accessOrder`特性和`removeEldestEntry`方法完成缓存淘汰逻辑,代码简洁高效。
203 0
|
5月前
|
存储 缓存 监控
上网行为监控系统剖析:基于 Java LinkedHashMap 算法的时间序列追踪机制探究
数字化办公蓬勃发展的背景下,上网行为监控系统已成为企业维护信息安全、提升工作效能的关键手段。该系统需实时记录并深入分析员工的网络访问行为,如何高效存储和管理这些处于动态变化中的数据,便成为亟待解决的核心问题。Java 语言中的LinkedHashMap数据结构,凭借其独有的有序性特征以及可灵活配置的淘汰策略,为上网行为监控系统提供了一种兼顾性能与功能需求的数据管理方案。本文将对LinkedHashMap在上网行为监控系统中的应用原理、实现路径及其应用价值展开深入探究。
107 3
|
5月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
6月前
|
存储 机器学习/深度学习 监控
如何监控员工的电脑——基于滑动时间窗口的Java事件聚合算法实现探析​
在企业管理场景中,如何监控员工的电脑操作行为是一个涉及效率与合规性的重要课题。传统方法依赖日志采集或屏幕截图,但数据量庞大且实时性不足。本文提出一种基于滑动时间窗口的事件聚合算法,通过Java语言实现高效、低资源占用的监控逻辑,为如何监控员工的电脑提供一种轻量化解决方案。
135 3
|
8月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
9月前
|
存储 人工智能 算法
解锁分布式文件分享的 Java 一致性哈希算法密码
在数字化时代,文件分享成为信息传播与协同办公的关键环节。本文深入探讨基于Java的一致性哈希算法,该算法通过引入虚拟节点和环形哈希空间,解决了传统哈希算法在分布式存储中的“哈希雪崩”问题,确保文件分配稳定高效。文章还展示了Java实现代码,并展望了其在未来文件分享技术中的应用前景,如结合AI优化节点布局和区块链增强数据安全。
|
9月前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
283 16

热门文章

最新文章