算法设计
文章平均质量分 61
CavanWang
这个作者很懒,什么都没留下…
展开
-
一个数字排序的实现
问题描述:实现排列1,2,2,3这4个数字的所有情况,不准重复(不准有1223,1223这种情况),并依次输出每个排列 #includeusing namespace std;class stack{public: stack(){s= new int[100];top=0;} void push(int a){s[top]=a;top++;} int pop(){top-原创 2008-12-03 15:49:00 · 623 阅读 · 0 评论 -
解析xml
#include #define ch_not_spec(x) ((x) != '/' && (x) != '')struct XML_NODE{char name[64];char* property_start;char* property_end;int over_type;int type;std::vector child_list;原创 2015-08-01 18:43:01 · 646 阅读 · 0 评论 -
关于一个求最小交换次数的算法的一个严格证明,是严格证明,不是想当然
问题描述:有一个1~n的数列的排列,但是这个数列已经被打乱了排列顺序,如果我们只是通过“交换任意两个元素”,那么,要实现元素从1~n的有序排列,“最少的交换次数是多少?”解答过程:首先我们纸上可以先写写简单的情况试试,比如排列:4 3 1 2, 交换次数=3;我们可以在多组测试中,边测试边想,真正的实现需要满足:4本该到2处, 2本该到3处, 3本该到1处, 1本该到4处,刚好一个循环原创 2015-01-06 10:33:21 · 4722 阅读 · 0 评论 -
从n个数中选择随机选择m个, m个数互不重复
/////////*从n个数中选择随机选择m个, m个数互不重复******************//////////////////int g_seed = 0; void srand_quick(int seed){ g_seed = seed;} inline intrand_quick(){ return ( ((g_s原创 2014-11-14 11:54:56 · 3574 阅读 · 0 评论 -
严格的二分查找算法,返回第一个相等的数,而不是返回任意一个相等的
int index(int * arry, int count, int val){ int start , mid, end; start = 0; end = count - 1; int ret = -1; while( start { mid = (start + end)/2; if(val > arry[mid] ) { star原创 2013-06-28 17:34:35 · 1142 阅读 · 0 评论 -
判断四个扑克是否能算出24点
int can24(double * data, int count, double shouldVal){ #define fabs(x) ((x) /*判断4个数按照两个两个分组,分别计算出两个值,然后再根据两个值计算一下看看能不能构成shouldVal,这个x表示其中两个构成的一对计算出的值,然后pairshould判断另外两对计算的值能否跟之前计算的x算得shoul原创 2013-06-15 18:38:00 · 2659 阅读 · 0 评论 -
快速排序一趟分割,单循环
template void quickPartition(T * arry, int len){ T* bigPoint = arry + len - 1; T tmp; while(arry if(*arry >= *(arry + 1)){ tmp = *arry, *arry = *(arry + 1), *(arry + 1) = tmp; arry原创 2013-06-09 12:18:43 · 834 阅读 · 0 评论 -
递归处理正则表达式
/*这个小程序实现的是,匹配所有的子串。*表示重复>=0次 .表示匹配任意字符?表示重复0或1次+表示重复>=1次\加在上述字符前表示视作普通字符而非重复模式字符*/struct POS{ char * startIndex;//存放匹配子串在源串中起始索引 char * endIndex;//匹配子串在源串中下一次匹配的起始位置,原创 2013-05-07 13:26:29 · 761 阅读 · 0 评论 -
循环删除报数问题
给定n个排成一圈的人,他们依次循环报数:1,2,。。。,m;当报到m时,这个人就被踢出队伍。比如:n=6,m=3;那么将依次踢出:3,6,4,2,5,1算法:输入n,m输出:按被踢出顺序输出踢出的人思路:利用链表,指针p每次删除元素前调用p=p->next m-1次,利用循环链表表示“圈” void circleDelete(int n, int m){ struct myl原创 2013-04-22 18:32:00 · 871 阅读 · 0 评论 -
从1-n中选择m个数的组合个数
给定1,2,3,。。。,n(n>=1), 从n个数中选择m(m递归实现:var data = [1,2,3,4,5];var output = [];function outputAll(start, count){ console.log(start + "," + count); //跟踪调用过程 if(start data.length || data原创 2013-03-22 11:34:19 · 1281 阅读 · 0 评论 -
交换排序的平均复杂度的证明
大家都知道,交换排序在最坏的情况下的复杂度是O(n),但是,你知道平均复杂度为何也是O(n)吗?我这里所进行的证明,是在n个数都不同的情况下进行的。首先,什么叫做平均复杂度,我说说我个人理解。对于n个数的数组,公用n!种排列情况,我们进行排序,就是要把任意一种排列转换为1,2,3,4,。。。n的排列。所以,我认为,平均的复杂度就是:所有排列排序为有序序列所需的操作的和/不同排列的数目这里,原创 2012-03-23 16:44:19 · 1432 阅读 · 0 评论 -
从1-N的范围内随机取出K个数,并且不能重复值,如何高效取出?
一开始是从咱csdn上的一个讨论的问题看到的,我当时也稀里糊涂的发了个帖子,不过现在觉得我当时想的太简单了。就在那天上班回去的路上,我在想,大家都在聚焦于如何解决随机值重复,包括有人说借助hash法(这确实是解决重复的好方法),不过我要说的是,我们真的能取出这么多的随机数吗?换句话说,我们要平均调用多少次随机函数才能使不重复的随机数达到K个呢?后来我推算了一下 得到结论:平均要取:(N/(原创 2009-04-22 18:34:00 · 1943 阅读 · 0 评论 -
循环队列算法之快速实现--shell
#!/bin/bashread_index=-1write_index=-1n=3readable=0writeable=nread_one(){ echo "start to read...." if [ $readable -le 0 ];then echo "Cannot read anymore"原创 2017-02-06 19:00:42 · 427 阅读 · 0 评论