导航:首页 > 源码编译 > 连续的算法

连续的算法

发布时间:2023-01-31 01:00:14

1. 离散拉普拉斯算法和连续拉普拉斯算法有什么区别

离散的是不连续的,比如1,2,3,4,5
连续的是不间断的,比如1~5;
离散拉普拉斯算法适用于离散的函数,连续拉普拉斯算法适用于连续的函数

2. C#求连续数字的算法

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;

/*
*先排序(用sort方法),再依次求连续的数字的个数,选择最长的打印。
*/

{
classProgram
{
staticvoidMain(string[]args)
{
intnTmpStart=0;
intnResultStart=0;
intnTmpConsecutiveNum=1;
intnResultConsecutiveNum=0;
int[]num={1,4,6,5,8,9,10,15,3,19,18,21,20,21,17};
Array.Sort(num);

nTmpStart=num[0];
for(inti=1;i<num.Length;i++)
{
if(num[i]==num[i-1])
{
if(i==num.Length-1)
{
if(nTmpConsecutiveNum>nResultConsecutiveNum)
{
nResultConsecutiveNum=nTmpConsecutiveNum;
nResultStart=nTmpStart;
}
}
else
{
continue;
}
}
elseif(num[i]==(num[i-1]+1))
{
nTmpConsecutiveNum++;
if(i==num.Length-1)
{
if(nTmpConsecutiveNum>nResultConsecutiveNum)
{
nResultConsecutiveNum=nTmpConsecutiveNum;
nResultStart=nTmpStart;
}
}
}
else
{
if(nTmpConsecutiveNum>nResultConsecutiveNum)
{
nResultConsecutiveNum=nTmpConsecutiveNum;
nResultStart=nTmpStart;
}
nTmpStart=num[i];
nTmpConsecutiveNum=1;
}
}
Console.WriteLine("最长连续数字:");
for(intj=0;j<nResultConsecutiveNum;j++)
{
Console.Write("{0} ",nResultStart+j);
}
Console.WriteLine();
}
}
}

3. 算法实现——连续和问题

//VC 2005 测试通过

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int GetCount( int num )
{
//如果27=27 , 也算作在内请把cnt赋值为1
int sum=0, cnt=0;
int index=0, i=0;

while ( i <= num /2 +1 )
{
sum = i * (i+1) /2 - index *(index-1) /2;
if ( sum == num )
{

//cout<<endl<<num<<"="<<index;
//for ( int k=index+1; k<=i; k++ )
//{
//cout<< "+"<<k;
//}
index=++i;
cnt++;
}
else if ( sum > num )
{
index++;

}
else
{
i++;
}
}

return cnt;
}
void main()
{
int num=0;
string inPath="c:\\inFile.txt";
string outPath="c:\\outFile.txt";

ifstream inFile( inPath.c_str(), ios_base::in);

if ( !inFile )
{
cerr<<"Open file :" << inPath <<" failed! Exit....";
return;
}
ofstream outFile( outPath.c_str(), ios_base::out );
if ( !outFile )
{
cerr<< "Open file: " << outPath <<" failed! Exit...";
return;
}

while ( !inFile.eof() )
{
if ( inFile >>num )
{
outFile<<GetCount(num) <<endl;
}
else
{
inFile.clear();
inFile.get();
}
}
inFile.close();
outFile.close();

cout<<"\nEnter key to exit...";
cin.get();

}

4. 求最大连续区间和的几种方法

定义最大连续区间和:给定一个长度为n的序列a[1],a[2]...a[n],求一个连续的子序列a[i],a[i+1]...a[j-1],a[j]使得a[i]+a[i+1]...+a[j-1]+a[j]最大。

1、根据定义来枚举:枚举上下界i,j,维护一个max值

其中枚举上下界的复杂度为O(n²),求区间和复杂度为O(n),所以总的时间复杂度是O(n^3)。

for(int i = 1; i <= n ; i++)

for(int j = i; j<= n; j++)

ans = max(ans,accumulate(a+i,a+j+1,0));

2、对求区间和的操作做预处理,令sum[i] = a[0] + a[1] + a[2] ... + a[i-1] + a[i] 计算区间和的复杂度可降为O(1),枚举上下界的复杂度不变,所以总的时间复杂度为O(n²)。

for(int i =1;i<=n;i++)

sum[i] = sum[i-1] + a[i];

for(int i = 1; i <= n ; i++)

for(int j = i; j<= n; j++)

ans = max(ans,sum[j]-sum[i-1]);

3、利用动态规划的思维来继续优化,得到一个线性的基本算法,也是基本连续子区间和的标准算法:

定义maxn[i]为以i为结尾的最大连续和,则很容易找到递推关系:maxn[i] = max{0,max[i-1] + a[i]}

所以只要扫描一遍即可,总时间复杂度为O(n)。

for(int i =1; i <= n; i++)

{

last = max(0,maxn[i-1]) + a[i];

ans = max(ans,last);

}

阅读全文

与连续的算法相关的资料

热点内容
一日一画pdf 浏览:95
编程猫拔萝卜文字评价模板 浏览:248
cmdjava命令 浏览:237
扫描版pdf转文字版 浏览:534
单片机专用寄存器 浏览:497
学习python的手册 浏览:676
vue编译成js文件 浏览:90
给单片机供电的电池 浏览:341
什么app是分享教育的 浏览:899
可视化编程java 浏览:83
人工智能温控器算法 浏览:377
大号文件夹多少钱一个 浏览:573
pdf阅读器打开文件 浏览:99
winrar解压日文文件 浏览:39
什么app可以看广东珠江电视台 浏览:76
linux移动文件位置 浏览:145
循环码与卷积码编译原理 浏览:808
进化算法和启发式算法的区别 浏览:603
android组件是什么 浏览:974
安卓手机微信怎么同步信息 浏览:183