打断骨头从新学算法之归并排序

以前大三的时候,开了一门算法分析课,没好好听,一听到诸如背包问题,NP问题,就犯怵,但随着年龄的增长,猛然回过头,真正要学习的就是当初这些怕的东西,从归并排序开始,开始漫长的断骨重新学习算法之路。

归并排序利用了分治法的思想,首先谈谈分治法:(这里引用百度百科的定义)

分治法 可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后让他们彼此异化。
分治法的精髓:
分--将问题分解为规模更小的子问题;
治--将这些规模更小的子问题逐个击破;
合--将已解决的子问题合并,最终得出“母”问题的解;
而归并排序正好可以作为分治法一个完美的例子
归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经 排序序列之和,该空间用来存放合并后的序列
第二步:设定两个 指针,最初位置分别为两个已经 排序序列的起始位置
第三步:比较两个 指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
     不多说,传代码,自己凭记忆加理解相当于复制了一遍别人的成果,起到一个锻炼的效果吧
环境用的是DEV C++5.3.0.4
#include<iostream>

using namespace std;

void Merge(int a[],int first,int mid,int last,int temp[])/*合并有序序列*/
{
int i=first,j=mid+1;
int m=mid,n=last; 
int k=0;
while(i<=m&&j<=n)
{
if(a[i]<=a[j])
temp[k++]=a[i++];
else 
temp[k++]=a[j++];
}

while(i<=m) 
temp[k++]=a[i++];
while(j<=n)
temp[k++]=a[j++];

for(i=0;i<k;i++)
a[first+i]=temp[i];
} 


void MergeSort(int a[],int first,int end,int temp[])
{
if(first<end)
{
int mid=(first+end)/2;
MergeSort(a,first,mid,temp);
MergeSort(a,mid+1,end,temp);
Merge(a,first,mid,end,temp);
   }
}


int main()
{
int a[5]={4,7,2,1,8};
int temp[5]={0};
for(int i=0;i<5;i++)
cout<<a[i]<<" ";
cout<<endl;

MergeSort(a,0,4,temp);
for(int i=0;i<5;i++)
cout<<a[i]<<" ";
cout<<endl;

}



归并排序实现起立其实不是想象中那么困难,而本人在大三的时候,可能就是因为心里发怵,所以很多本该在几年前就该掌握的东西,到今天才敢重新拾起,尽管我还是不明朗自己未来的方向,但从这一个归并排序开始,我开始重新夯实自己的基本功,一步一个脚印。

内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合Koopman算子理论与递归神经网络(RNN)的数据驱动建模方法,旨在对非线性纳米定位系统进行有效线性化建模,并实现高精度的模型预测控制(MPC)。该方法利用Koopman算子将非线性系统映射到高维线性空间,通过递归神经网络学习系统的动态演化规律,构建可解释性强、计算效率高的线性化模型,进而提升预测控制在复杂不确定性环境下的鲁棒性与跟踪精度。文中给出了完整的Matlab代码实现,涵盖数据预处理、网络训练、模型验证与MPC控制器设计等环节,具有较强的基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)可复现性和工程应用价值。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及自动化、精密仪器、机器人等方向的工程技术人员。; 使用场景及目标:①解决高精度纳米定位系统中非线性动态响应带来的控制难题;②实现复杂机电系统的数据驱动建模与预测控制一体化设计;③为非线性系统控制提供一种可替代传统机理建模的有效工具。; 阅读建议:建议结合提供的Matlab代码逐模块分析实现流程,重点关注Koopman观测矩阵构造、RNN网络结构设计与MPC控制器耦合机制,同时可通过替换实际系统数据进行迁移验证,深化对数据驱动控制方法的理解与应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值