编程速记-00

1.哨兵:

  可用于线性查找时减少循环时的每次判断的时间。在线性查找时,把查找值作为哨兵放入线性表的末尾([L]),然后循环从头开始查找(i:[0-L]),查找的过程中不对是否还有后续节点进行判断,只对是否查找到进行判断,若查找到则跳出循环并获得下标i,若为L则证明线性表内未找到,否则,表内找到在下标i处。

2.随机排列情况下的二分查找法:

  对随机排列的一个范围内的数,可以将其按二进制的位来进行二分,如第一位为0的为一半,为1为一半;第二位的情况又可以进一步进行二分......。此法可迅速的查找在这个范围内缺失的数或重复的数。

3.变位词的快速搜索:

  对同一个变位词类都生成一个相同的变位词标识(如:从a-z排好序的字符串)。然后在整个词典中对变位词标识进行排序,可以迅速的得到同一类变位词的集合。

  启发:在处理浩瀚的数据集时,用相同的标识(可排序)来标识好每一个数据,然后则可根据标识,快速的找到同一类型的数据集合。(键(相同标识)- 值(同类集合)),马尔科夫链算法利用的散列表。

4.if-else嵌套过深:

  • 利用数组或其他数据格式储存逻辑情况,通过直接读取数据结构的方式来代替if-else的判断
  • 把可以整合的逻辑整合到一个if判断语句中,从而减少嵌套
  • 将冗长的代码写成函数进行调用
  • DO-WHILE(FALSE)+break(尚未透彻理解,觉得有点多余)

5.不同区间按不同概率来取随机值:

  区间映射的方法 -- 比如要在[0,n]以0.2的概率取随机值,[n+1,m]以0.8的概率取随机值

  映射:p和r的映射

p = rand()%N  

if(p ∈ [0,0.2*N-1]) then r=0+p%(n+1);

if(p ∈ [0.2*N,N-1]) then r=n+1+p%(m-n);

posted @ 2011-09-06 00:16  孤牧  阅读(1007)  评论(0)    收藏  举报