社区
数据结构与算法
帖子详情
公司面试题100分求解!!
mostneed
2002-09-17 12:37:39
随机产生10万个数,要求维一,然后写到数据库中。用什么算法?
我的想法是先随机产生数,然后用快速查找算法在数据库中查找直到没有相同的,然后写入数据库中。
不知道行不行,希望大家给个最快的算法。
谢谢!!
...全文
91
16
打赏
收藏
公司面试题100分求解!!
随机产生10万个数,要求维一,然后写到数据库中。用什么算法? 我的想法是先随机产生数,然后用快速查找算法在数据库中查找直到没有相同的,然后写入数据库中。 不知道行不行,希望大家给个最快的算法。 谢谢!!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
孩皮妞野
2002-09-19
打赏
举报
回复
其实主要的时间就是花在写入数据库了。
除非数据库系统提供了特别的编程接口,你只好用SQL, 一次插入一个了。
从本质上讲你的问题就是从一个不重复的集合里抽取指定模的一个子集,saint的方法算是标准解法吧。
leojay
2002-09-19
打赏
举报
回复
A(1)=rnd*10 ;
A(n) = A(n-1) + rnd*10 + 1 ;
这样就一定不会重了。
最多再保存起来,打乱一下就好了。
saint001
2002-09-18
打赏
举报
回复
上概率是设计的从数组中顺序随机抽取若干个元素的算法
数组为A[1..N],N很大,抽取得的生成成的数组为X[M]
从1..N 中随机抽取数字i,得到随机数A[i],存入X[1],同时置换A[i]和A[N];
从1..N-1中随机抽取数字i,得到随机数A[i],存入X[2],同时置换A[i]和A[N-1];
从1..N-2中随机抽取数字i,得到随机数A[i],存入X[3],同时置换A[i]和A[N-2];
以此类推,直到生成M各随机数为止
非常容易实现,时间复杂度为O(M)
不过对于本题,空间复杂度为O(N),稍多些
令M=10E5,N=10E6,A[i]=i
school
2002-09-18
打赏
举报
回复
边产生随机数边排序插入,相同则不插入。
孩皮妞野
2002-09-18
打赏
举报
回复
你往下看啊! 我提供的另一个思路呢?
顺便说一下,即使是这两个也是不同的。你的i肯定是顺序,而我的i是乱序的。比如,如果数据表是这样的结构:
ID RAND_NUM
好了,这是我对第二个思路的实现:
#include <bitset>
#include <vector>
#include <algorithm>
void genenerate(std::vector<unsigned>& vu)
{
using namespace std;
bitset<10000000> bs;
while(bs.count()<100000)
bs[random(10000000)] = true;
vu.resize(100000);
for(unsigned i=0, j=0; i<bs.size() && j<100000 ; i++)
if(bs[i])
vu[j++]=i;
random_shuffle(vu.begin(),vu.end());
}
mostneed
2002-09-18
打赏
举报
回复
谢谢大家!
然后写入数据库呢?不回依次写如吧。有什么快的办法?
smokyrain
2002-09-17
打赏
举报
回复
如果是从实用角度看,根本不用找算法,如果对数字没有格式要求,直接设置此字段类型identity并且设为键值即可。
如果说算法的话,建议实用Hash散列将每次生成的数字扩散开,或是使用分段生成的方法生成。查找数据库的方法实在不可取,代价太大。
zhf0021
2002-09-17
打赏
举报
回复
up
bjay
2002-09-17
打赏
举报
回复
to: ALNG(?)
是不是我看错了,还是的确不明白?
10万个不同的数,你让它在10万个数中“随机”生成,和
for (i =0; i<100000; i++)
Insert into ... //这是一句SQL语句,
有什么不同?
djniulihao
2002-09-17
打赏
举报
回复
我同意ALNG(?)的算法
孩皮妞野
2002-09-17
打赏
举报
回复
复杂度O(N)。
如果要求数据有随机性,即排序后不一定是连续的数,可以用set, 或bitset, 先在bit_set装入100000个数[保证不同],然后放入一个vector中random_shuffle即可。
孩皮妞野
2002-09-17
打赏
举报
回复
#include <vector>
#include <algorithm>
void generate(std::vector<int>& container)
{
container.resize(100000);
for(unsigned i=0; i<100000; i++)
container[i]=i;
std::random_shuffle(container.begin(),container.end());
}
搞定
DaNiao
2002-09-17
打赏
举报
回复
那就换一家公司吧
mostneed
2002-09-17
打赏
举报
回复
可是别人不允许用数据库的功能,一定要用算法. :-<
newly_ignorant
2002-09-17
打赏
举报
回复
查找显然太慢了,利用数据库自身的功能
create 临时表(有唯一性约束的)
i=0
while i<1000
取一个随即数
插入到临时表
if 成功 then i=i+1
wend
临时表数据导入到数据库中
删除临时表
mostneed
2002-09-17
打赏
举报
回复
谢谢!! 还有什么算法吗?
100
道SQL
面试题
大家好,我是李岳。最近
公司
招一名报表工程师,要求不高,会SQL和报表设计就行,来面试的好几位同学连基本的SQL笔试题都不能答完。即使是让写一下思路都不能准确的写出来,其实我们的
面试题
很简单:两个条件判断题和一个给学生成绩不间断的排序。如今工作不好找,自身的技术能力,特别是SQL这种比较通用的编程能力,还是要扎实一点。作为一名SQL领域的博主,去年初的时候,花费3个月的时间整理并发布了《SQL145...
整理了
100
道SQL
面试题
,欢迎订阅
大家好,我是李岳。最近
公司
招一名报表工程师,要求不高,会SQL和报表设计就行,来面试的好几位同学连基本的SQL笔试题都不能答完。即使是让写一下思路都不能准确的写出来,其实我们的
面试题
很简单:两个条件判断题和一个给学生成绩不间断的排序。如今工作不好找,自身的技术能力,特别是SQL这种比较通用的编程能力,还是要扎实一点。作为一名SQL领域的博主,去年初的时候,花费3个月的时间整理并发布了《SQL145...
各大
公司
面试题
总结
面试的几个回答技巧 http://blog.sina.com.cn/s/blog_ad991b1601018mjc.html 2013-5-9号补充:今天最新的腾讯
面试题
,应该说是所有面试中最难的,我个人感觉。而且是个女面试官,好嗨皮啊,哈哈。 腾讯
面试题
1.int a = 1; int result = a+++3 2.int a = 2; int result = (a
微软
公司
面试题
【1】
这道题挺简单的,但网上说,这是微软的
面试题
,初学编程的可以看看。 题目: 求质数的和。如:F(4)= 2+3+5+7 = 17,输入F(x)。 运行结果: 自己敲的代码: #include usi
谷歌
面试题
-
100
层楼两个棋子的问题
谷歌
公司
有道
面试题
:有一个
100
层高的大厦,从这个大厦的某一层扔下棋子恰好就会碎(称这一层为临界层)。请你用手中的两个玻璃围棋子,找出一个最优的策略来得知那个临界层。 解法:假设在最坏情况下投掷的最少次数为x,即无论临界层为几,投掷次数都小于等于x。那么我第一次投掷的楼层为x,此时有两种情况: (1)围棋子碎了:用第二个围棋子从1到x-1投掷,最多一共投掷x次可以确定临界层。 (2)围棋子没有
数据结构与算法
33,026
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章