随笔分类 -  算法数据结构

用于梳理思路
摘要:以前写过两版算术表达式解析代码,但都是基于栈结构或者树模型的,并不是通用的算法。其实算术表达式解析是最基本的词法分析算法,直到我看了《自制编程语言》里面介绍的递归向下分析法,才明白这种问题的终极解决方案是使用词法分析和语法分析。。//用于词法定界的头文件 token.h 1 #ifndef _T... 阅读全文
posted @ 2015-02-10 22:56 mjwk 阅读(694) 评论(0) 推荐(0)
摘要://牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/(2*x); 7 y = x*x-num; ... 阅读全文
posted @ 2015-02-10 22:20 mjwk 阅读(1423) 评论(0) 推荐(0)
摘要:二叉树算法基本和递归有关,前中后序算法就不提了,主要看一下深度优先遍历和广度优先遍历。实现这2种遍历需要借助栈或者队列来保存中间结果,原因是遍历过程出现了回溯。 1 //笔试题:广度遍历二叉树、深度遍历二叉树 2 3 #include 4 #include 5 #include 6 7 usin... 阅读全文
posted @ 2014-03-09 19:48 mjwk 阅读(364) 评论(0) 推荐(0)
摘要://一个简单的计算器代码,主要用来练习C++11新标准的编程技术和stl应用 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 10 type... 阅读全文
posted @ 2014-03-09 18:26 mjwk 阅读(1357) 评论(0) 推荐(0)
摘要:归并排序理论上时间复杂度只有O(NlogN),但是其中存在过多临时内存分配和copy操作而不适用于内存排序,却是外部排序的基本思路。下面是我的实现:#include<iostream>#include<algorithm>#include<cstring>using namespace std;int g=0;/*a,b is input array * c is output array * size of c is na+nb */template<typename T>void merge(T a[],int na,T b[],int nb 阅读全文
posted @ 2013-06-04 21:45 mjwk 阅读(497) 评论(0) 推荐(0)
摘要:快排的思路就不说了,中轴分组,借助一个临时单元。时间复杂度O(NlogN)。下面是实现:#include<iostream>using namespace std;template<typename T>bool _less(T a,T b){ return a<b;}template<typename T,typename F>void qsort(T a[],int n,F f=_less<T>){ if(n<2)return; int first=0,last=n-1; T temp=a[0]; while(first!=las 阅读全文
posted @ 2013-06-04 12:24 mjwk 阅读(350) 评论(0) 推荐(0)
摘要:基数排序是基于桶式排序的变种,主要是为了通过多次遍历减少空间占用(效果相当显著)。其思路可以描述为: 1.首先待排序的序列要满足基数排序的特征,比如有“基数”的概念(整数和字符串都可以套用) 2.建立一个大小为“基数”的数组,数组每个元素是一个队列(为了节省空间应该使用链表实现) 3.根据序列的“位数”决定遍历的次数m,每次遍历相当于按某一位做桶式排序。重复的元素push到队列中。 4.m次遍历后排序完成,最后一次遍历输出结果。因为数据不是按线性结构存储。 下面是我的实现,采用vector<list>结构: 1 #include<iostream> 2 #incl... 阅读全文
posted @ 2013-06-04 11:36 mjwk 阅读(320) 评论(0) 推荐(0)
摘要:希尔排序的时间复杂度在O(N)到O(N2)之间,在大量数据排序中实践性能超过堆排序。特点是算法简单但是分析复杂。下面是实现:/* * a[] is an array to be sorted * n1 is the T array length * inc[] is the array to indecate the increasement * n2 is the inc array length */template<typename T>void shellsort(T a[],int n1,int inc[],int n2){ for(int i=0;i<n2;++i 阅读全文
posted @ 2013-06-04 11:02 mjwk 阅读(279) 评论(0) 推荐(0)
摘要:首先说明我算法不好,跳槽的时候发现自己的基础薄弱而且不成体系,所以这段时间(大约3个月)我将用全部可以利用的时间把常用的数据结构、算法、C++对象模型、STL、泛型编程、设计模式整理一遍,然后梳理一下思路,做到对C++基础知识体系“巨细匪遗,秩序井然”。这个目标并没有看上去那么难,可以一试。首先... 阅读全文
posted @ 2013-05-30 18:45 mjwk 阅读(904) 评论(2) 推荐(1)