xiyoulaoyuanjia / blog

记录与总结 and else?
5 stars 2 forks source link

alibaba_for2013 #7

Closed xiyoulaoyuanjia closed 8 years ago

xiyoulaoyuanjia commented 11 years ago

orignal

xiyoulaoyuanjia commented 11 years ago

1.下列说法错误的是: A.SATA硬盘的速度大约为500Mbps/s B.读取18XDVD光盘数据的速度为1Gbps C.千兆以太网的数据读取速度为1Gpbs D.读取DDR3内存数据的速度为100Gbps

DDR3的内存数据读取速度为 12.8GBps(注意B与b) 千兆以太网的单位. 选项B错的很直接呀..

3.设在内存中有P1,P2,P3三道程序,并按照P1,P2,P3的优先级次序运行,其中内部计算和IO操作时间由下表给出(CPU计算和IO资源都只能同时由一个程序占用):

P1:计算60ms---》IO 80ms---》计算20ms

P2:计算120ms---》IO 40ms---》计算40ms

P3:计算40ms---》IO 80ms---》计算40ms

完成三道程序比单道运行节省的时间是()
A.80ms
B.120ms
C.160ms
D.200ms

答案应该为c吧..

  4.两个等价线程并发的执行下列程序,a为全局变量,初始为0, 假设printf、++、--操作都是原子性的,则输出不可能是()

    void foo() {         if(a <= 0) {             a++;         }         else{             a--;         }         printf("%d", a);     }

    A.01     B.10     C.12     D.22

这个题目选A 原因是 a为0 说明都两个都跑完了...A选项后面不肯能为1

6.在c++程序中,如果一个整型变量频繁使用,最好将他定义为()

A.auto
B.extern
C.static
D.register

答案比较简单 选D 下面可以看看常用的一些关键字的使用

register

    这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 

auto

    所有的变量默认都是 auto类型的.. 意思是把在函数中定义的看成局部变量.把不在结构体.函数等 中定义的看成全局变量

extern

    这个变量用来表示一个变量是在另一个文件中声明的.

static

    可以分为修饰函数 与变量.     修饰函数一般用来表示函数被调用的次数.     修饰变量 需要分清楚其与 堆栈变量 还有 全局变量的区别

  •  变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与栈变量和堆变量的区别。
  •  当用static修饰时告知编译器自己仅在一定的范围内可见.这是其与全局变量的区别.例如在一个文件 中用static修饰的变量在另一个文件中就无法使用.

const

  被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。它可以修饰函数的参数、返回值,甚至函数的定义体。

volatile

告知编译器该变量可能在外部被修改.所以编译器每次使用的时候都需要重新读取该值..而不能使用寄存器的缓存. 当然这样子可以避免一个值被多个程序应用的时候发生的错误..典型的应用就是多进程与多线程..当然这样子带来的也就是效率的问题.

7.长为n的字符串中匹配长度为m的子串的复杂度为()

A.O(N)
B.O(M+N)
C.O(N+logM)
D.O(M+logN)

这个问题是经典的字符串匹配问题.. 说道这个不得不说两个常见的字符串匹配的算法.. BF算法 与kmp算法..

BF算法的时间复杂度O(strlen(S) * strlen(T)),空间复杂度O(1)。

KMP算法的时间复杂度O(strlen(S) + strlen(T)),空间复杂度O(strlen(T))。    

关于kmp算法可以参看这里

所以本题选 B

8.判断一包含n个整数a[]中是否存在i、j、k满足a[i] + a[j] = a[k]的时间复杂度最小值是()

 A.O(n^2)        B. O(n^2*logn)       C. O(n^3)    D. O(nlogn)   

这道题目 答案应该为A吧..

寻找任意的两个数之和 为o(n^2) 查找o(1) hash表

9.下列序排算法中最坏情况下的时间复杂度不是n(n-1)/2的是

A.快速排序     B.冒泡排序   C.直接插入排序   D.堆排序

本题选D

快排是找一个基准..然后把序列分为左右两个部分(左边的小于基准 右边的大于基准) 然后递归进行下去..

堆排序最好、最坏、平均时间代价都是O(nlogn)

xiyoulaoyuanjia commented 11 years ago

A和B晚上无聊就开始数星星。每次只能数K个(20<=k<=30)A和B轮流数。最后谁把星星数完谁就获胜,那么当星星数量为多少时候A必胜?

这个问题十分的经典..如果之前没有研究想要做出来还是有一定的难度的....

k个石头(m<=k<=n) 先考虑一种特殊的情况 石头的数量为 n+1 个 则 A必赢 .. r(n+1)+s (s<n+1)为石头的总数.. A先拿s个石头,B拿k个 A在拿 n+1-k 个 则剩下(n+1)(r-1) 个 这样子直到 n+1 时.. 这是一个经典的博弈论的问题..

xiyoulaoyuanjia commented 11 years ago

有个苦逼的上班族,他每天忘记定闹钟的概率为0.2,上班堵车的概率为0.5,如果他既没定闹钟上班又堵车那他迟到的概率为1.0,如果他定了闹钟但是上班堵车那他迟到的概率为0.8,如果他没定闹钟但是上班不堵车他迟到的概率为0.9,如果他既定了闹钟上班又不堵车那他迟到的概率为0.0,那么求出他在60天里上班迟到的期望。

呵呵 数学期望...

4.战报交流:战场上不同的位置有N个战士(n>4),每个战士知道当前的一些战况,现在需要这n个战士通过通话交流,互相传达自己知道的战况信息,每次通话,可以让通话的双方知道对方的所有情报,设计算法,使用最少的通话次数,是的战场上的n个士兵知道所有的战况信息,不需要写程序代码,得出最少的通话次数。

这个考的是数学归纳法吗? 消息汇总之后传递? 这个更详细还有简历模型呢

5.有N个人,其中一个明星和n-1个群众,群众都认识明星,明星不认识任何群众,群众和群众之间的认识关系不知道,现在如果你是机器人R2T2,你每次问一个人是否认识另外一个人的代价为O(1),试设计一种算法找出明星,并给出时间复杂度(没有复杂度不得分)。

这个原文中给的答案

遍历 1~n 这n个人;
首先取出 1号 和 2号,
如果 1 认识 2, 那么把 1 去掉;
如果1不认识2,就可以把2去掉了。
每次比较都去掉一个,如此循环;n-1次之后只有一个人了
时间复杂度: O(n-1)

还看到了一个建立了模型的解法

笔试的时候应该来说能做成上面的样子就相当不错了吧.

xiyoulaoyuanjia commented 11 years ago

有一个淘宝商户,在某城市有n个仓库,每个仓库的储货量不同,现在要通过货物运输,将每次仓库的储货量变成一致的,n个仓库之间的运输线路围城一个圈,即1->2->3->4->...->n->1->...,货物只能通过连接的仓库运输,设计最小的运送成本(运货量*路程)达到淘宝商户的要求,并写出代码。

详细分析

这确实是一道数学题目..