`
pake007
  • 浏览: 58169 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
社区版块
存档分类
最新评论

什么是联机算法

阅读更多

如果在任何时刻,算法都能对它已经读入的数据给出子序列问题的正确答案,具有这种特性的算法叫做联机算法。仅需要常量空间并以线形时间运行的联机算法几乎是完美的算法。

一个经典的问题:求最大子序列和的算法就是这样一个完美的算法,给定一个数组(不妨设为整形),求出一个子序列,使得子序列中的元素之和为最大。例如 {4,3,-8,2,6,-2,1},则 {2,6} 子序列即为所求。

这个问题有很多种算法可以解决,但是最好的是一个线形时间常量空间的联机算法,算法如下:

java 代码
  1. int maxSubSum (int[] a, int size)    
  2. {   
  3.      int maxSum = 0, thisSum = 0;   
  4.      int start = 0, end = 0;   
  5.         
  6.      for ( int j = 1; j <= size; j++ )   
  7.      {   
  8.            thisSum += a[j-1];   
  9.              
  10.           if (thisSum > maxSum)   
  11.           {   
  12.                maxSum = thisSum;    
  13.                end = j;   
  14.           }   
  15.           else if (thisSum < 0)   
  16.           {   
  17.               thisSum = 0;  
  18.               maxSum = 0; 
  19.               start = j + 1;   
  20.           }   
  21.      }   
  22.   
  23.       System.out.println(“最大子序列从第” + start + “个元素到第” + end + “个元素”);  
  24.       System.out.println("最大子序列和为“ + maxSum);   
  25.   
  26.       return maxSum;   
  27. }   
  28.            

可以看出这个算法是线形时间O(N)的,且只对数据进行一次扫描,一旦a[j]被读入并被处理,它就不需要再被记忆。因此如果数组在磁盘或磁带上,它就可以被顺序读入,在主存中不必存储数组的任何部分。所以这个算法是一个几乎完美的联机算法

分享到:
评论
5 楼 落日枫 2008-03-17  
当被执行数组为 {4,5,-10,2,6,-2,1} 得到的结果是错误的没有得到正确答案,
我想maxsum=0这句代码的原因,丢失了原来的最大值
下面是我的程序,能得到正确答案了,没充分测试过,请大家指出下错误:

#include "stdio.h"
#define N 13
//联机算法
void MaxSunSum(int a[],int n,int result[])
{
int thisSum=0;
int MaxSum=0;
int j,start=1,end=1;
int starttemp=1;
for(j=0;j <N;j++)
{
thisSum+=a[j];
if(thisSum> MaxSum)
{
end=j+1;
MaxSum=thisSum;
start=starttemp;
}
else if(thisSum <0)
{
thisSum=0;
starttemp=j+2;
}
}
result[0]=MaxSum;
result[1]=start;
result[2]=end;//结果数组
}
4 楼 pake007 2007-06-10  
谢谢geng,一时疏忽,在else情况中少加了一句maxSum=0,现在已经改好了
3 楼 geng2483759 2007-06-08  
程序明显不对啊,start的赋值不正确,用这个 {4,5,-10,2,6,-2,1}

结果是start=3,end=1
2 楼 pake007 2007-06-06  
是{2,6}没错的,这里的子序列元素是连续的
1 楼 ouspec 2007-06-05  
求出一个子序列,使得子序列中的元素之和为最大。例如 {4,3,-8,2,6,-2,1},则 {2,6} 子序列即为所求。


正确的结果应该是{4,6} 吧?

相关推荐

    手机象棋蓝牙联机游戏算法

    《手机象棋蓝牙联机游戏算法详解》 在数字化时代,传统的象棋游戏也逐渐转移到了移动设备上,其中手机象棋蓝牙联机游戏凭借其便捷性和互动性,深受玩家们的喜爱。本文将深入探讨实现此类游戏的核心算法以及相关技术...

    C 最大子序列算法

    C 最大子序列问题的几中算法-分治-联机算法

    java实现SM4算法和基于SM4算法的联机MAC计算

    Java实现SM4算法和基于SM4算法的联机消息认证码(MAC)计算涉及了密码学中的重要概念和技术。SM4算法,全称为国家商用密码算法SM4,是中国国家标准GB/T 32905-2016《信息安全技术商用密码算法SM4 Block Cipher》中...

    常用排序算法的联机实验及结果分析

    文章选自《河南职技师院学报》1999年12月刊,主要目的是通过对不同排序算法进行联机实验,分析这些算法在实际运行中的性能表现,特别是关注它们的耗时情况。这对于理解各种排序算法的实际应用效果、评估算法效率以及...

    算法合集之《半平面交的算法及其应用》

    算法方面,文章提到了两种主要的处理半平面交的方法:联机算法和分治算法。 1. **联机算法**: 这种方法首先初始化一个包含整个平面的区域A,然后逐一用直线切割A,只保留那些满足不等式ax + by + c &gt;= 0的区域。...

    联机手写字符识别算法研究

    ### 联机手写字符识别算法研究 #### 一、课题背景与意义 随着信息技术的飞速发展,汉字识别技术作为模式识别领域中的一个重要分支,因其强大的社会需求而得到了快速的发展。尤其在联机手写汉字识别领域,这项技术...

    多核处理器上的并行联机分析处理算法研究.pdf

    《多核处理器上的并行联机分析处理算法研究》这篇论文深入探讨了在当前计算机硬件技术,特别是多核处理器发展的背景下,如何优化并行联机分析处理(OLAP)算法以提升数据立方体计算的性能。随着硬件技术的快速发展,...

    OLAP联机分析处理

    OLAP(联机分析处理)是一种数据仓库技术,用于快速、稳定、一致地访问和分析多维数据,以满足决策支持或多维环境下的特定查询和报表需求。OLAP的概念是由关系数据库之父E.F. Codd在1993年提出的,他认识到联机事务...

    使用c#联机五子棋使用c#联机五子棋

    总的来说,使用C#实现联机五子棋项目不仅能够锻炼你的编程技能,还能让你熟悉网络编程、图形界面设计和游戏算法等多个方面的知识。通过这个项目,你将深入理解C#的强大功能,并能构建出一个具有实际应用价值的多玩家...

    CAXA 线切割联机助手

    4. **高精度**:软件内置的高级算法保证了加工精度,减少因人为因素导致的误差。 5. **自动化程度**:能够自动化处理复杂的切割路径,节省了人工编程的时间和精力。 二、联机助手的关键组件: 1. **联机助手.exe*...

    联机字符识别c++描述

    在C++编程环境下实现联机字符识别,开发者通常会利用图像处理和机器学习算法。以下是关于这一主题的一些关键知识点: 1. **图像预处理**:首先,我们需要将捕获的字符图像进行预处理,包括二值化、去噪、平滑、边缘...

    python实现的可人机可联机五子棋游戏

    【Python实现的可人机可联机五子棋游戏】是一种用Python编程语言开发的交互式棋类游戏,特别适合初学者和爱好者学习与娱乐。这款游戏不仅提供了与计算机对战的单人模式,还支持玩家间进行在线对弈,极大地增加了游戏...

    基于遗传算法和BP神经网络的多联机阀类故障诊断.pdf

    《基于遗传算法和BP神经网络的多联机阀类故障诊断》 该研究主要探讨了在变制冷剂流量系统(Variable Refrigerant Flow System,简称VRF系统)中,如何通过结合遗传算法(Genetic Algorithm,GA)和反向传播神经网络...

    联机手写字符识别系统的设计与实现

    本文首先阐述了国内外各种主流的字符识别算法原理,随后在综合了各类算法的优缺点之后提出了一种基于调节因子的图像手写字符分割识别算法。该算法首先对待识别的字符图像进行区域分割操作,分割字符区域和背景区域...

    支持AI和联机的俄罗斯方块

    【支持AI和联机的俄罗斯方块】是一个在Shell环境下实现的高级版本的俄罗斯方块游戏,它不仅包含了经典游戏的基本玩法,还引入了人工智能(AI)和在线联机对战的功能,使得游戏体验更加丰富和多元。接下来,我们将...

    Wuziqi.rar_java联机五子棋_五子棋联机JAVA_联机五子棋java

    【标题】"Wuziqi.rar_java联机五子棋_五子棋联机JAVA_联机五子棋java" 指的是一款基于Java语言开发的五子棋游戏,具备在线对战和单人模式的功能。这个项目可能是为了学习和实践Java编程,特别是网络编程和游戏逻辑...

    基于位编码的联机分析处理及数据挖掘算法.pdf

    文档内容讲述了基于位编码的联机分析处理(OLAP)及数据挖掘算法的研究。OLAP技术通常被用于数据仓库和决策支持系统(DSS)中,以实现快速的多维数据分析和查询。数据挖掘则是从大量数据中发现有价值信息的过程,它...

    五子棋游戏 - 联机

    在IT行业中,开发一款联机五子棋游戏涉及到多个关键知识点,这包括但不限于网络编程、游戏逻辑、用户界面设计以及并发处理。以下是对这些知识点的详细说明: 1. **网络编程**:联机游戏的核心是网络通信。开发者...

    迷宫小游戏客户端联机版

    在联机版中,这些算法需要在服务器端和客户端之间进行同步,确保所有玩家看到的迷宫状态一致。 2. **用户界面**:JavaScript结合HTML和CSS创建游戏界面,包括游戏地图、角色动画、提示信息等。使用Canvas或WebGL...

    可联机版数独

    在程序实现中,这通常通过数据结构(如二维数组)来存储当前的游戏状态,并提供一系列的算法来检查填写的合法性。 2. **Java编程语言**:这个数独游戏是用Java编写的,Java是一种广泛使用的面向对象的编程语言,以...

Global site tag (gtag.js) - Google Analytics