2011年10月5日
摘要: 1 根据实参如何替换inlineinline int min(int i,int j){return i>j?j:i;}int i,j;int mvalue = min(i,j) 替换之后 mvalue = i>j?j:i;int mvalue= min(3,5) 替换之后 mvalue = 3;计算表达式再替换int mvalue=min(foo(),bar()+1)替换之后 int t1,int t2 ;//防止多次调用函数foo(),bar() mvalue=(t1=foo()),(t2=bar()+1,t1>t2?t2:t1;2 当inline中含有局部变量时候inl 阅读全文
posted @ 2011-10-05 14:43 chegvra 阅读(310) 评论(0) 推荐(0) 编辑
  2011年10月2日
摘要: 思路1:循环链表(可以通过LIST模拟,查找到最后一个元素时,返回开始位置),查找第M个元素需要遍历M次,删除操作只需要O(1),总的时间复杂度为O(NM);思路2:采用红黑树查找第M个元素只需要O(LogN)时间,删除也需要O(LogN)In detail, we use an order-statistic tree T , and we call the procedures OS-INSERT,OS-DELETE, OS-RANK, and OS-SELECT:JOSEPHUS(n,m)initialize T to be emptyfor j ← 1 to n do create a 阅读全文
posted @ 2011-10-02 15:48 chegvra 阅读(434) 评论(0) 推荐(1) 编辑
  2011年10月1日
摘要: 思路:记录到第i个元素时的最长递增序列数组的结尾元素,因为递增序列结尾元素数组一定有序,所以计算第i+1个元素时,可以二分查找以其结尾的最长递增序列的位置即可。时间复杂度为O(NlogN)int LIS(int a[],int n){ assert(a!=NULL&&n>0); vector<int> LastElement(n+1); int len=1; LastElement(0)=numeric_limits<int>::min();//哨兵位 LastElement(1)=a[0]; for(int i=1;i<n;i++) { i 阅读全文
posted @ 2011-10-01 20:29 chegvra 阅读(119) 评论(0) 推荐(0) 编辑
  2011年9月12日
摘要: 结合高速缓存与虚拟存储器的数据查找地址转换:发生在高速缓存查找以前,本文讨论高速缓存只能用物理地址查询1虚拟地址VPN---在TLB(组相关映射)中查询PTE2命中---返回PPN(物理页号)--3若不命中MMU从主存中获取页表,查询PTE 命中---返回PPN 不命中---MMU发出缺页异常信号,缺页调度程序---换页----更新PTE,TLB--再次执行导致缺页的指令---重新运行加载指令,此时命中查找到PPN--33MMU计算出实际物理地址---发生给缓存---组,行匹配若命中返回数据字节若不命中---从主存中加载页面,LRU替换缓存页面---再执行加载指令---查询命中 阅读全文
posted @ 2011-09-12 14:42 chegvra 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 四种异常控制流:1 硬中断(IO设备处理请求,硬件故障):异步异常2 trap:系统调用。3 故障异常:缺页异常,如果可以处理故障,返回重新执行指令,如果不行终止4 终止异常:O除,访问越界。进程:1 逻辑控制流---独享cpu2 独立的地址空间---虚拟内存进程的模式:1 用户态2 内核态(更大权限)进程上下文切换:目的:多任务运行过程:保持当前进程的上下文:cpu状态,寄存器值,进程映像,恢复先前某一进程上下文,转交控制权。可能发生情景:1 系统调用: ---系统调用IO,执行IO阻塞,执行切换,当IO完成,内核判断当前进程是否执行够久,切换 在磁盘读取数据期间,计算机会采用DMA控制传输 阅读全文
posted @ 2011-09-12 11:27 chegvra 阅读(138) 评论(0) 推荐(0) 编辑
  2011年9月3日
摘要: 有两种方法:第一种:饿汉式:(一般比较安全)public class Singleton{private static Singleton singleton=new Singleton();//注意这是private 只供内部调用private Singleton(){System.out.println("已产生对象实例");}public Singleton getInstance(){return singleton;}//这里提供了一个供外部访问本class的静态方法,可以直接访问 }第二种:懒汉式:public class Singleton { private 阅读全文
posted @ 2011-09-03 21:29 chegvra 阅读(97) 评论(0) 推荐(0) 编辑
  2011年9月1日
摘要: 判断整数序列是不是二元查找树的后序遍历结果思想,找到序列的根,然后将序列划分左右子树,再递归判断boolean Is_postOrder_traverse(int a[],int begin,int end) {if(a == null || begin>end) return false; root=a[end]; for(int i=begin;i<end;i++){ if(a[i]>root) break; } for(int j=i;j<end;j++){ if(a[i]<root) return false; } booleanleft =true; b 阅读全文
posted @ 2011-09-01 19:41 chegvra 阅读(136) 评论(0) 推荐(0) 编辑
  2011年6月9日
摘要: Loop1 kinds of loop2 when to use a loop with exit.主要用于解决半循环的场合。3 controlling the loop. 未初始化循环变量,不正常的退出,不正确的嵌套,忽略累加变量,下标串话。 1 将循环体封装成子程序 2 简化退出条件4 entering the loop 1 one entery. 2 循环初始化代码靠近循环。5 porcessing the Middle of the Loop 1 { } 必要2 避免空循环 3 housekeeping 放在开始或结束 4 一个循环只做一件事6 exciting the loop 1 阅读全文
posted @ 2011-06-09 16:40 chegvra 阅读(171) 评论(0) 推荐(0) 编辑
  2011年5月10日
摘要: class Outer{ private int a; public class Inner{ private int a; public void method(int a){ a++; //局部变量 this.a++; //Inner类变量 Outer.this.a++; //Outer类变量 } }}一般做法是在Outer中写一个返回Inner类对象的方法public Inner getInner(){ return new Inner();}在其他类中使用内部类:Outer outer = new Outer();Outer.Inner inner = outer.new Inner( 阅读全文
posted @ 2011-05-10 10:58 chegvra 阅读(308) 评论(0) 推荐(0) 编辑
  2011年3月29日
摘要: 一 资源的配平:有始有终,对于多种资源需求1 释放的顺序与分配的顺序相反,以防止资源浪费。2 总是以相同的顺序分配资源,防止死锁。二 配平与异常:异常会打乱程序的正常执行逻辑,从而打乱资源配平原。如何处理取决于语言。在c++中:try { //.... Node *n= new Node;}catch {delete n;throw ;}delete n;重复删除 违反DRY,so 利用局部对象退出包含块时会被自动清除,you can change it to be a object contain a point .在java 有GC,and finally ,but i don't 阅读全文
posted @ 2011-03-29 22:57 chegvra 阅读(90) 评论(0) 推荐(0) 编辑