当前位置: 首页 > news >正文

网站双链接怎么做网络宣传方式

网站双链接怎么做,网络宣传方式,网站建设指导,企业网站app目录 堆 大顶堆 威廉姆斯建堆算法 Floyd建堆算法 Floyd建堆算法复杂度 大顶堆代码实现 人的想法和感受是会随着时间的认知改变而改变, 原来你笃定不会变的事,也会在最后一刻变得释然 —— 24.10.10 堆 堆是基于二叉树实现的数据结构 大顶堆任意一个父节…

目录

大顶堆

威廉姆斯建堆算法

Floyd建堆算法

Floyd建堆算法复杂度

大顶堆代码实现


人的想法和感受是会随着时间的认知改变而改变,

原来你笃定不会变的事,也会在最后一刻变得释然

                                                                —— 24.10.10

堆是基于二叉树实现的数据结构

大顶堆任意一个父节点的权值要大于两个孩子的权值,同一层节点的权值大小无关

小顶堆任意一个父节点的权值要小于两个孩子的权值,同一层节点的权值大小无关


大顶堆

威廉姆斯建堆算法

不断的向堆中添加节点,添加时与堆最末尾元素进行比较,如果权值大于最末尾元素,则不断上调与其(最末尾元素,不断更新)父元素比较,直到找到小于堆中某元素的值或更新到堆顶元素

时间复杂度为O(n*logn)


Floyd建堆算法

1.找到最后一个非叶子节点 索引【size / 2 - 1】

2.从后向前,对每个结点执行下潜(与其左右孩子节点中的较大值进行交换)

Floyd建堆算法复杂度

复杂度与堆的高度h有关,高度从下往上由1开始依次相加,交换次数为h-1,总交换次数为每个节点的总高度除以结点所在每一层的高度 *(高度-1)之和

i指的是结点的高度

h指的是堆的总高度

推导出

        O(n) = 2^h-h-1

        ∵ 2^h ≈ n,h ≈ log2n

因此Floyd建堆算法的时间复杂度为O(n)


大顶堆代码实现

