面试题积累(二)

题目5:以下哪项不是链表优于数组的特点?

1.方便删除

2.方便插入

3.长度可变

4.存储空间小

分析:

       选4,非常显然,链表添加了存储的空间。链表由一系列结点(链表中每个元素称为结点)组成,结点能够在执行时动态生成。每个结点包含两部分:一个是存储数据元素的数据域,还有一个是存储下一个结点地址的地址域。


题目6:T(n) = 25T(n/5)+n^2的时间复杂度是什么?

分析:

        对于T(n) = a*T(n/b) + c*n^k;T(1) = c这种递归关系。有例如以下结论:

       if (a > b^k)  T(n) = O(n^(logb(a)))

       if (a = b^k)  T(n) = O(n^(k*logn))

       if (a > b^k)  T(n) = O(n^k)

       题中 a = 25 b = 5 c = 1 k = 2,a = b^k,T(n) = O(n^2logn)

       推导例如以下:(记结论比較靠谱)

      

T(n) = 25T(n/5)+n^2 
= 25(25T(n/25)+n^2/25)+n^2
= 625T(n/25)+n^2+n^2 = 625T(n/25) + 2n^2
= 25^2 * T( n/ ( 5^2 ) ) + 2 * n*n
= 625(25T(n/125)+n^2/625) + 2n^2
= 625*25*T(n/125) + 3n^2
= 25^3 * T( n/ ( 5^3 ) ) + 3 * n*n
= ....
= 25 ^ x * T( n / 5^x ) + x * n^2

T(n) = 25T(n/5)+n^2
T(0) = 25T(0) + n^2 ==> T(0) = 0
T(1) = 25T(0)+n^2 ==> T(1) = 1

x = lg 5 n

  25 ^ x * T( n / 5^x ) + x * n^2
= n^2 * 1 + lg 5 n * n^2
= n^2*(lgn)

题目7:n个顶点、m条边的全连通图,至少去掉几条边才干构成一棵树?

分析:

            n个顶点的树一定有n-1条边。因此有m条边的全连通图要构成树仅仅须要去掉 m-(n-1) = m-n+1条边就能够了


*题目8:正則表達式(01 | 10 | 1001 | 0110)*与下列哪个表达式一样?

            1.(0 |1)*

            2.(01|01)*

            3.(01|10)*

            4.(11|01)*

            5.(01|1)*

 分析:

            3. 1001和0110都能够用 (01|10)*生成。所以,题目等价于(01|10)*


题目9: 怎样降低换页错误?

             1.进程倾向于占用CPU

             2.訪问局部性(locality of reference)满足进程要求

             3.进程倾向于占用I/O

             4.使用基于最短剩余时间(shortest remaining time)的调度机制

             5.降低页大小

分析:

       首先排除1和3,由于訪问快慢和接口对于“错误”是没有影响的,并且题目中的要求是降低错误而不是消除错误,因此这个错误肯定存在。

然后排除5,页面降低未必错误会降低。

对于2局部性并不能减低发生错误的概率。下面是换页错误的定义:换页错误,即Page fault。依照主流的翻译,应该叫做缺页异常。众所周知。每一个进程都有一段自己的独立的虚拟内存空间。可是这些虚拟内存并非全然映射到物理内存上的。当一个程序试图訪问没有映射到物理内存的地方时。就会出现缺页异常,这时操作系统要做的是要将这段虚拟内存映射到物理内存上。使其真正“可用”。

换页错误并非如名字所看到的的是一个真正的错误,这是现代操作系统中很常见的一种现象。

採用最短剩余时间调度机制:
SRT算法(SPN算法的抢占式版本号):总是选择剩余时间最短的进程执行
为什么会降低换页错误呢?由于时间短的结束执行快,不须要频繁切换进程(导致刷新内存)。所以换页发生错误的概率就降低了

因此答案是4.






posted @ 2017-07-28 12:20  claireyuancy  阅读(153)  评论(0编辑  收藏  举报