程序员面试宝典笔记1


《程序员面试宝典》P13
1.问题:T(n)=25T(n/5)+n^2的时间复杂度
参考网址: http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html
计算公式:

        f(n) = af(n/b) + d(n)

        1.当d(n)为常数时:

  2.当d(n) = cn 时:

   

  3.当d(n)为其他情况时可用递归树进行分析。

根据《算法导论》P53主定理知:

T(n) = aT(n/b) + f(n)

  其中,a≥1和b≥1,均为常数,f(n)是一个确定的正函数。在f(n)的三类情况下,我们有T(n)的渐近估计式:

    1.若对于某常数ε>0,有f(n) = O(nlogb a-ε ),则T(n) = O(nlogb a )
    
    2.若f(n) = O(nlogb a ),则T(n) = O(nlogb a *logn)
    
    3.若f(n) = O(nlogb a+ε ),且对于某常数c>1和所有充分大的正整数n,有af(n/b)≤cf(n),则T(n)=O(f(n))。
    
    对于此题,则T(n)=O(n^2logn)


2.问题:如何减少换页错误?

    1,进程倾向于占用CPU

    2,访问局部性(localiltyof reference)满足进程要求

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

    4,使用基于最短剩余时间(shortestremaining time)的调度机制

    5,减少页大小

答案:4

解析:PageFault 是在进程尝试执行代码指导,或者引用进程所映射物理内存中并不存在的数据页时,操作系统记录的事件。换句话说,进程需要的内存页实际上可能还处于物理内存中,但是由于它无法再分配到进程中,所以当进程将此页读取回到它的内存页时,就发生了PageFault

说白了就是想在内存里找东西,却发现不存在(不得不重新读取...),按道理这不应该算错误这么严重吧(简单点,不命中而已)。

采用最短剩余时间调度机制:

SRT算法(SPN算法的抢占式版本):总是选择剩余时间最短的进程运行

为什么会减少换页错误呢?因为时间短的结束运行快,不需要频繁切换进程(导致刷新内存),所以换页错误发生的概率就减少了......

3.问题:下列代码的输出





int _tmain(int argc, _TCHAR* argv[])
{
 int arr[] = {6,7,8,9,10};
 int *ptr = arr;
 *(ptr++) += 123;    //注意这里先解引用,在指针递增
 printf("%d\n", *(ptr-1));//输出129
 printf("%d\n", *ptr);//输出7
 printf("%d\n", *(++ptr));//输出8
 printf("%d,%d\n",*ptr,*(++ptr));//输出9,9
 //printf计算参数式时从右到左压栈的,故先指针递增
 return 0;
}


你可能感兴趣的:(程序员面试宝典笔记1)