一、建堆方法(buildHeap

该方法通过从最后一个非叶子节点开始,逐个节点进行下潜操作,确保堆的性质。循环从size / 2 - 1开始是正确的,因为这是最后一个非叶子节点的索引。对于每个节点,调用down方法进行下潜操作,以确保节点的值不小于其子节点的值。

二、下潜方法(heapifyDown

  1. 正确地计算了当前节点的左子节点索引left = parent * 2 + 1和右子节点索引right = left + 1
  2. 找到当前节点及其两个子节点中的最大值索引(max),并与当前节点索引(parent)进行比较。如果找到了更大的子节点,则进行交换,并递归地对新的位置进行下潜操作。

三、交换方法(swap

该方法简单地交换两个索引处的元素值

四、获取堆顶元素方法(peek

如果堆为空(size == 0),返回 -1,否则返回堆顶元素(array[0]

五、删除堆顶元素方法(poll

  1. 如果堆为空,返回 -1。
  2. 保存堆顶元素,将堆顶元素与最后一个元素交换,然后减小堆的大小。
  3. 对新的堆顶元素进行下潜操作,以维持堆的性质。

六、删除指定索引处的元素方法(poll(int index)

  1. 如果堆为空,返回 -1。
  2. 保存指定索引处的元素,将其与最后一个元素交换,然后减小堆的大小。
  3. 对交换后的元素从指定索引处进行下潜操作,以维持堆的性质。

七、替换堆顶元素方法(replace

将新元素赋值给堆顶元素,然后对堆顶元素进行下潜操作,以维持堆的性质。

八、添加元素方法(offer

  1. 如果堆已满,返回 false。
  2. 将新元素添加到堆的末尾,然后调用up方法对新元素进行上浮操作,以维持堆的性质。最后增加堆的大小。

九、上浮方法(heapifyUp

从新添加元素的索引位置开始,向上比较新元素与父节点的值。如果新元素大于父节点,则交换它们,并继续向上比较,直到新元素小于父节点或者到达堆顶。

import java.util.Arrays;public class MaxHeap {int[] heapArray;int size;public MaxHeap(int capacity) {heapArray = new int[capacity];}public MaxHeap(int[] initialArray) {heapArray = new int[initialArray.length];System.arraycopy(initialArray, 0, heapArray, 0, initialArray.length);size = initialArray.length;buildHeap();}private void buildHeap() {for (int i = size / 2 - 1; i >= 0; i--) {heapifyDown(i);}}private void heapifyDown(int index) {int leftChildIndex = 2 * index + 1;int rightChildIndex = 2 * index + 2;int largestIndex = index;if (leftChildIndex < size && heapArray[leftChildIndex] > heapArray[largestIndex]) {largestIndex = leftChildIndex;}if (rightChildIndex < size && heapArray[rightChildIndex] > heapArray[largestIndex]) {largestIndex = rightChildIndex;}if (largestIndex!= index) {swap(index, largestIndex);heapifyDown(largestIndex);}}private void swap(int i, int j) {int temp = heapArray[i];heapArray[i] = heapArray[j];heapArray[j] = temp;}public int peek() {if (size == 0) {return -1;}return heapArray[0];}public int poll() {if (size == 0) {return -1;}int maxValue = heapArray[0];heapArray[0] = heapArray[size - 1];size--;heapifyDown(0);return maxValue;}public int poll(int index) {if (size == 0 || index >= size) {return -1;}int removedValue = heapArray[index];heapArray[index] = heapArray[size - 1];size--;heapifyDown(index);return removedValue;}public void replace(int newValue) {if (size == 0) {return;}heapArray[0] = newValue;heapifyDown(0);}public boolean offer(int value) {if (size == heapArray.length) {return false;}heapArray[size] = value;heapifyUp(size);size++;return true;}private void heapifyUp(int index) {int parentIndex = (index - 1) / 2;while (index > 0 && heapArray[index] > heapArray[parentIndex]) {swap(index, parentIndex);index = parentIndex;parentIndex = (index - 1) / 2;}}public static void main(String[] args) {int[] initialArray = {1, 2, 3, 4, 5, 6, 7};MaxHeap maxHeap = new MaxHeap(initialArray);System.out.println(Arrays.toString(maxHeap.heapArray));// [7, 5, 6, 4, 2, 1, 3]maxHeap.replace(5);System.out.println(Arrays.toString(maxHeap.heapArray));// [6, 5, 5, 4, 2, 1, 3]maxHeap.poll(2);System.out.println(Arrays.toString(maxHeap.heapArray));// [6, 5, 3, 4, 2, 1, 3]System.out.println(maxHeap.peek());// 6maxHeap.poll();System.out.println(Arrays.toString(maxHeap.heapArray));// [5, 4, 3, 1, 2, 1, 3]System.out.println(maxHeap.offer(5));// trueSystem.out.println(Arrays.toString(maxHeap.heapArray));// [5, 4, 5, 1, 2, 3, 3]maxHeap.poll();System.out.println(Arrays.toString(maxHeap.heapArray));// [5, 4, 3, 1, 2, 3, 3]maxHeap.offer(9);System.out.println(Arrays.toString(maxHeap.heapArray));// [9, 4, 5, 1, 2, 3, 3]}
}

http://www.hkea.cn/news/798211/

相关文章:

  • 福州市闽侯县建设局网站推广引流吸引人的文案
  • wordpress目录 读写权限泰安短视频seo
  • 东莞建设网站流程澎湃新闻
  • 萧县住房和城乡建设局网站seo排名推广工具
  • 企业网站php模板下载百度百科官网首页
  • 做愛視頻网站在线网页制作网站
  • 织梦pc怎么做手机网站搜索引擎优化的基础是什么
  • 课程建设网站设计源码爱站网反链查询
  • 安徽省建设业协会网站个人网页制作教程
  • 好的摄影网站推荐福州seo顾问
  • html做的好看的网站如何宣传推广产品
  • 微信手机网站制作怎么引流客源最好的方法
  • 宿州建设网站公司前端seo搜索引擎优化
  • 做王境泽表情的网站百度seo关键词优化排名
  • 怎么选择无锡网站建设虚拟主机搭建网站
  • 做原油期货关注什么网站搜索引擎优化是做什么
  • 微信小程序怎么制作游戏安卓优化清理大师
  • 胶南做网站初学者做电商怎么入手
  • 网站为什么要维护佛山网络营销推广
  • 国企网站建设报告怎么建造自己的网站
  • 免费做司考真题的网站余姚网站如何进行优化
  • 如何网站开发1688网站
  • 丽水专业网站建设价格青岛网站优化
  • 网站开发专业培训学校百度推广登录官网入口
  • 贵阳做网站公司网站热度查询
  • 做课件最好的素材网站考拉seo
  • 网站建设玖首选金手指seo网站优化收藏
  • 台州卓远做网站好不好广州seo教程
  • dz网站数据备份bt磁力猪
  • github 可以做网站吗360seo