数学拾遗 微积分 线性代数 考研:2018启航张宇高数远程面授
https://leetcode-cn.com/problems/two-sum/description/
https://blog.csdn.net/zr459927180/article/details/51932655
前言
1.算法学习与克服恐惧
知晓算法形成和实现原理;
面对新问题为什么胆怯焦虑不安:问题描述定义未明?对概念不熟悉?不够自信?
解决办法:1.首先明确这些问题就算大神也不是一步就能做出来的,需要积累;
2.相信自己也有解决这种办法的能力,没有可以积累,不是我不适合,是问题不适合;
3.会用解决方法就是一种方法,这些才是编程最后的难题,一下解决了编程就没意思了;
4.算法需要考虑存储空间和内存等问题:比如分段排序
数据量 有/无序 存在位置是否影响(复杂度分析)
一 工作中常用算法
最短路径
足球控制例子
哈希表
目的:为了根据数据的部分内容(关键字),直接计算出存放完整数据的内存地址
原理:通过某种算法(哈希函数)直接根据关键字计算出元素的存放地址,由于无需遍历,所以效率很高;
①哈希函数实现:
图 http://blog.chinaunix.net/uid-26548237-id-3483650.html
http://www.cnblogs.com/polly333/p/4760275.html
1.排序
http://forum.eepw.com.cn/thread/280064/1
浙大数据结构
http://www.icourse163.org/learn/ZJU-93001?tid=1002019005#/learn/forumindex
效率:快排》冒泡》插入=选择;
但快排抵抗垃圾数据能力太差;
推荐用归并排序,速度仅次于快排,抵抗垃圾数据的能力较强
目前排列最快的是索引排序(大牛们都这样说的)。
另外俺知道两种排序方法
1,就是对数据库直接排序。可以使用sql语句对后端数据排序。使用这种方法我觉得对你那两种情况都一样。
2,分段读取后端的数据,然后利用DataSet(BCB的牛技术)一类控件的Data属性。首先判断Data中的数据是否已经排序 如果没有排序就排序,然后再读下一段数据,再判断,以此类推。
那种更快,这得根据实际情况,都有优缺点。
100万行的数据别说排序,就是读取也是个问题!能否放到StringGrid,即使放得能否滚动查看?
建议每次读取部分数据,比如按行读取,指定一个索引值,判断第2列数是否和索引对应,如果对应就读入并写入到StringGrid里。
建议使用快速排序或堆排序。
如果在外存储器中,可使用归并排序。
http://bbs.csdn.net/topics/190147318
归并排序
未完成
void Merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex)
{
int i = startIndex,j=midIndex+1,k=startIndex;
while(i!=midIndex+1&&j!=endIndex+1)
{
if(sourceArr[i]>sourceArr[j])
tempArr[k++] = sourceArr[j++];
else
tempArr[k++] = sourceArr[i++];
}
二 基本数据结构-栈,队列,二叉树与堆
堆:malloc申请存储区
先研究树再图;查找算法扩展思考 例子:8球中有一瑕疵球通过2次称量求出;
是什么?为什么需要?怎么实现?生活中例子,结合工作,区别(补图 举例 作用 对数据结构的进一步理解:纯软件思路的人为实现,用顺序或链式的存储方式定义数据逻辑结构,思考:数据结构的实现蕴含算法的思想吗)
红黑树(粤嵌书P273)伸缩性
下一步:哈希表(适用范围
快速查找,删除的基本数据结构,通常需要总数据量可以放入内存)
数据量大有优势-空间换时间
Hash与Map的区别
权衡三个因素: 查找速度, 数据量, 内存使用,可扩展性,有序性
算法速度级别(查找?):常数级O(1)>O(log2n)>n(线性阶)>线性对数阶nlog2n>平方阶n*n>立方阶>k次
方阶>指数阶(2的n次方)
算法执行期间所需要的存储空间包括3个部分:
·算法程序所占的空间;
·输入的初始数据所占的存储空间;
·算法执行过程中所需要的额外空间。
在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术。
链表
单链表(空头)插入节点.png 红线部分什么意思.png栈:先进后出
作用(将一个整数,转换成指定的进制 2 8 16)
队列:先进先出
二叉树的遍历
https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650825031&idx=1&sn=f07a913f332f5ddf2054f7ace0b9ceaa&chksm=80b7b5d9b7c03ccff47951986df91202f5a13a438dc42d05836e3e6591ecbce713e062a92fbd&mpshare=1&scene=1&srcid=0315lbhX4o7l0LE43P32MAHo#rd
前序,中序,后序,按层
前序:根---》左---》右
最开始的根一定是最顶层的那个根节点
中序:左---》根---》右 如何实现(贝讯笔试)
最开始的左是图中最底层,最左边的那个左孩子
后序:左---》右---》根
按层:从上到下,从左到右
套路:先排能看到的,然后用规则填充;规则很明确,但是结合具体的二叉树去分析的时候,注意:每个节点有多重身份(根,左,右)--->你在套用这些规则的时候,你必须递归地去套用一次口诀
(应用:树结构.在一个树里找指定的结点.写游戏的时候,我把场景放到节点上,这样出了一个场景,就切到父节点的场景.这个叫做'入口'技术,通过变换节点在树中的位置,打开同一个门,就可以到不同的地方.泛泛的二叉树没怎么用,不过排序二叉树倒是不错,提高查找速度.我在游戏里面用了,很有效果哦:))
用的最多的应该是平衡二叉树,有种特殊的平衡二叉树红黑树,查找、插入、删除的时间复杂度最坏为O(log n)Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。还有哈夫曼树编码方面的应用。B-Tree,B+-Tree在文件系统中的应用。如有错误或遗漏还请各位指正补充。
二叉树中的二叉查找树,可以使用 ”中序遍历“ 来排序。
文件系统和数据库系统一般都采用树(特别是B树)的数据结构数据,主要为排序和检索的效率。二叉树是一种最基本最典型的排序树,用于教学和研究树的特性,本身很少在实际中进行应用,因为缺点太明显了
二叉树:可为空 (深)度与层 表达式
三叉树:
栈:底压栈代表只能弹倒序 题目意思是动态的 不是一个顺序
图:领接表 广(深)度优先
快速排序
三 复杂数据结构
四 实用算法-无人机工控等(PID学习笔记)
0.棋牌游戏,多状态条件判断
百余张棋牌,分花色实时牌面分析
image.png
程序思路.png
https://blog.csdn.net/qq229596421/article/details/51419813
PID是工业常见控制算法
比例proportion
积分integration
微分differential
有什么用?怎么实现?应用场景?用C++如何实现?发展及拓展?使用注意问题?
1.控制算法
有哪些:二位式控制(弊端:返回值单一 不能达到理想值 延迟 效率低)
pv(控制对象)当前状态值 sv用户设定(目标)值(按钮或上拉电阻传入设定值给到算法,
算法输出out去控制负载,负载再将返回值经传感器去到算法)
2.PID如何解决(思想)
偏差E=Sv-Pv 不同:历史偏差(存储器) Pv取样值(开机以来每
隔固定时间与Sv相减然后存储,又分为:历史偏差 当前偏差 最近偏差,叠加三次的值然
后输出out)
分析:
1.开机以来传感器所有的采样点的数据序列
序列:x1(第一秒钟值) x2.....xk,
2.分析采样点数据序列,挖掘三方面信息
①Ek =Sv-Xk现在时间点传感器回来值与设定值偏差程度
0:控制没达标
=0:刚好
<0:超标
POUT = Kp*Ek+OUT0 放大偏差 ----比例控制 PWM(脉冲)信号-侧面控制负载 缺陷:值
相等就失控(没误差控制不了)
②Sk = E1+E2+.....Ek-1+Ek //可正可负
0:大多数时间未达标 =0: <0:
IOUT=Kp*Sk+OUT0->积分算法(考虑了历史状态)->+OUT0代表历史没有问题
把问题控制在没有发生之前
③最近两次偏差相减 Dk = E(k)-E(k-1)//最后两个数想减
0: 偏差更大,越来越偏离目标(趋势)
DOUT = Kp*Dk+OUT0 --微分控制(不能单独行动)
2.PID算法 -微分和定积分
2.1 卡尔曼滤波
2.2最优估计算法
2.3为什么不用欧拉角来表示旋转而要引入四元数
一方面是因为欧拉角微分方程中包含了大量的三角运算,这给实时解算带
来了一定的困难。而且当俯仰角为90度时方程式会出现神奇的“GimbalLock”。
所以欧拉角方法只适用于水平姿态变化不大的情况,而不适用于全姿态飞行器的姿态确定。
四元数法只求解四个未知量的线性微分方程组,计算量小,易于操作,是比较实用的工程方法。
四元数是一种超复数。如把四元数的集合考虑成多维实数空间的话,四元数就代表
k i j 着一个四维空间,相对于复数为二维空间。
简而言之,四元数包含了刚体旋转的所有信息,而在四旋翼飞行器的姿态解算中,
往往使用的是四元数微分方程对四元数进行更新
define Kp 2.0f //加速度权重,越大则向加速度测量值收敛越快
define Ki 0.001f //误差积分增益
五 STL
Vector向量容器 动态数组 节省存储
iterator迭代器 智能指针 被其它嵌入内部
六 图
算导2.2答案 http://www.cnblogs.com/geniuspig/p/7215503.html
http://www.bianceng.cn/Programming/C/201306/36691.htm
http://www.jb51.net/article/55232.htm
http://blog.csdn.net/myan/article/details/649018
http://www.bianceng.cn/Programming/C/201306/36691.htm
应用实例
1.广州BRT
实时到站信息 大站熟悉-小路 灵活性 通用快速出门时段
2.音视频传输
压缩算法
效率 完整性 tencent图形压缩
网友评论