基于内容精简、重点突出、便于理解的这些优点,选择中文伪码来记录。
一般地,left、right分别表示待操作数组的起止索引,或是链表的头尾指针。
_______________________________________________
- 二分查找
当数组有元素时(left<=right)循环:
若查找值小于中位数,则查找左半边数组;
若查找值大于中位数,则查找右半边数组;
否则查找值等于中位数,即找到。
返回未找到。
_______________________________________________- 归并排序
当数组多于一个元素时(left<right):
递归排序左半边(含中间);
递归排序右半边;
合并两边。
_______________________________________________
- 堆排序
从最后一个非叶节点(length/2-1)往前循环:// 建大顶堆的过程
全范围length内AdjustHeap调整当前节点。
由后往前循环(i=length-1;i>0;--i):
当前节点与根节点交换;
在范围i内,AdjustHeap调整根节点;
AdjustHeap:
若当前节点有孩子,循环:
选择一个较大的孩子;
若该孩子比当前节点大,则交换并将当前节点设为该孩子,否则结束
_______________________________________________
- 快速排序
当数组多于一个元素时(left<right):
q = Partition();
递归排序q左边;
递归排序q右边。
_______________________________________________
- Partition 作用是返回一个位置,经过调整数组左边都比该值小,右边都比该值大
Partition://实现方式有多种,此为严蔚敏《数据结构》版本
选择第一个记录作为枢轴,值为key;
当left<right时循环:
right从右到左,直至比key小时停下,并设置a[left] = a[right];
left从左到右,直至比key大时停下,并设置a[right] = a[left];
right从右到左,直至比key小时停下,并设置a[left] = a[right];
left从左到右,直至比key大时停下,并设置a[right] = a[left];
a[left] = key;
返回left。
Partition://《算法导论》版本
选择最后一个记录作为枢轴,值为key;
p = left;//用p来记录key最终应该摆放的位置
从left至right-1遍历数组:
若当前值小于key
交换a[p]与当前值,并将p后移一位;
交换a[p] = a[right];
返回p。
_______________________________________________
- 素数筛选法
int a[N+1] = {1,1}; //准备一个标志数组,1表示非素数
由2至N,循环:
若该数为素数
将其所有倍数标志为非素数;//小优化是从平方数开始筛掉该数的奇倍数
a中所有值不为1的位置即是素数。
_______________________________________________
- 求链表长度
指针p1每次一步,p2每次两步,若快慢指针均不为空,循环:
若两指针相遇于a点,表示链表中含有环
p1p2从a点接着走,再次相遇时经过的步数即为环长;
p1置于a点,p2置于表头每次一步,相遇时位于环入口点,经过的步数即为环外表长;
返回环长与环外表长之和,即为链表长度。
无环,p1走到尽头便知表长。
_______________________________________________
- 最大子段和
‘最大和’与‘当前和’都初始化为负无穷;
遍历数组;
‘当前和’若为正数,则加上当前数字,否则重置为当前数字;
‘当前和’若大于‘最大和’,则‘最大和’置为‘当前和’。
‘最大和’即为解。
_______________________________________________
- 树中两个节点的最低公共祖先
深度优先遍历该树,用栈记录两个节点到根节点的路径;//若树节点中有指向父节点的指针,此步骤省略
问题转化为两个链表的第一个公共节点,解法如下:
求出两链表的长度,差值为k;
长链表先走k步;
两链表同步走://由于在公共节点相遇后,两链表后半段完全相同,长度也一样
若当前节点相同,此即为解。
_______________________________________________
- 含有min函数的栈
用两个同步栈来实现,s_data为数据栈,s_min栈记录每个时刻的s_data中的最小值。
Push(value):
s_data.push(value);
若s_min为空或s_min.top()大于value,则s_min.push(value),否则s_min.push(s_min.top())。
Pop():
若栈不为空,s_data.pop(),s_min.pop()。
Min():
若栈不为空,返回s_min.top()。
_______________________________________________
- 全排列
当left>right时,输出当前排列,结束。
从left至right循环:
交换当前值与a[left];
递归求解(left+1,right)的全排列;
交换当前值与a[left]。
_______________________________________________
- 牛顿迭代法求平方根
(求a的平方根,即为求f(x)=x^2-a的根)
x初始值任取,非零即可;
循环:
过(x,f(x))点做f(x)的切线;
x更新为切线与x轴交点;
若精度不够则继续计算。
_______________________________________________
相关推荐
10. 伪码的含义:伪码是一种非正式的编程语言描述,用于表达算法逻辑。伪码没有统一的标准,目的是为了算法设计的清晰和易于理解。 以上知识点体现了游标算法在处理传感器信号时的严谨性和准确性。算法中的每一个...
《基于判决辅助的异步CDMA信号多伪码序列盲估计算法》 异步码分多址(CDMA)通信技术,凭借其独特的扩频调制方式,为无线通信领域提供了一种抗干扰、抗截获的安全通信手段。在多径衰落严重的环境中,如水下通信,...
根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ### 一、算法设计与分析 算法设计与分析是计算机科学中的核心部分,它涉及到...了解并掌握这些基本算法的设计思路和实现方法对于学习计算机科学非常重要。
这是一篇硕士毕业论文,详细的论述了伪码测距算法,并做了仿真,希望对你有用
该算法在汽车行业中具有广泛的应用前景,尤其是在需要高精度角度测量的应用场景中尤为重要。通过对给定伪代码的详细解析,我们不仅了解了游标算法的工作原理,还深入了解了其实现细节和应用场景。这对于从事相关领域...
"pmf_test.m"脚本可能是对PMF_FFT伪码捕获算法的测试和验证,包括生成不同的场景(如不同的信道条件、噪声水平等),评估算法在这些条件下的性能。测试可能会涉及计算误码率(Bit Error Rate, BER)、捕获时间等关键...
数据结构的选择对于算法的设计和实现有着至关重要的影响。数据结构算法伪码汇总是对数据结构中常见的算法和数据结构的总结和归纳,旨在帮助读者快速了解和掌握数据结构的基本概念和操作。 线性表是数据结构中最基本...
综合以上分析,可以看出本研究通过结合硬件技术与信号处理算法,对传统的伪码捕获算法进行了重要的改进。这些改进不仅提高了捕获算法的性能,也为类似技术在实际应用中的推广和应用奠定了坚实的基础。对于通信和导航...
总结来说,《基于伪码互相关特性的GPS信号捕获算法》所提出的创新技术,不仅为GPS接收机的设计和优化提供了新的思路,而且对于整个定位技术的发展都具有深远的影响。通过这一技术的应用,我们可以期待一个更加高效、...
在计算机科学领域,排序算法是数据处理中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序(如升序或降序)排列。本文将深入探讨排序算法的基本概念、常见类型以及它们在实际应用中的作用...
试问,当我们辛辛苦苦“学会”了一些算法和数据结构,但在实际编程中往往要么一写 就错(伪码毕竟只是用来表达算法思路,但具体编程时会遇到很多实现上的细节问题),要么面对问题不知如何下手解决(因为没有实际的...
匈牙利分配算法,也称为Kuhn-Munkres算法或KM算法,是一种在图论中用于解决匹配问题的高效算法,特别适用于解决二分图的最大匹配问题。在二分图中,节点被分为两个不相交的集合,边连接着不同集合中的节点。该算法的...
#### 基于FFT的多普勒和伪码并行捕获算法 ##### 1.1 多普勒并行捕获 在直接序列扩频(DSSS)信号接收过程中,接收机接收到的信号通常包含多普勒频率偏移。该偏移量是由于发射源与接收器之间的相对运动造成的。为了...
- **测量原理引入的误差**:伪码序列的选择对于减少测距误差至关重要。理想的伪码序列应当具有良好的自相关性和互相关性,以确保在信号处理过程中能够准确地识别信号的时间延迟。 #### 六、伪码跟踪环路的深入剖析 ...
针对多径异步码分多址(CDMA)信号多用户伪码盲估计问题,利用发送符号的有限元(FA)特性,提出了一种基于最大似然的判决辅助(DA)算法,构建了信息码、伪码及信道的双层迭代估计结构,实现了异步CDMA信号的高性能...