算法设计复习之概念和问答

算法

算法是指解决问题的准确方法或步骤。

时间复杂度

算法的时间复杂度,是用来衡量算法的运行时间,记做O(f(N)),算法执行的时间的增长速度可以用f(N)表示。

贪心法

贪心法就是在每一步选择中都做最好的选择,从而希望结果是最好的算法。

分治法

将一个难以解决的大问题,分割成多个较小的相同问题,逐个击破。

搜索算法

搜索算法是指利用计算机的高性能来有目的地穷举一个问题的部分或全部解决方法,从而求出问题的解。

递归

递归是指在一个方法函数中直接或者间接的调用自身。

算法分析

指对一个算法所需要的计算时间和存储空间的分析。

画递归调用时调用栈里的主要内容(局部变量、形式参数)

哈夫曼树、哈夫曼编码

1.哈夫曼树

哈夫曼树指带权路径最短的二叉树,也叫做最优二叉树。

带权路径=根节点到该节点的路径*该节点的权值

例子:

节点ABCDE
权值285107

哈夫曼树构建过程:

1.先取出最小的两个节点,小的在左边,大的在右边

此时AC:7
在这里插入图片描述
2.继续以上步骤,去掉A和C,加入AC

选择AC和E组合

在这里插入图片描述
3.重复以上步骤

这次选择B、D

在这里插入图片描述

4.此时只剩BD和ACE两个,组合他们,这就是例子的哈夫曼树
在这里插入图片描述
路径长度就是该节点的层数-1,如E结点的路径长度为3-1=2

哈夫曼树的总带权路径长度用WPL表示,该哈夫曼树的WPL=2*7+3*2+3*5+2*8+2*10=71

2.哈夫曼编码

在哈夫曼树中。左边代表0,右边代表1,以上面的例子为例

在这里插入图片描述

此时A结点的哈弗曼编码就是000,B的是10,C的是001,D的是11,E的是01

常见的最小生成树的构造方法有哪两种?

1.Kruskal算法

算法思想:
       根据边的权值从小到大排序,然后从最小的边开始一一检查,如果不会构成回路则添加进结果集。

2.Prim算法

算法思想:

  1. 选择任意一个顶点加入到集合A,其他顶点在集合B
  2. 选择一个顶点在A一个顶点在B并且权值最小的边加入到最小生成树
  3. 然后将该边的在B的顶点加入到集合A
  4. 重复以上步骤,直到全部加入到集合A
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值