算法导论
zhangzhi2ma
这个作者很懒,什么都没留下…
展开
-
Huffman编码实现
实现一个Huffman编码类//霍夫曼编码 #include <iostream>#include <vector>#include <string>using namespace std;struct node{ int freq; char c; node * left; node * right;};class Huffm...原创 2018-09-11 19:04:11 · 309 阅读 · 0 评论 -
最长回文子序列
最长回文子序列:输入字符串的最长的回文子序列,例如输入 character,最长回文子序列是carac,是子序列,不是子串,从这个角度看,感觉跟前面的例子里,最长公共子序列很类似,借鉴那里的递归式:d[I,j]之间的最长回文子序列,如果I,j字符相同,回文子序列长度就等于d[i+1,j-1]+1,容易理解。如果I,j字符不同,回文子序列长度就等于max(d[i+1,j],d[I,j-1...原创 2018-09-11 10:53:33 · 996 阅读 · 0 评论 -
动态规划_钢条切割问题
动态规划的问题其实本质还是一种递归问题的优化,针对某一些递归问题,自上而下的求解会重复求解子问题的情况,(利用子问题图来发现这种情况),采用动态规划的方法解决这样的问题。一方面,通过对子问题进行记录备份,需要的时候查找,另一方面,采用自下而上的求解策略,对大规模的问题,首先求解每一个它要用到的小规模问题的解,然后记录,一路向上求解得到大规模问题。 钢条切割成小段以后,进行出售,不同...原创 2018-09-11 10:47:15 · 359 阅读 · 0 评论 -
红黑树的模板类(发现了之前没留卫星数据模板,,)_枚举类型(总忘叫enum)
如题,,红黑树实现前头学习了容器的使用,发现了之前写的没加卫星数据的问题。改进了//红黑树,有卫星数据#include <iostream>using namespace std;enum Color{ red,black}; template <class Key ,class Type>struct node{ Key key; Type ...原创 2018-09-10 15:03:53 · 143 阅读 · 0 评论 -
二叉树的模板类
同样的问题,当时忘了卫星数据的模板了//二叉树的模板类#include <iostream>using namespace std;template <class Type>struct node{ Type value; node<Type> *left; node<Type> *right; node<Type&g...原创 2018-09-10 14:59:11 · 604 阅读 · 1 评论 -
链表数据结构的模板类
//链表数据结构的模板类#include <iostream>#include <assert.h>using namespace std;#define N 10template <class Type>struct node{ Type value; node<Type> *next; node<Type> *p...原创 2018-09-10 14:48:30 · 213 阅读 · 0 评论 -
栈数据结构的模板类
栈数据结构的类;栈就是先入后出,//栈模板类#include <iostream>#include <string.h>#include <assert.h>using namespace std;template <class Type>class stack_class{ private: int max_len;//...原创 2018-09-10 14:39:42 · 268 阅读 · 0 评论 -
获得顺序统计量的选择算法(数组中第i顺序的元素)
假设数组是互异的,选择算法获得数组中的顺序统计量,期望时间为O(n),最坏时间为O(n平方)算法有一些与快速排序相似,对数组选定参考元素左右分类以后,左边是小于参考元素reference的,右边是大于reference的,然后检查一下reference的位置,是i就对了,不是i就递归调用。同样可以通过数组随机重排来达到平均期望时间 //获得顺序统计量的选择算法#include <...原创 2018-09-10 14:34:36 · 746 阅读 · 0 评论 -
计数排序
前面排序是通过比较排序,下界就是O(nlogn)计数排序用另外的临时空间,通过运算进行排序,可以达到线性时间O(n)大体思路是:找到最大的数max,申请临时空间c[max+1](包括0),然后遍历一次a,根据a数组的内容在c数组中记录该数出现的次数,(a数组的内容就是c的索引,如此计数),然后c再处理一次,累计,最后倒着开始,把a数组中每个元素,根据在c里面记录的顺序,填充到输出b数组里面...原创 2018-09-10 11:04:50 · 111 阅读 · 0 评论 -
堆数据结构的模板类_类的创建需要注意的地方
完成一个之前堆数据结构的模板类,关于类的创建需要注意的:默认构造函数,没有声明编译器会自动创建,创建类的时候调用默认构造函数。默认构造函数可以使带默认参数的。 析构函数,没有声明编译器会自动创建,对动态分配来说会造成内存泄漏等问题 复制构造函数,类作为函数参数(按值传递)的时候会新建临时副本,就需要调用复制构造函数,之后还会调用析构函数,就会产生问题,复制构造会单纯复制非静态成员(也就是动...原创 2018-09-10 10:37:04 · 185 阅读 · 0 评论 -
堆数据结构与堆排序
堆数据结构堆(二叉堆)是近似的完全二叉树,最底层允许不满,堆的相关,数组长度length,heap_size有效长度(堆的有效元素,未排序的数目)。Heap_size<length堆虽然很像二叉树,但是我的理解就是用二叉树的逻辑,但是最主要的区别在,堆的存储是用数组,只是用下标来帮助理解堆的存储结构从上往下,按顺序存储。然后是几个相关的操作,1、取父节点,取左...原创 2018-09-10 10:04:05 · 575 阅读 · 0 评论 -
随机数产生与数组随机化
随机数产生与数组随机化,的方法//随机数产生与数组随机化#include <iostream>#include <stdlib.h> #include <time.h>using namespace std;void Swap(int & a,int & b);void RandomInPlace(int a[],int n);...原创 2018-09-10 09:36:10 · 218 阅读 · 0 评论 -
二分法,最大子数组问题(分治法)
二分法简单,从排好序的数组里找数。时间复杂度就是O(logn)//二分法查找#include <iostream>#define N 100using namespace std;inline void Swap(int &a,int &b);void FastSort(int a[],int left, int right);bool Find...原创 2018-09-09 18:34:56 · 510 阅读 · 0 评论 -
快速排序,归并排序
快速排序是原址排序思路是,找一个参考元素,然后把小于参考元素的放左边,大于参考元素的放右边。再递归调用。再进行之前可以先把数组随机化一次,可以达到平均时间复杂度O(nlogn)这里有两种思路:一开始是,对数组a[left,,,right],参考元素选right(或left),然后i从left位置开始,向右搜索,找到小于参考元素reference的数,index记录当前插空的位置,把...原创 2018-09-09 16:40:18 · 843 阅读 · 0 评论 -
插入排序,选择排序
插入算法,类似打扑克的摸手牌,手上已有的是假设已排序的,新来的找到自己的位置,其他的给新来的腾个位置动一下窝,算法复杂度是O(n平方)选择算法,每次都遍历一下找到最小的,然后按顺序放进去。算法复杂度我觉得也是O(n平方),,//插入排序与选择排序#include <iostream>#include <stdlib.h> #include <tim...原创 2018-09-09 15:31:02 · 127 阅读 · 0 评论 -
贪心算法——活动选择
贪心算法,选择局部最优解活动选择问题,每个活动有开始时间s,结束时间f,找到最大兼容活动集。假设f按照大小顺序排好。每次就从当前结束时间往后选最近的开始时间的活动#include <iostream>#include <map>#include <vector>using namespace std;//void ActivitySel...原创 2018-09-11 11:09:35 · 858 阅读 · 0 评论