算法概述

概述

  • 计算 = 信息处理
    借助某种工具,遵照一定规则,以明确而机械的形式进行。
  • 计算模型 = 计算机 = 信息处理工具
  • 算法,即特定计算模型下,旨在解决待定问题的指令序列
    • 输入:待处理的信息(问题)
    • 输出:经处理的信息(答案)
    • 正确性:可以解决指定的问题
    • 确定性:任一算法都可以描述为一个由基本操作组成的序列
    • 可行性:每一基本操作都可实现,且在常数时间内完成
    • 有穷性:对于任何输入,经有穷次操作,都可以得到输出

算法:有穷性

  • 序列 H a i l s t o n e ( n ) = { { 1 } n ≤ 1 { n } ⋃ H a i l s t o n e ( n / 2 ) n 偶 { n } ⋃ H a i l s t o n e ( 3 n + 1 ) n 奇 Hailstone(n) = \begin{cases} \qquad \qquad\{1\} & &n \leq 1 \\ \{n\} \bigcup Hailstone(n/2) & & n偶 \\ \{n\} \bigcup Hailstone(3n + 1) & & n奇 \end{cases} Hailstone(n)={1}{n}Hailstone(n/2){n}Hailstone(3n+1)n1nn
  • H a i l s t o n e ( 42 ) = { 42 , 21 , 64 , 32 , . . . , 1 } Hailstone(42) = \{ \quad 42, \quad 21, \quad 64, \quad 32, \quad..., \quad1 \quad \} Hailstone(42)={42,21,64,32,...,1}
    int hailstone(int n) { // 计算序列Hailstone(n)的长度
    	int length = 1;		// 从1开始,以下按定义逐步递推,并累计步数,直至n = 1
    	while (1 < n) {
    		(n % 2) ? n = 3 * n + 1 : n /= 2;
    		length++;
    	}
    	return length;	// 返回 |Hailstone(n)|
    }
    
  • H a i l s t o n e ( 7 ) = { 7 , 22 , 11 , 34 , 17 , 52 , 26 , 13 , 40 , 20 , 10 , 5 , 16 , . . . , 1 } Hailstone(7) = \{ \quad 7, \quad 22, \quad 11, \quad 34, \quad 17, \quad 52, \quad 26, \quad 13, \quad 40, \quad 20, \quad 10, \quad 5, \quad 16, \quad ..., \quad 1 \quad\} Hailstone(7)={7,22,11,34,17,52,26,13,40,20,10,5,16,...,1}
    H a i l s t o n e ( 27 ) = { 27 , 82 , 41 , 124 , 62 , 31 , 94 , 47 , 142 , 71 , 214 , 107 , . . . } Hailstone(27) = \{ \quad 27, \quad 82, \quad 41, \quad 124, \quad 62, \quad 31, \quad 94, \quad 47, \quad 142, \quad 71, \quad 214, \quad 107, \quad ... \quad \} Hailstone(27)={27,82,41,124,62,31,94,47,142,71,214,107,...}
  • 对于任一的 n n n,总有 ∣ H a i l s t o n e ( n ) ∣ < ∞ |Hailstone(n)| < \infty Hailstone(n)<?

程序未必是算法

  • 好算法:
    • 正确:符合语法,能够编译、链接
      • 能够正确处理简单的输入
      • 能够正确处理大规模的输入
      • 能够正确处理一般性的输入
      • 能够正确处理退化的输入
      • 能够正确处理任意合法的输入
    • 健壮:能辨别不合法的输入并做适当处理,而不致非正常退出
    • 可读:结构化 + 准确命名 + 注释 + …
    • 效率:速度尽可能快;存储空间尽可能少
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值