
算法
文章平均质量分 72
qyxqyxqyx
每天一个算法每天一个模式
展开
-
编程之美2.5查找最大的k个数的实现<method1>
//从n个数中查找最大的k个数,method1 //时间复杂度O(N*log(K)) #include#includeusing namespace std;void f(int k,vector& v,vector& sa,vector& sb){//v输入数组,sa比x大的数的数组,sb比x小的数组。 while(1){ int x=v[(i原创 2011-10-23 16:58:45 · 830 阅读 · 0 评论 -
从n中取出m个不重复的数
方法1:从n个中取m个,当前这个数被取出的概率为n/m,即if(rand() % n void genKnuth(unsigned int n , unsigned int m){ int remain = n; int unselect = m; for (int i = 0;i<n;++i) { if (rand()%remain < unselect) {原创 2013-07-29 16:47:51 · 1523 阅读 · 0 评论 -
统计单词出现的频度
对于一些单词,如"aaa aa b aa bbb aaa",统计各个单词出现的频度。资料出处:编程珠饥 15.1方法一:用标准库的map。map m;对于string s;++m[s];即可统计字符串的个数,因为m[s],如果s存在,则自增,如果s不存在,则m[s]会创建,并初始化为int()即是0,并自增。由于map使用的平衡树,对n个单词,搜索的时间复杂度为n*log(n)原创 2013-05-13 22:29:08 · 1326 阅读 · 2 评论 -
计算器程序,支持+-*/和(),以#号结尾,有词法分析,和运算,没有语法分析是否正确,但是只要输入正确就能运行
#include#include#include#includeusing namespace std;class Token{public: int kind;//0:符号 1:数字 char sym;//记录符号 float value;//记录数值 }; bool bigger(char c1,char c2){//运算符优先级比较原创 2012-05-10 22:55:09 · 1158 阅读 · 0 评论 -
编程之美2.9fibonacci数列method3
#include#includeusing namespace std;typedef pair Point;templateclass Matrix{private: T* start; int row;//行数 int col;//列数 public: Matrix(){ start=NULL;row=0;col=0; } Mat原创 2011-10-26 09:52:59 · 811 阅读 · 0 评论 -
编程之美2.5查找最大的k个数method2
//从n个数中查找最大的k个数 #include#includeusing namespace std;void input(int& i){ i=rand()%100;} void print(int i){ cout<<i<<" ";} int f(vector& v,int p){//v中比p大的数的个数 int a原创 2011-10-23 17:05:49 · 663 阅读 · 0 评论 -
编程之美2.8查找符合条件的数
//N*M,N给定值,求最小M使得N*M的值中只有0或1#include#include#includeusing namespace std; int head_0(unsigned long b){//b的32位二进制表示前面有多少个0 int count=0; unsigned long tp=0x80000000; while(!(b&tp原创 2011-10-23 18:09:02 · 666 阅读 · 0 评论 -
编程之美2.4查找最大的k个数method4
//每个数对应一个值个数的计数,从大到小,若数目统计达到k,则把比这个数大的数都输出//时间复杂度O(3*n)=o(n) #include#includeusing namespace std;#define Max 100#define Min 0void input(int& i){i=rand()%100;}void output(int& i){cout<<原创 2011-10-23 17:20:48 · 664 阅读 · 0 评论 -
编程之美2.4查找最大的k个数method3
//最小堆算法。堆中容纳k个元素。//堆顶元素最小。新来元素和堆顶比较。若小,舍弃。若大,替换堆顶,重新做堆。//时间复杂度:O(N*log(k))每次更新堆log(k),更新n次 #include#includeusing namespace std; #define MIN -1111class minHeap{ int n; int* a;原创 2011-10-23 17:07:23 · 687 阅读 · 0 评论 -
变位词程序
如果两个单词,他们的字母组成一样而字母位置有区别,那么就称这两个单词为变位词。如 pans 和 span , tops 和 stop。所有的变位词,对他们按字母顺序排序,得到相同的字符串(这个字符串成为该单词的签名)。把这个字符串作为这个单词的排序标准,排序完之后,相同签名的单词是变位词,将他们输出。sign.exe 读入每个单词,为每个单词生成签名#include #include原创 2013-08-30 16:42:52 · 1034 阅读 · 0 评论