数据结构与算法
文章平均质量分 65
小辣抓
<WEB /> Developer
展开
-
如何计算完全二叉树的深度
如何计算完全二叉树的深度一棵有12个节点的完全二叉树,其深度是()一棵有12个节点的完全二叉树,其深度是()4536在此之前我想说一下三种二叉树Full Binary TreePerfect Binary TreeComplete Binary Tree为什么要说到这个问题,是因为在翻译的时候有个坑,特地想拿出来给大家说一下,Full Binary Tree翻译过来应该是满二叉树,原创 2017-09-22 19:46:52 · 24327 阅读 · 2 评论 -
为什么银行家舍入是合理的?
我们知道银行的盈利渠道主要是利息差,从储户手里收拢资金,然后放贷出去,其间的利息差额便是所获得的利润。对一个银行来说,对付给储户的利息的计算非常频繁。场景介绍完毕,我们回过头来看四舍五入,小于5的数字被舍去,大于等于5的数字进位加一,由于所有位上的数字都是自然计算出来的,按照概率计算可知,被舍入的数字均匀分布在0到9之间,下面以10笔存款利息计算作为模型,以银行家的身份来思考这个算法:(1)四...转载 2019-02-27 18:57:10 · 1402 阅读 · 0 评论 -
经典回溯算法 八皇后 解法
经典回溯算法 八皇后 解法八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。回溯法又称作动态穷举法。下面来看一下具体的实现思路。一个皇后的具体位置必须满足以下条件:该皇后所在行没有其它皇后该皇后的...原创 2018-05-22 23:05:06 · 813 阅读 · 0 评论 -
二叉堆
二叉堆本文要说的不是堆栈的堆,而是数据结构中的堆。 堆又被称作为优先队列。队列是FIFO的数据结构,堆也可以看作是一种FIFO的数据结构,不同的是,堆可以被看作是有优先级的,比如小根堆,总是关键字最小的节点为队首。 思考一个问题: 一个打印机内部维护一个队列,把需要处理的文件都交给队列处理,那么可能现在出现一种情况是,先来的作业需要打印100张,后来的只需要打印一张,常理之下,我们可能会...原创 2018-05-22 15:13:10 · 346 阅读 · 0 评论 -
算法的最坏情况与最佳情况
原文链接:http://www.nowamagic.net/librarys/veda/detail/2196 如果一个程序运行多次,则有时候它会快点儿,有时候它会慢点儿。算法也一样,在输入1的情况下和输入2的情况下,其执行效率不一定一样。即算法会随着输入数据的不同而有秩序效率的不同,有时候会快点儿,有时候会慢点儿。例如,对一个已经排好序的序列进行排序就要相对容易一些。另外,输入规模的大小也影响...转载 2018-05-13 20:49:23 · 3899 阅读 · 2 评论 -
双向冒泡排序 冒泡排序 性能对比
双向冒泡排序 冒泡排序 性能对比数据结构与算法与语言无关,此篇博文用的描述语言是go冒泡排序冒泡排序的时间复杂度是O(n2)先看一个简单的冒泡排序//普通冒泡排序func normalBubbleSort(sequence []int){ for i := 0;i < len(sequence) - 1;i++ { for j := 0;...原创 2018-04-11 19:22:49 · 4288 阅读 · 3 评论 -
哈夫曼(Huffman)编码实现
哈夫曼(Huffman)编码实现哈夫曼编码(Huffman Coding)是一种编码方法,哈夫曼编码是可变字长编码(VLC)的一种。哈夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的...原创 2018-04-10 21:49:40 · 6577 阅读 · 1 评论 -
图的遍历
图 深度优先 广度优先遍历图是一种非线形的数据结构,一般储存图用邻接矩阵或者是邻接表,下面简单的实现一下图的深度优先遍历和广度优先遍历,储存结构用邻接矩阵先看一下该图的邻接矩阵0,1,1,1,0,0,00,0,1,0,1,0,00,0,0,0,1,0,00,0,0,0,0,1,00,0,0,0,0,0,10,0,1,0,0,0,10,0,0,0,0,0,0根据邻接矩...原创 2018-04-09 22:50:46 · 263 阅读 · 0 评论 -
三角矩阵压缩
三角矩阵压缩关于三角矩阵的描述是,其非0元素呈三角状排列,三角矩阵又分上三角矩阵和下三角矩阵,如果我们用二维数组来储存三角矩阵的话,0元素会浪费很多的空间,因此我们可以用一维数组把矩阵进行压缩,下面给出一个java压缩下三角矩阵的例子:package com.bikeqx.main;public class Main { public static void main(St...原创 2018-03-16 13:10:32 · 2196 阅读 · 0 评论 -
根据递归式算时间复杂度
根据递归式算时间复杂度时间复杂度是描述一个算法所占用的时间资源的描述。下面来看一个递归式:T(n) = 2T(n/2) + n下面贴一下计算过程:解:已知T(n) = 2T(n/2) + n , 则可得 : T(2n) = 2T(n) + 2nT(2n)/2n = T(n)/n + 1T(2n)/2n - T(n)/n = 1设C(n) = T(n)/n,可...原创 2018-03-15 19:18:05 · 1035 阅读 · 0 评论 -
树中的叶子结点的个数 计算方法
树中的叶子结点的个数 计算方法在学习树的时候经常会遇到计算树中叶子结点的个数的题,比如现在有这样一道题已知在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶子结点的个数为?解决这道题的思路是列出一个关于各个度的结点的等式,从而根据已知条件算出度为0的结点的个数,下面具体说一下解题方法:设树T中的结点个数为n,度为0...原创 2018-03-15 15:32:05 · 104991 阅读 · 22 评论 -
AOE网中为什么关键路径是最长路径
AOE网中为什么关键路径是最长路径我开始也对AOE网中的关键路径很懵,不明白为什么关键路径就是最长路径,难道不应该是最短路径吗今天又看了一下相关的知识点,发现还是对基础掌握不够牢固。 需要明确的是,AOE网中,顶点被称为事件,而边(或弧)才是活动的描述,边的权值代表活动所花费的时间,因此,事件就是一个活动结束,另一个活动开始的标志,那么要完成整项工程就需要将前面的活动全部完成,所以选最长...原创 2018-03-08 19:25:20 · 14016 阅读 · 0 评论 -
树、森林 二叉树互相转换
树、森林 二叉树互转树和森林可以与二叉树互相转换(ps:因为找不到画图工具了,没有直接的连线方式,二叉树各个节点的连线本是没有方向的,而这里有方向,因为工具原因不严谨,见谅)树的几种表示方式先来看一下树的三种表示方法双亲表示法创建一个二维表格,描述当前节点的data和当前节点的双亲节点 优点:显而易见,对于寻找该节点的双亲节点是非常容易的 缺点:缺点也是显而易见的...原创 2018-03-07 13:33:47 · 1084 阅读 · 0 评论 -
完美二叉树, 完全二叉树和完满二叉树
完美二叉树, 完全二叉树和完满二叉树本文出处:http://www.cnblogs.com/idorax/p/6441043.html树在数据结构中占有非常重要的地位。本文从树的基本概念入手,给出完美(Perfect)二叉树,完全(Complete)二叉树和完满(Full)二叉树的区别。如果学习过二叉树,但是对这三种二叉树并没有深入的理解,或者完全被国产数据结构教科书所误导(只听说过满二叉树和完全二转载 2017-09-22 17:19:47 · 12074 阅读 · 0 评论 -
求解 Fibonacci 的正确姿势
求解 Fibonacci 的正确姿势前言吼。很久没有产出博客了,这几天都闲的很,可是产出博客的好时机啊,可是写什么呢?脑子里过的第一个是 fibonacci,好啦,就写它吧!Fibonacci (递归)这玩意儿算是老朋友了,在大学,或者是刚学计算机基础的时候,递归的经典案例就是它,别被它的名字吓到,它就是普通的数列而已,它的通项公式是Fibonacci(n) = Fibonacci(n...原创 2019-02-20 18:39:42 · 606 阅读 · 2 评论