编程速记-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);
博客地址转移至:http://wuzhiwei.net
浙公网安备 33010602011771号