搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ UC笔试题
标题:
UC笔试题
只看楼主
lin471306489
等 级:
业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
结帖率:
100%
楼主
已结贴
√
问题点数:20 回复次数:6
UC笔试题
1,有一个文件中存储了40个亿个uc账号ID,每个uc账号ID长度为四个字节整数,内存为1GB,写出一个算法:求出这个文件里的账号ID整数里不包含的一个整数,并描述算法设计主要思路。
2,在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行,同一列或同一斜线上,问有多少种摆法。若使用递归算法,最高可得2/3分,非递归算法最高可得满分。
我是来学东西的
搜索更多相关主题的帖子:
内存
国际象棋
账号
2011-10-19 13:01
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
2
楼
得分:7
第1题主要是大数处理吧,16GB的数据,用1GB怎么算。其实关键是这个数据文件是怎么储存出来的,如果它写入时已被排序,则不存在问题;如果没有排序,则变成排序问题。关键是排序算法。在数据库系统中,排序是不需你自己处理的事情。
授人以渔,不授人以鱼。
2011-10-19 15:17
Devil_W
等 级:
青峰侠
威 望:
9
帖 子:1160
专家分:1797
注 册:2009-9-14
第
3
楼
得分:7
我有个算法,
做bit hash.
内存里面维护一个hash表,4字节表示的范围是2^32个数据, 能cover 40亿个ID各不一样。
从文件里面读数据,并建立hash表.
然后从i iterator to 2^32找第一个在hash表里没有 key-value对的值。
2011-10-19 15:44
马甲1号
等 级:
职业侠客
帖 子:68
专家分:312
注 册:2011-4-4
第
4
楼
得分:7
全部抑或
?
?
?
?
?
?
?
2011-10-19 16:35
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
5
楼
得分:0
也有另外办法的,像电话号码一样,分区投放UC号。在相对小的范围内检索数据比总在全集中检索容易一些,当某一区段全满之后,这个区域就可以从全集中排除出去了。又或者,一开始就用排除法,从可用数据集中往外取数,留下的都是可用的,这个在申请号码时反应最快。
授人以渔,不授人以鱼。
2011-10-19 16:42
Devil_W
等 级:
青峰侠
威 望:
9
帖 子:1160
专家分:1797
注 册:2009-9-14
第
6
楼
得分:0
以下是引用
TonyDeng
在2011-10-19 16:42:39的发言:
也有另外办法的,像电话号码一样,分区投放UC号。在相对小的范围内检索数据比总在全集中检索容易一些,当某一区段全满之后,这个区域就可以从全集中排除出去了。又或者,一开始就用排除法,从可用数据集中往外取数,留下的都是可用的,这个在申请号码时反应最快。
根本不可行,你根本不可能把40亿个数一次读入内存。 40亿 约为2^28.5, 40亿个int 约为2^30.5byte.
你也不能创建一个全集,因为1G内存只有2^30byte.
全集是2^32 byte
2011-10-19 17:43
lin471306489
等 级:
业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
第
7
楼
得分:0
大家有没有更加好的见解啊
2011-10-19 23:28
7
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-352911-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.271635 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved