这次打算法马拉松是在星期五的晚上,发挥还算正常(废话,剩下的题都不会= =)。 讲讲比赛经过吧。 8:00准时发题,拿到之后第一时间开始读。 A配对,看上去像是二分图最大权匹配,一看范围吓傻了,先跳过读后面的题。 B完全二叉树的方差,大概看了一遍,好神的样子,跳过。 C多项式?好吧没学过FFT和NT ...
分类:
编程语言 时间:
2017-01-05 21:42:59
阅读次数:
309
完全二叉树 若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,这就是完全二叉树。 完全二叉树特点 一、叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1; ...
分类:
其他好文 时间:
2017-01-03 23:46:44
阅读次数:
321
1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架 ...
分类:
编程语言 时间:
2016-12-31 17:06:09
阅读次数:
255
/* 利用完全二叉树的性质,一个线性数组可以看做是完全二叉树的层次遍历 每次循环把二叉树按照双亲大于左右孩子的规则调换位置,这样一轮下来,根结点就是最大的那个数 把根结点和最后一个元素交换位置 下一次循环继续调换位置,除了最后一个元素 再一次循环继续调换位置,除了最后一个和倒数第二个元素 依次类推。... ...
分类:
编程语言 时间:
2016-12-26 22:03:55
阅读次数:
255
满二叉树:一颗深度为k且有2^k-1个节点的二叉树称为满二叉树; 完全二叉树:对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,自左至右。深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树编号从1至n的结点对应时,称为完全二叉树。如图所示: 1. 判定完全二叉树。判 ...
分类:
其他好文 时间:
2016-12-25 02:03:02
阅读次数:
252
1、定义与基本术语 树的结构定义 其他表示树的方法: 其他术语: 2、二叉树 1)定义: 性质: 2)满二叉树与完全二叉树 3、存储结构 4、遍历二叉树 伪代码 中序遍历非递归算法 前序遍历构建二叉树 5、线索二叉树 中序遍历线索二叉树 后序线索二叉树 中序遍历二叉线索树 非递归算法 6、树和森林 ...
分类:
其他好文 时间:
2016-12-19 10:46:53
阅读次数:
199
「仅为草稿,尚未详解」 堆排序(C语言版) 走进堆排序 什么是堆 堆实质就是一颗完全二叉树,其任何一非叶子节点满足下列性质。 i=1,2,3...n/2 说明: 既然是完全二叉树,我们就可以用数组来表示! 堆根据上面的性质又分为: 从中不难发现,大顶堆从上往下依次键值减小,小顶堆从上向下键值增大。 ...
分类:
编程语言 时间:
2016-12-18 23:09:16
阅读次数:
346
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2016-12-18 02:09:08
阅读次数:
321
堆是一个数组,可以被看成一个近似的完全二叉树。 树上的每一个结点对应数组中的一个元素 A[1...A.heap-size] PARENT(i) return Li/2j LEFT 2i RIGHT 2i + 1 最大堆的性质 A[PARENT(i)] >= A[i] 最小堆的性子 A[PARENT( ...
分类:
编程语言 时间:
2016-12-11 20:46:14
阅读次数:
315
1、堆排序的堆,其实是一个 完全二叉树。既是一个结点要么是叶子结点,要么必定有左右两个子节点的树。 2、堆有序:每个结点的值,都必须大于两个子节点。但是两个子结点的大小不作要求。 3、一棵大小为N的完全二叉树,高度为lgN(层)。 用数组实现堆,假设数组下标从0开始,下标为k的元素,它的左子树是2k ...
分类:
编程语言 时间:
2016-12-09 22:11:12
阅读次数:
174