学习Huffman编码最大的收获是学会了STL中优先队列的使用以及在使用的时候要注意的问题:在使用自定义数据类型的时候,优先队列要重载自己的比较操作符。
关于Huffman树怎么讲解请看算法导论讲解,原理真的很简单,不过要写出完整的代码难点就在于优先队列的使用。不废话了啊,再次强调,想把原理弄清楚,请看算法导论,树上的讲解比网上什么垃圾讲解不知道清晰多少,一看就懂。-----------...
分类:
编程语言 时间:
2014-12-22 09:30:56
阅读次数:
209
今天学习了算法导论上的归并排序算法,并且完成了在纸上写出伪代码,以前就学过归并但是理解的不够透彻,以
前还一直困惑:为什么明明归并排序比快排的时间复杂度更稳定,为什么库函数不用归并而用快排,现在知道原因了,因为归并排序必须开额外的空间,而且空间开销还比较大,下面介绍算法:
首先,归并排序用到了分治的思想,把大数据分成若干个小数据,然后再分别对小数据进行处理,最后把小数据
合并成大...
分类:
编程语言 时间:
2014-12-21 01:56:27
阅读次数:
286
编译原理学习导论
大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,...
分类:
其他好文 时间:
2014-12-19 23:30:31
阅读次数:
326
一个ACM若菜,趁着ACM淡季,开始学习算法导论了,经过一年的ACM学习,逐渐的发现,学东西,深入才是王道,以前学习一个算法,总是看懂了就开始做题,到后来才发现很多题目,会算法,却不知道是用这个算法,这就是算法理解的不到位的后果,从今天开始,定下目标:
1.深入系统的学习算法,
2.学会纸上写伪代码,每章的代码自己先在纸上写一遍,
3.每节的学习笔记和算法都要写在博客上。
在博客上记录自己...
分类:
编程语言 时间:
2014-12-19 23:28:27
阅读次数:
189
RT。求平面上点集的凸包。
1. GrahamScan算法,《算法导论》上的例子,先找到y最小的点O,以O建立极坐标,其它点按极角排序后再从头开始扫描(配合stack实现)。
2.BruteForce算法,依赖定理:如果一个点在平面上某三个点组成的三角形内,那么这个点不可能是凸包上的点。
所以暴力的思路是平面上的点每4个进行枚举,并判断是否满足定理,若满足,则删除这个点继续找;一直找到没有满...
分类:
编程语言 时间:
2014-12-16 19:14:22
阅读次数:
306
设想你抛一枚硬币n次,你期望看到的连续正面的最长序列是多长?
这是算法导论第四章里的一个问题,今天看了好久,才明白过来,在这里做个记录。
书上从两个不同的角度分析了这个问题,一个是从概率的角度,通过计算这个序列长度的上界和下界推导出序列长度,一个是利用书上所说的指示随机变量(indicator random variable)的角度(个人理解就是期望),去分析。前者太复杂了,看了一半就晕了,这...
分类:
其他好文 时间:
2014-12-16 15:12:21
阅读次数:
340
#include
#include
using namespace std;
#define inf -9999
int memorized_cut_rod_aux(int p[],int n,int r[])
{
int q=0;
if(r[n]>=0)
{
return r[n];
}
else
{
//int q=inf;
for(int i=1;i<=n;++i)...
分类:
编程语言 时间:
2014-12-15 20:22:04
阅读次数:
272
#include
using namespace std;
int bottom_up_cut_rod(int p[],int n,int &pos)
{
int *r=new int[n+1];
int *s=new int[n+1];
for(int i=0;i<=n;++i)
s[i]=0;
for(int i=0;i<=n;++i)
r[i]=0;
for(int j=1...
分类:
编程语言 时间:
2014-12-15 20:21:15
阅读次数:
340
1、基本概念
一个给定序列的子序列就是该给定序列中去掉零个或者多个元素的序列。形式化来讲就是:给定一个序列X={x1,x2,……,xm},另外一个序列Z={z1、z2、……,zk},如果存在X的一个严格递增小标序列1,i2……,ik>,使得对所有j=1,2,……k,有xij
= zj,则Z是X的子序列。例如:Z={B,C,D,B}是X={A,B,C,B,D,A,B}的一个子序列,相...
分类:
编程语言 时间:
2014-12-15 09:03:05
阅读次数:
366
【问题描述】
给定有n个连乘矩阵的维数,要求计算其采用最优计算次序时所用的乘法次数,即所要求计算的乘法次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是10*100,100*5和5*50,采用(A1A2)A3,乘法次数为10*100*5+10*5*50=7500次,而采用A1(A2A3),乘法次数为100*5*50+10*100*50=75000次乘法,显然,最好的次序是(A1A2...
分类:
编程语言 时间:
2014-12-14 18:40:36
阅读次数:
277