免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 62439 | 回复: 99
打印 上一主题 下一主题

今天是参加最后一场面试了. 题目很搞啊. 看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-25 23:10 |只看该作者 |倒序浏览
面试主要看看题目而已.

从1----1百万个数字里面随机抽取五十万个不同的数字.



记住喔. 是高效的方法. 今天的笔试题目. 大约要用10分钟完成. 游戏python职位. 我做偏了今天. 因为没听清楚是五十万个不同的.
不过最后考官告诉我怎么做. 但他自己又说是个低效率的方法. 哎...我真是汗....还说这是个必做题目. 而且他的做法是错误的. 我都不说了.

他说,如:

例如简单点说5个数吧

创建一个A链表.有1,2,3,4,5
一个数组B.

int number=random(A表的长度)
把number放到B里保存.
A的表长度减少1.
A表对应的数据删除.

考官说这样可以避免随机到重复的数. 我心想. 不是吧. 要是1,2,3,4,5长度是5. 第一次抽2,长度减1只有4了, 第二次抽2. 还不是一个样重复.
我佩服他了.



还有个题目:如:非常长的数字: 32478914098230948234 +101 是怎么写这加法涵数
                            32478914098230948234 *101呢?

我说加法就那高位不用理会. 低位和低位加. 看有进位就进位. 用寄存器保存这些数据. 如果不够就在内存里做为临时保存点.
乘法就移位,他摇头啊. 我问他怎么做. 他不说.


公司在动漫产业基地. 10楼.名字就不说了

论坛徽章:
0
2 [报告]
发表于 2008-03-25 23:16 |只看该作者
说说我的愚见。
第一个题我觉得应该用位运算来做,在编程珠玑第一章有讲解。
第二个题就是用字符串来保存很长的数来进行加和乘,在ACM的题中也有。

论坛徽章:
0
3 [报告]
发表于 2008-03-25 23:18 |只看该作者
原帖由 scutan 于 2008-3-25 23:16 发表
说说我的愚见。
第一个题我觉得应该用位运算来做,在编程珠玑第一章有讲解。
第二个题就是用字符串来保存很长的数来进行加和乘,在ACM的题中也有。



小公司出这些题目啊. 哎....佩服啊

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2008-03-26 00:07 |只看该作者
第一道,o(m*(2n-m))时间级别的?(n是1000000,m是500000)(纯属个人猜测,实在想不出高效的算法)
第二道,如同小学生做算术那样,数字电路也是这么实现的,只是多了少许优化而已。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2008-03-26 00:10 |只看该作者
另外考官的意思是
1->2->3->4->5
抽取1-5中随机数2,
则链表为1->3->4->5
再抽取1-4中随机数2,
则是取3了。

论坛徽章:
0
6 [报告]
发表于 2008-03-26 00:15 |只看该作者
原帖由 cjaizss 于 2008-3-26 00:10 发表
另外考官的意思是
1->2->3->4->5
抽取1-5中随机数2,
则链表为1->3->4->5
再抽取1-4中随机数2,
则是取3了。




喔..原来这个意思. 他那时候用python写的. 还有他说那高效方法是必做题目.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2008-03-26 00:19 |只看该作者
原帖由 scutan 于 2008-3-25 23:16 发表
说说我的愚见。
第一个题我觉得应该用位运算来做,在编程珠玑第一章有讲解。
第二个题就是用字符串来保存很长的数来进行加和乘,在ACM的题中也有。

用位来做,类似于编译器里常用的“循环展开”,利用硬件的性质达到提速的目的,但是不降低算法复杂度级别(时间、空间)

论坛徽章:
0
8 [报告]
发表于 2008-03-26 00:45 |只看该作者
自己想的一种方法. 不知道行不行得通


  1. 要是碰巧
  2. 第1次=1
  3. 第2次=2
  4. 第3次=3
  5. 现在就随机3次了.
  6. 第1次和第3次加就=4.
  7. 第2次和第3次加就=5.    结论: 抽3次随机数.可以得5次结果. 所以.

  8. 1-10抽5个是常数级.
  9. 1-100抽50个是循环10次.
  10. 1-1百万抽五十万 循环10万次


  11. int tmp[100万];//用来保存临时的数据
  12. int b=1;
  13. int n1;
  14. int n2;
  15. int n3;
  16. int n4;
  17. int n5;
  18. int 搞不定=0;
  19. int result[50万];
  20. int count=0;



  21.    tmp清0;

  22. for(;b<10万次;b++)
  23. {

  24.    one:
  25.        n1=random(100万);
  26.        if(tmp[n1]是空)
  27.        tmp[n1]=n1;  //随机的数字放到临时对应的下标
  28.        else
  29.          goto one;      
  30.    two:
  31.        n2=random(100万);
  32.        if(tmp[n2]是空)
  33.        tmp[n2]=n2;               
  34.        else
  35.          goto two;

  36.    three:
  37.        n3=random(100万);
  38.        if(tmp[n3]是空)
  39.        tmp[n3]=n3;               
  40.        else
  41.          goto three;
  42.               
  43.      if(tmp[one+three]是空)
  44.        n4=tmp[one+three]=one+three;
  45.      else if(tmp[one+tow]是空)
  46.        n4=tmp[one+tow]=one+tow;
  47.      else
  48.          搞不定=1;

  49.      if(tmp[tow+three]是空)
  50.        n5=tmp[tow+three]=tow+three;
  51.      else
  52.          搞不定=1;  
  53.                
  54.       if(搞不定==1)
  55.       {
  56.            tmp[n1]=tmp[n2]=tmp[n3]=tmp[one+three]=tmp[one+tow]=tmp[tow+three]=0;
  57.            b--;//当本次循环不成功
  58.            continue;
  59.       }
  60.       else  //满足了,代表一次循环可以有5个不同的随机数
  61.       {
  62.            result[count]=n1;
  63.            count++;
  64.            result[count]=n2;
  65.            count++;
  66.            result[count]=n3;
  67.            count++;
  68.            result[count]=n4;       
  69.            count++;
  70.            result[count]=n5;
  71.            count++;

  72.       }  
  73.         
  74.               
  75.                  
  76. }


复制代码

[ 本帖最后由 linuxcici 于 2008-3-26 01:00 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-03-26 00:46 |只看该作者
那考官给我十分钟左右叫我想优化算法啊. 到最后他两写了个自己也说是个效率低的方法. 真是无奈. 然后直接out了我

论坛徽章:
0
10 [报告]
发表于 2008-03-26 00:54 |只看该作者
哈. 那考官说我. 2个随机数加起来不是随机数. 就好象说两个堆沙子加起来不是堆沙子...哎...真给人BS了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP