ImageVerifierCode 换一换
格式:DOC , 页数:9 ,大小:66KB ,
资源ID:3120651      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3120651.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(给40亿个不重复的unsigned int的整数.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

给40亿个不重复的unsigned int的整数.doc

1、1. 给 40 亿个不重复的 unsigned int 的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那 40 亿个数当中A. 申请 512M 的内存 一个 bit 位代表一个 unsigned int 值 读入 40 亿个数,设置相应的 bit 位 读入要查询的数,查看相应 bit 位是否为 1,为 1 表示存在,为 0 表示不存在B. 1.unsigned int 32 位有 40 亿个的,这是事实 2.确实是用位图做的,512M 内存-C. 使用位图法判断整形数组是否存在重复 判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循

2、环法就不可取了。 位图法比较适合于这种情况,它的做法是按照集合中最大元素 max 创建一个长度为 max+1 的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上 1,如遇到 5 就给新数组的第六个元素置 1,这样下次再遇到 5 想置位时发现新数组的第六个元素已经是 1 了,这说明这次的数据肯定和以前的数据存在着重复。这种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为 2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。-D. 我的解法,看看还能不能优化了。 #include #include #define BITPERINT

3、 32 /每个 int 型字节数 #define BITPERCHAR 8 /每个 char 型字节数 #define N 4000000000 /40 亿个数 #define SIZE N/BITPERINT #define MASK 0x80 /1000000 掩码 /犹豫 40 亿个数会超出栈空间,所以在堆上分配动态数组。 typedef struct BitList unsigned char *base; int intLength; BitList,*P_BitList; /初始化线性顺序表,总位数为 intSize*BITPERCHAR int InitBitList(BitLi

4、st if(BL.base = NULL) printf(“n Out of memomry !n“); exit(0); /内存初始化为 0 for(int i = 0;i intBitIndex); return 1; /清除标志位,将堆中内存的第 intIndex 位设置为 0(关) int ClrList(BitList int intBitIndex = intIndex%BITPERCHAR; BL.baseintListIndex = BL.baseintListIndex(MASKintBitIndex); return 1; /获取堆中内存的第 intIndex 位的值(0

5、或 1) int GetList(BitList int intBitIndex = intIndex%BITPERCHAR; return ( BL.baseintListIndex int main() BitList bl; InitBitList(bl,SIZE); for(int i =0;i 5 = bx5char map2char=1,2,3,4,5,6,7,8,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y;void getbit( unsigned e, char *s, int offset )int i=17;while(

6、i=0 )s18*offset+i=(ei)-i; int main(int argc, char *argv) srand(GetTickCount();char bit90, S90;for( int i=0; i 60) for (int j = 0; j (55 - j * 5) Data14 = Data12;Data12 = CONST_OTHER_CHARS0;Data15 = Data5;Data5 = CONST_OTHER_CHARS1;Data16 = Data9;Data9 = CONST_OTHER_CHARS2;Data17 = Data7;Data7 = CONS

7、T_OTHER_CHARS3;unsigned long j;WriteFile( hFile,Data,20,if (Counter = 1000000) break;CloseHandle(hFile);QueryPerformanceCounter(LARGE_INTEGER u64_pfmc_freq, timer;QueryPerformanceFrequency(timer.QuadPart = (u64_pfmc_end.QuadPart - u64_pfmc_start.QuadPart) * 1000 / u64_pfmc_freq.QuadPart;char msg100;

8、_ui64toa(timer.QuadPart,msg,10);MessageBox(GetActiveWindow(),msg,“消耗时间(毫秒)“,MB_OK);/穷举0-9a-z0-9a-z给一个链表 m 要计算 36*36*给链表赋值的时间次 a10 对 a0-9 每个数组都随机给这个链表的 n/10 项(也可以项数不等) ,链表被复制的项删除 36*36*链表删除的时间 之类, 对 00000001-999999999 分别按位在该位数的区间内随机取值,这个数必然不重复。 要计算比 10 亿*8*n/10 多一些的次数。 这个算法应该不算慢了吧? 知道算法想硬碰一个数的概率是(10/(36*36)的 10 次幂 安全性可能比完全随机的数要差,但我感觉在平常应该足够了吧?似乎也挺低了。 而且如果顺序保存的话查找也会省不少时间。/

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。