摘要: 原文链接为http://hxraid.iteye.com/blog/647759从《基于比较的排序结构总结 》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快的算法。这些算法并不是不用“比较”操作,也不是想办法将比较操作的次数减少到 logN。而是利用对待排数据的某些限定性假设 ,来避免绝大多数的“比较”操作。桶排序就是这样的原理。桶排序的基本思想 假设有一组长度为N的待排关键字序列K[1....n]。首先将这个序列划分成M个的子区间(桶) 。然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) ,那么该关键字... 阅读全文
posted @ 2011-09-06 22:36 枕边梦 阅读(392) 评论(0) 推荐(0) 编辑
摘要: 其实,说得简单明了的一点,就是求俩个分数的最小公倍数;方法:先将俩个分数转换成最简形式,在求出俩个分母的最大公约数最为最小公倍数的分母,求出俩个分子的最小公倍数做为最小公倍数的分子即可;当我把我的代码改得面目全非的时候,我才发现了我WA的原因,求最小公倍数的时候int lcd(int u,int v,int h){ return(u*v/h);//这步溢出了}应该改为int lcd(int u,int v,int h){ return(u/h*v);}#include<iostream>using namespace std;int n;int hcf(int a,int b){ 阅读全文
posted @ 2011-09-06 19:54 枕边梦 阅读(328) 评论(0) 推荐(1) 编辑
摘要: 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1568我的天呐,写了那么久的代码,拼命地想省内存,可是还是没用呀,那么大一个数,数组至少就要那么大了呀,看看我那MLE的代码吧,原因是我用了递推公式,下面一个是直接用公式计算每一个的MLE的代码#include<iostream>#include<stdio.h>#include<math.h>#include<string.h>#include<stdlib.h>using namespace std;int sum[2][200];int 阅读全文
posted @ 2011-09-06 17:51 枕边梦 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 先看下资料,数学公式来的资料转自:http://jackiesteed.blog.163.com/blog/static/165506750201051552930758/约瑟夫环问题是一道经典的数据结构题目问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。一般我们采用一个循环队列来模拟约瑟夫环的求解过程,但是如果n比较大的时候,采用模拟的方式求解,需要大量的时间来模拟退出的过程,而且由于需要占用大量的内存空间来模拟队列中的n个人,并不是一个很好的解法。在大部分情况下,我们仅仅需要知道最后那个人的编号,而不是要来模拟一个这样的 阅读全文
posted @ 2011-09-06 15:21 枕边梦 阅读(579) 评论(0) 推荐(0) 编辑
摘要: 经典的统计题目题意:给出N个人的坐标,求出在以r为边的正方形中最多的人数分析:因为正方形的位置并未固定,而要满足覆盖最多的点,则以某一个点的y坐标作为下边界一定有最优解,所有:首先对N个人的纵坐标进行排序,枚举所有Y坐标(正方形下边界),找出满足以当前y坐标为下边界的正方形内的点,再枚举满足条件的点X坐标,计算以r为边最多可覆盖的点,总复杂度O(n^2)代码:#include<iostream>#include<algorithm>using namespace std;struct node{ int x,y;}p[1001];int n,ans,r,xx[1001] 阅读全文
posted @ 2011-09-06 12:55 枕边梦 阅读(383) 评论(1) 推荐(0) 编辑