标题:UC笔试题
只看楼主
lin471306489
Rank: 4
等 级:业余侠客
帖 子: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
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:7 
第1题主要是大数处理吧,16GB的数据,用1GB怎么算。其实关键是这个数据文件是怎么储存出来的,如果它写入时已被排序,则不存在问题;如果没有排序,则变成排序问题。关键是排序算法。在数据库系统中,排序是不需你自己处理的事情。

授人以渔,不授人以鱼。
2011-10-19 15:17
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分: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号
Rank: 5Rank: 5
等 级:职业侠客
帖 子:68
专家分:312
注 册:2011-4-4
得分:7 
全部抑或

???????
2011-10-19 16:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
也有另外办法的,像电话号码一样,分区投放UC号。在相对小的范围内检索数据比总在全集中检索容易一些,当某一区段全满之后,这个区域就可以从全集中排除出去了。又或者,一开始就用排除法,从可用数据集中往外取数,留下的都是可用的,这个在申请号码时反应最快。

授人以渔,不授人以鱼。
2011-10-19 16:42
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分: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
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
得分:0 
大家有没有更加好的见解啊
2011-10-19 23:28



参与讨论请移步原网站贴子: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