- 博客(7)
- 收藏
- 关注
原创 HDU - 2147 巴什博弈(必败点和必胜点)
先解释一下必败点和必胜点: 必败点P:前一个选手取胜的位置,即谁先走到这个位置谁赢。 必胜点N:后一个选手取胜的位置,即谁先走到这个位置谁输。对于P-N表格,我们采用从终点往前推导的方法,因为,终点必定是必败点,终点不同,则必败点的位置不同,P-N表格的也不相同。P-N表格有以下三个属性: 一:终点必定是必败点(P点)。因为在终点时,已经没办法走了,那么就是从前一个位置进入这个位置的...
2018-05-30 17:18:48
2978
原创 哈夫曼树以及哈夫曼编码
哈夫曼树又叫最优二叉树,即叶子结点带权路径长度之和(WPL)最小。 关于哈夫曼树有在以下链接中的作者解释的很详细,不太清楚的同学可以去看一下。 https://www.cnblogs.com/zhangming-blog/p/5395950.html 下面我想补充下下哈夫曼编码,哈夫曼编码又称霍夫曼编码,或者最优编码。
2017-12-03 12:59:30
1187
原创 最小堆
最小堆是堆的两种形式之一,与最大堆结构类似,不过最小堆中任意结点都是左右子树中的最小值,代码实现和最大堆类似。在上一片博客中已经介绍过最大堆,所以在这里不再赘述。此为链接:最大堆 以下为代码实现:#include<stdio.h>#include<malloc.h>#define ElementType int#define MaxData -99999 //哨兵#define MaxSi
2017-12-02 13:47:45
534
原创 最大堆
最大堆是堆的两种形式之一,主要有以下几个特点: 一:是一棵完全二叉树; 二:根结点是堆中的最大值; 三:任意结点都是左右子树中的最大值。 最大堆的操作主要有下列三种: 一 创建:创建一个最大堆,关于最大堆的创建有两种方法,一种是将每个元素逐个插入堆中,时间复杂度为O(NlogN)。另外一种是先将元素按输入的顺序放进开辟的数组中,然后将数组调成最大堆,时间复杂度为O(N)。下面的代码实现采
2017-12-02 13:27:59
465
原创 求最大子列和
给定一个含有N整数的序列,求其最大子列和(即该序列中一段连续子序列和的最大值)。 大致思路是:定义一个当前位置之前的序列和的最大值(maxSum)以及当前子序列的和(thisSum),每迭代一次比较二者的大小关系,如果maxSum小于thisSum,则更新maxSum,否则继续遍历。当thisSum<0时,需要将thisSum重置为0,即求下一段子序列的和。
2017-11-26 18:29:08
331
原创 判断两个二叉树是否相同(c++递归实现)
判断两棵二叉树是否为同一棵树,需要比较两个方面: 一:结构是否相同; 二:每个节点上的元素是否相同; 当二者都满足的时候才可判定二者为同一棵二叉树。 结构相同包括节点的个数以及每个节点上的子树相同。
2017-11-26 12:43:49
5677
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人