【アルゴリズムとデータ構造】最大サブシーケンスと問題
(転載は出典を明記してください:http://blog.csdn.net/buptgshengod)
1.テーマ
正と負の数値シーケンスが与えられ、最も大きなサブシーケンスとが決定されます.窮挙法で最良の結果も時間複雑度O(n²).その後,時間の複雑さを直接O(n)に変える賢い方法が見られた.
2.解法
(1)窮挙法
すべてのシーケンスを計算して最大を見つけます.
(2)オンラインアルゴリズム
オンラインアルゴリズムは,読み込んだデータに正解を与え,毎回判断する.
最大サブシーケンスが負の数で始まることはできないので、同じ理屈で負のシーケンスで始まることはできません.
1.テーマ
正と負の数値シーケンスが与えられ、最も大きなサブシーケンスとが決定されます.窮挙法で最良の結果も時間複雑度O(n²).その後,時間の複雑さを直接O(n)に変える賢い方法が見られた.
2.解法
(1)窮挙法
すべてのシーケンスを計算して最大を見つけます.
/*
, , 。
-2,11,-4,13,-5,-2
:
*/
public class Test {
public static void main(String[] args)
{
int[] list={-2,11,-4,13,-5,-2};
int i,j;
int maxsum=0;
int sum=0;
for(j=0;j<list.length;j++)
{
sum=0;
for(i=j;i<list.length;i++)
{
sum+=list[i];
if(sum>maxsum)
{
maxsum=sum;
}
}
}
System.out.print(maxsum);
}
}
(2)オンラインアルゴリズム
オンラインアルゴリズムは,読み込んだデータに正解を与え,毎回判断する.
最大サブシーケンスが負の数で始まることはできないので、同じ理屈で負のシーケンスで始まることはできません.
public class test {
public static void main(String []args)
{
int[] list={-2,11,-4,13,-5,-2};
int i,j;
int maxsum=0;
int sum=0;
for(i=0;i<list.length;i++)
{
sum+=list[i];
if(sum>maxsum)
{
maxsum=sum;
}
else
{
if(sum<0)
sum=0;
}
}
System.out.print(maxsum);
}
}