社区
数据结构与算法
帖子详情
公司面试题100分求解!!
mostneed
2002-09-17 12:37:39
随机产生10万个数,要求维一,然后写到数据库中。用什么算法?
我的想法是先随机产生数,然后用快速查找算法在数据库中查找直到没有相同的,然后写入数据库中。
不知道行不行,希望大家给个最快的算法。
谢谢!!
...全文
42
16
打赏
收藏
公司面试题100分求解!!
随机产生10万个数,要求维一,然后写到数据库中。用什么算法? 我的想法是先随机产生数,然后用快速查找算法在数据库中查找直到没有相同的,然后写入数据库中。 不知道行不行,希望大家给个最快的算法。 谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
谢谢!! 还有什么算法吗?
各大软件
公司
面试--算法笔试题
以下是一些可能出现在各大软件
公司
面试中的算法笔试题相关的知识点: 1. **排序算法**:包括快速排序、归并排序、冒泡排序、插入排序、选择排序、堆排序等。理解它们的基本原理,时间复杂度和空间复杂度,以及在...
[第二部
分
]精选微软等
公司
结构+算法面试
100
题[41-60题]
根据提供的信息,我们可以总结出这份文档包含了从第41题到第60题的数据结构与算法
面试题
目。这些题目是从微软等知名
公司
的
面试题
目中精选出来的,并由原作者进行了整理和发布。以下是对这些题目的详细解读: ### 第...
leetcode2-code_interview:LeetCodeLintCode题解,剑指offer题目,互联网
公司
面试,BAT外企等
面试题
是面试中遇到的有意思的题目总结,比如说BAT,intel,NVIDIA等
公司
面试的题目记录 包含了对传统排序算法的改进和应用总结 Leetcode Python / C++ 11 Solutions LeetCode Questions and Some of LintCode Questions. ...
datax
面试题
_阿里巴巴
面试题
+参考答案!速来
这一次
面试题
,不仅是知识的收获,还将间接地与技术大牛们做了直观的沟通,了解他们的出题思路与考察要点,并加以消化吸收。这对自己技术能力本身就是一种极大的提升。走上编程之路,不断丰富自己方能与世接轨,努力...
Java中高级
面试题
总结(全面),程序员必备技能:时间复杂度与空间复杂度的计算
面试题
多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过
面试题
去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!结自己的不足,以...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章