一、联机算法

1、定义

也叫在线算法,在算法执行过程中的任意时刻,只对要操作的数据进行一次扫描,扫描完成后便此后不再对已经操作过的数据进行保存和记忆。

这种算法有种特点:如果数据是储存在磁盘或者磁带上,便可以顺序地读取,无需在主存中储存数据的任何部分。

2、举例

在处理最大子序和的问题中,存在一种联机算法,具体实现如下(基于C):

  1. 1 int MaxSubsequenceSum(const int A[ ], int N) {
  2. 2 int TempSum, MaxSum;
  3. 3
  4. 4 TempSum = MaxSum = 0;
  5. 5 for (int i = 0; i < N; i++) {
  6. 6 TempSum += A[i];
  7. 7
  8. 8 if (TempSum > MaxSum) {
  9. 9 MaxSum = TempSum;
  10. 10 }
  11. 11 else if (TempSum < 0) {
  12. 12 TempSum = 0;
  13. 13 }
  14. 14 }
  15. 15
  16. 16 return MaxSum;
  17. 17 }
 

可见,该算法的在执行过程中只对序列进行一次扫描,并且无需记忆已经操作过的数据,这就是联机算法,它对已经读入的数据,当即就可以给出最大子序和。

此外可以注意到,该算法的时间复杂度为​,空间复杂度为​,即线性时间常量空间,满足这一条件的联机算法几乎可以认为是完美的算法。

二、脱机算法

1、定义

也叫离线算法,在算法执行前所有的输入数据已知,换句话说,对于一个离线算法,在开始时就需要知道问题的所有输入数据,和需要进行的所有操作,而且在解决一个问题后就要立即输出结果。

2、举例

同样是序列最大子序和的问题,如下采用的算法便是脱机算法,具体实现(基于C):

  1. 1 int MaxSubsquenceSum(const int A[], int N) {
  2. 2 int TempSum, MaxSum;
  3. 3
  4. 4 MaxSum = 0;
  5. 5 for (int i = 0; i < N; i++) {
  6. 6 TempSum = 0;
  7. 7 for (int j = 0; j < N; j++) {
  8. 8 TempSum = A[j];
  9. 9
  10. 10 if (TempSum > MaxSum) {
  11. 11 MaxSum = TempSum;
  12. 12 }
  13. 13 }
  14. 14 }
  15. 15
  16. 16 return MaxSum;
  17. 17 }

可以看出,在算法执行过程中,需要不止一次地对数据进行扫描,虽然就空间复杂度而言,依然是​,但其需要对数据进行记忆 ,需要把全部数据读入主存中。此外,算法的时间复杂度为​,相较于上文中的联机算法就稍逊一筹。

三、理解

由于对数据的处理方式不同,联机算法在结果的产生上便形成了较为明显的区别:

对联机算法而言,中途每一次读入数据产生的结果都是满足要求的结果,其结果的产生是基于对当前及过去的所有输入,可以理解为:“热炒热卖”、“炒多少,卖多少,炒好一盘上一盘”,相当于炒菜,这也正和“在线算法”中“在线”的意义不谋而合。

而脱机算法则是利用所有的数据参与计算,最终得到一个结果,其时间复杂度是非线性的,需要对数据多次扫描,无法像联机算法一样顺序读入并出结果,可以理解为:“菜全部做好了再开始营业”,相当于自助餐厅,Ready。

联机算法和脱机算法[Alg_001]的更多相关文章

  1. 算法:KMP算法

    算法:KMP排序 算法分析 KMP算法是一种快速的模式匹配算法.KMP是三位大师:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的,所以取首字母组成KMP. 少部分图片来自孤~影 ...

  2. BF算法与KMP算法

    BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的 ...

  3. Levenshtein Distance算法(编辑距离算法)

    编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符, ...

  4. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  5. ISAP算法对 Dinic算法的改进

    ISAP算法对 Dinic算法的改进: 在刘汝佳图论的开头引言里面,就指出了,算法的本身细节优化,是比较复杂的,这些高质量的图论算法是无数优秀算法设计师的智慧结晶. 如果一时半会理解不清楚,也是正常的 ...

  6. 文本比较算法Ⅱ——Needleman/Wunsch算法

    在"文本比较算法Ⅰ--LD算法"中介绍了基于编辑距离的文本比较算法--LD算法. 本文介绍基于最长公共子串的文本比较算法--Needleman/Wunsch算法. 还是以实例说明: ...

  7. 文本比较算法三——SUNDAY 算法

    SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上 ...

  8. [算法]检测空间三角形相交算法(Devillers & Guigue算法)

    #pragma once //GYDevillersTriangle.h /* 快速检测空间三角形相交算法的代码实现(Devillers & Guigue算法) 博客原地址:http://bl ...

  9. 最短路径算法之Dijkstra算法(java实现)

    前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...

随机推荐

  1. tp5.0使用JWT完成token认证技术

    1.安装 composer require firebase/php-jwt 2.封装(在框架根目录extend下新建Token.php) 复制代码 <?php use Firebase\JWT ...

  2. PHP实现二维数组(或多维数组)转换成一维数组

    1 array_reduce函数法 用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value ...

  3. 关于malloc源码中的bin_at宏定义的个人见解

    0x01:简介 在堆中的内存申请和释放中,为了减少使用系统调用函数对内存操作,malloc_state(分配区)结构中使用了fastbinsY数组和bins数组.当chunk被free后,bins链会 ...

  4. 关于DP动规

    今天学了动规,简单记录一下自己理解了的:(要不俺就忘了) 首先,啥是DP??? 动态规划,其实就是组合子问题的解来解决整个问题的解,由于每个子问题他只判断一次,所以不会重复计算,那就很牛啊!!! 专业 ...

  5. XSS 32个触发事件

    标签: 1.onmouseenter:当鼠标进入选区执行代码 <div style="background-color:red" onmouseenter="ale ...

  6. MySQL — 数据查询语言

    目录 1.基础查询 2.条件查询 3.分组查询 4.排序查询 5.分页查询 6.多表查询 6.1.连接查询 6.1.1.内连接 6.1.2.外连接 6.1.3.自连接 6.1.4.联合查询 6.2.子 ...

  7. XStream类的对象将javaBean转成XML

    [省市联动] servlet端: //返回数据xml(XStream) XStream xStream = new XStream(); //把路径设置别名 xStream.alias("c ...

  8. XML技术的作用?

    XML技术用于数据存储.信息配置.数据交换三方面. 可以将数据存储在XML中,通过节点.元素内容.属性标示数据内容及关系. 可以使用XML很方便的做信息配置,软件的各种配置参数和对象关系都存贮在XML ...

  9. JDBC 能否处理 Blob 和 Clob?

    Blob 是指二进制大对象(Binary Large Object),而 Clob 是指大字符对象 (Character Large Objec),因此其中 Blob 是为存储大的二进制数据而设计的, ...

  10. 比较一下 Java 和 JavaSciprt?

    JavaScript 与 Java 是两个公司开发的不同的两个产品.Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联网应用程序 开发:而 JavaSc ...