
数据结构
hjimce
追求实现文献算法的快感,追求学会一个新算法的充实感
展开
-
数据结构(七)队列
1、队列需要具备的特性队列和栈的底层实现数据结构可以是:数组、链表,只不过在此基础上,队列和栈需要重载两个函数:节点的插入与删除函数。队列只能从链表头删除节点,从链表末尾插入节点;2、示例代码#ifndef DATA_STRUCT_QUEUE_H#define DATA_STRUCT_QUEUE_H#include using namespace std;class Queue{原创 2018-02-03 11:39:08 · 2046 阅读 · 0 评论 -
数据结构(六)霍夫曼树与编码
1、算法流程(1)构建霍夫曼树:自底向上根据统计频率构建霍夫曼树: A、把所有的节点扔进排序队列queue中; B、从queue选择选择前面两个最小的元素a、b,把最小的树a作为左节点,把最小的b作为右节点,以此构建父节点c(c的频率值为a+b的频率值),然后把a、b从队列删除、把c节点插入队列; C、循环(A)、(B)步骤构建霍夫曼树,直到queue为空。(2)编码阶段:自顶向下 A、除了树的根...原创 2018-02-02 16:07:46 · 2538 阅读 · 0 评论 -
数据结构(十四)归并排序
1、分解将待排序数组A[1..n]分成两个各含n/2个元素的子序列,然后对这个两个子序列进行递归排序,最后将这两个已排序的子序列进行合并,即得到最终排好序的序列:merge_sort(A,p,r){ if(p<r) { q=(p+r)/2; merge_sort(A,p,q); merge_sort(A,q+1,r); ...原创 2018-02-23 16:39:12 · 2294 阅读 · 0 评论 -
数据结构(十三)树的遍历
1. 前序遍历先访问自己,然后访问左子树,再访问右子树(1) 递归方法function(node*p){ print p.value function(p->left); function(p->right);}(2)非递归方法while(p!=null&&!stack.empty()){ while(p!=null) { ...原创 2018-02-22 10:51:56 · 2112 阅读 · 0 评论 -
数据结构(十一)桶排序
1、算法流程上面的计数排序其实是桶排序的一个特例,当数据的范围是0~n,我们如果划分了n个桶,那么就是计数排序。我们现在假设数据范围是0~1的数,算法流程如下:(1)划分桶;(2)把每个数据插入对应的桶中,插入每个桶的时候,用插入排序;(3)链接所有的不为空的桶排序结果。2、代码实现//假设数据范围是0~1,我们切分了5个桶float * bucket_sort(float *data,int原创 2018-02-06 19:56:48 · 2928 阅读 · 0 评论 -
数据结构(十七)最小生成树
最小生成树的目标是把本来一个包含n个节点的二维图结构,用n-1条边连接起来,并且这些边的长度总和最小。1 算法原理与dijkstra算法有点类似,假设图中有顶点V={A,B,C,D,E,F},我们要生成最小生成树。准备两个集合S_frozeen={},S_inactive={A,B,C,D,E,F},S_frozeen我们称之为源,最小生成树prim算法流程为:每次提取S_inactive中离源S...原创 2018-02-27 11:18:24 · 2876 阅读 · 0 评论 -
数据结构(十六)多源最短路径
求取i到j的最短距离,主要是通过引入第三个顶点k,如果d(i,j)>d(i,k)+d(k,j),那么也就是i到j之间如果经过k,距离是更短的。for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(e[i][j]>e[i][k]+e[k][j] ) e[i][...原创 2018-02-26 16:35:56 · 2458 阅读 · 0 评论 -
数据结构(五)堆排序
1、算法流程(1)对原始数据构建大根堆:A、从下至上,遍历每个非叶子父节点,保证每个非叶子父节点都比它的左右子节点来的大,非叶子父节点的对应索引范围为[0,n/2-1];B、在遍历每个非叶子父节点的时候,如果发生该节点交换(下沉),那么要递归下去(2)交换大根堆构建后的数组的首个元素与末尾元素,这时候数组的末尾数值最大,排除该元素排序。(3)接着因为这个堆,就相当于堆顶元素被替换成了新的元素,其他原创 2018-01-28 11:17:58 · 1223 阅读 · 0 评论 -
数据结构(十五)dijkstra单源最短路径
1 算法原理假设图中有顶点V={A,B,C,D,E,F},我们要求取A到其他顶点的最短距离。假设我们要求取定点A到其它顶点的最短路径,先把顶点A到源的距离设置为0,其他的距离设置为无穷大。准备两个集合S_frozeen={},S_inactive={A,B,C,D,E,F},S_frozeen我们称之为源,单源最短路径的的原理就是:每次提取S_inactive中离源S_frozeen最近的顶点,添...原创 2018-02-26 16:15:03 · 2506 阅读 · 0 评论 -
数据结构(十二)动态规划
1 递归函数建模动态规划一般用于全局问题,在构造递归的时候,一般采用自顶向下分解的方法,先把全局问题分解成更小的子问题求解。下面举两个例子例子1:有一座高度是10阶的楼梯,从下往上走,每跨一步可以是一级或两级台阶。要求用程序求出一共一共有多少种走法。问题分析建模:首先总共有10步,假设只剩最后一步就到达第10阶,这个时候会有两种情况:第一种是从第九阶到第十阶,第二种是从第八阶到第十阶,然后两种情况...原创 2018-02-11 15:56:49 · 2781 阅读 · 0 评论 -
数据结构(十)二叉排序树
1、算法流程(1)树的构建与插入、查找 二叉排序树主要是通过逐个节点插入的方式进行构建树;每插入一个新节点p的时候,从根节点开始判断key值大小,确定往左走还是往右走,逐步递归,直到走到叶子节点,无路可走了,然后插入该节点;需要注意的是:每个新插入的点,肯定都是叶子节点;另外没有办法一次性构建一整颗树。(2)求取最大最小值 从树根节点开始,一直往左走,就是最小值;一直往右走,就是最大值(3)查找P原创 2018-02-05 20:10:02 · 2619 阅读 · 0 评论 -
数据结构(九)计数排序
1、算法流程(1)求取待排序数组A的最大值max;(2)创建一个新的数组C[max+1],用于统计数组A中的每个元素a,小于等于a的个数。(3)根据小于等于a的个数,来确定排序后,a在排序数组中的位置,进行位置填充;2、代码实现写代码需要注意事项:(1)计数统计结束后,我们根据C[a]的大小填充元素a,每填充一次C[a]要减去1,这样是为了保证重复数据可以正常填充;(2)填充如果是要稳定排序,那么原创 2018-02-05 19:02:07 · 2338 阅读 · 0 评论 -
数据结构(四)选择排序
1、算法流程(1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。(2)然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。(3)以此类推,直到所有元素均排序完毕。2、代码实现void select_sort(int*data,int length){ for(int i=0;i<length;i++) { int min_da原创 2018-01-27 20:17:51 · 578 阅读 · 0 评论 -
数据结构(三)插入排序
1、算法流程(1)假设数据集A,第i个元素的左边是排序好的;(2)把第i个元素a从右到左与i左边的元素b比较,如果发现该b>a,那么就把b后移一个位置(需要把a元素的位置先临时保存下来,然后空出位置);直到b的时候,就把a插进去。2、代码实现:void insert_sort(int*data,int length){ for(int i=0;i<length;i++) {原创 2018-01-27 19:53:32 · 471 阅读 · 0 评论 -
数据结构(二)冒泡排序
1、算法流程:(1)循环比较两个相邻的元素,如果第一个比第二个大,那么交换(2)经过第一轮迭代后,最后一个元素是最大值;然后继续第二轮迭代,除了最后一个之外(3)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。2、代码实现:void bubble_sort(int*data,int length){ bool flag= true; int count=0;原创 2018-01-27 18:49:16 · 668 阅读 · 0 评论 -
数据结构(一)快速排序
1、算法流程(1)输入两个哨兵i,j,整个过程要一直保证i(1)从数组D中选择第一个数为基准数A=D[i];(2)循环查找交换对,并交换,直到不满足i:从i+1元素开始,向右查找大于A的数a(始终保证i;从j元素查找小于A的数b(始终保证i,得到交换对(a,b),然后进行交换(4)判断终止位置i=j的位置数值与基准数A是否需要交换,这样最后得到的就是A左边的数D1都是小于A的,A右边的数D2,都是原创 2018-01-27 17:40:17 · 1299 阅读 · 2 评论 -
数据结构(八)栈
1、算法栈是后入先出的规则,在代码实现的时候,构造栈链表的时候,节点指向前面的节点,而队列节点指向后面的节点,以便出栈的时候,代码实现方便。2、代码示例#ifndef DATA_STRUCT_STACK_H#define DATA_STRUCT_STACK_H#include using namespace std;class Stack{ class node{//链表节点原创 2018-02-03 11:56:50 · 2087 阅读 · 0 评论 -
深度学习(一)深度学习学习资料
持续更新原文地址:http://blog.youkuaiyun.com/hjimce/article/details/45421595作者:hjimce一、学习清单1、综合类(1)收集了各种最新最经典的文献,神经网络的资源列表:https://github.com/robertsdionne/neural-network-papers 里面包含了深度学习领域经典、以及最新最牛逼的算法,如果把这个列表学过一遍...原创 2015-05-01 20:22:28 · 32464 阅读 · 0 评论