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算法的抢占式版本):总是选择剩余时间最短的进程运行
为什么会减少换页错误呢?因为时间短的结束运行快,不需要频繁切换进程(导致刷新内存),所以换页错误发生的概率就减少了......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;
}