算法
文章平均质量分 79
liyuxia713
我要认真地生活~
展开
-
位运算及应用
位运算:&与 |或 ~非 ^异或>> 右移,正数高位补0,负数由计算机决定>>>右移,正数高位补0,负数亦补0循环左移k次 (x> (32-k)),循环右移k次 (x>>k) | (x 清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或应用:字符改变大小写:原理:小写字符比对应的大写字符在数值上大32, 而32 = 0010 0000=0x20 inline char lower(char c) { return (char)(c&~'0x20'); } inline char upper(c原创 2010-11-03 20:21:00 · 1410 阅读 · 0 评论 -
随机选取算法 (有权重的记录中选取)
三类随机问题 1. 已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管。 实现思路:按行遍历所有记录,约隔n/m条取一个数据即可 2. 在1类情况下,还要求选取出来的m条记录是随机排序的 实现思路: 给n条记录,分别增加一列标记,值为随机选取的1至n之间的不重复数据, 实现参考博文 将文件内容按行随机排列 3. 区别于1,原创 2012-05-25 17:16:03 · 10998 阅读 · 1 评论 -
《编程珠玑》第二章-循环移位
问题:将一个n维向量向左循环移位m位。如向量0,1,2,3,4,5,6,7,8,9向左循环移位3位,结果是3,4,5,6,7,8,9,0,1,2。 方法1:每次循环移位1位,执行m次。辅助空间1,时间复杂度O(n*m) 方法2:用m维的辅助空间暂存前m个元素,对剩下的n-m个元素进行移位,最后将m个元素移动向量末尾。辅助空间m,时间复杂度O(n)。 //方法1 int temp; for(i原创 2010-11-08 11:20:00 · 1182 阅读 · 0 评论 -
《编程珠玑》第一章-位图排序
位图用每个位的值(0 or 1)来表明一个数是否存在,从而减少了内存使用量,也提高了效率。 问题: 输入:所输入的是一个文件,至多包含n个正整数,每个正整数都小于n,n=10,000,000.数字不重复,且不相互关联 输出:经过排序的整数列表 约束:至多1M的可用内存,可用磁盘空间充足。运行时间最多几分钟,最好是10S 特点: 1. 数的范围小; 2. 没有重复数字;原创 2010-11-03 22:11:00 · 1110 阅读 · 0 评论 -
将文件内容按行随机排列
在实际工作上有种需求, 就是需要从给定的数据里,随机抽取一部分。 有一种简单的方法是根据总的数据条数和要抽取的数据条数, 通过简单方法,隔几行取一个,这样也能达到随机抽取一部分的目的。 但这样,源数据是顺序的,则抽取的数据也是顺序的,不满足一些情境。 这里实现的功能是: 将全部数据,按行重新随机排列, 这样从结果头部选几行,就是随机抽取的几行了,比较方便。 实现的思路: 对于N行的数据,原创 2012-04-10 15:27:10 · 5421 阅读 · 0 评论