C++基础知识易错点总结(2)

1. 若一组待排数据有序,花费时间最多的是:快速排序,T(n)=O(n^2);

2. 有 1000 个无序的整数,希望使用最快的方式找出前 50 个最大的,最佳的选择是?

  • 快速排序:在最理想的情况下,即划分可以使得每次分到n/2 的两个序列,复杂度为o(nlogn);
  • 堆排序:无论什么情况都是o(nlogn),当然还有建堆的时间o(n),所以为n+nlogn,但是,本题只是要前五十个,所以堆排序只需要执行50次就够了:n+50log;
  • 堆排序相对较好;

3. 处理哈希冲突的方法:

  • 开放定址法(线性探测法,线性补偿探测法,随机探测法);
  • 拉链法;
  • 建立公共溢出区;
  • 再散列法;

4. 词法分析器用于识别单词;

5. 计算机操作系统出现死锁的原因:若干进程因竞争资源而无休止的等待着其他进程释放已占有的资源;

6. TCP的关闭过程,处于TIME_WAIT状态的连接等待2MSL后真正关闭连接;

7. (智力题)赛马,有25匹马,每次只能5匹马进行比赛,比赛只能得到5匹马之间的快慢程度,而不是速度,请问,最少要比 1 次,才能获得最快的前3匹马?

分析:25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名? 每匹马都至少要有一次参赛的机会,所以25匹马分成5组,一开始的这5场比赛是免不了的。接下来要找冠军也很容易,每一组的冠军在一起赛一场就行了 (第6场)。最后就是要找第2和第3名。我们按照第6场比赛中得到的名次依次把它们在前5场比赛中所在的组命名为A、B、C、D、E。即:A组的冠军是第 6场的第1名,B组的冠军是第6场的第2名……每一组的5匹马按照他们已经赛出的成绩从快到慢编号: A组:1,2,3,4,5 B组:1,2,3,4,5 C组:1,2,3,4,5 D组:1,2,3,4,5 E组:1,2,3,4,5 从现在所得到的信息,我们可以知道哪些马已经被排除在3名以外。只要已经能确定有3匹或3匹以上的马比这匹马快,那么它就已经被淘汰了。可以看到, 只有上表中粗体的那5匹马是有可能为2、3名的。即:A组的2、3名;B组的1、2名,C组的第1名。取这5匹马进行第7场比赛,第7场比赛的前两名就是 25匹马中的2、3名。故一共最少要赛7场。
上一篇:CoffeeScript飞一样的写javascript


下一篇:Postman使用小技巧 - 用Postman生成Request代码