78
信信信信信信信信信 信信信信信信信 信信信

信息学竞赛入门指导

Embed Size (px)

DESCRIPTION

信息学竞赛入门指导. 哈尔滨工业大学 周谷越. 目录. 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题. 目录. 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题. 信息学竞赛概述. 信息化时代 信息学竞赛 信息学奥林匹克竞赛( OI ) 大学生程序设计竞赛( ICPC ). 信息学奥林匹克竞赛. - PowerPoint PPT Presentation

Citation preview

Page 1: 信息学竞赛入门指导

信息学竞赛入门指导

哈尔滨工业大学 周谷越

Page 2: 信息学竞赛入门指导

目录 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题

Page 3: 信息学竞赛入门指导

目录 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题

Page 4: 信息学竞赛入门指导

信息学竞赛概述 信息化时代

信息学竞赛信息学奥林匹克竞赛( OI )大学生程序设计竞赛( ICPC )

Page 5: 信息学竞赛入门指导

信息学奥林匹克竞赛 信息学奥林匹克竞赛是一项旨在推动计算

机普及的学科竞赛活动

重在培养学生能力 使得有潜质有才华的学生在竞赛活动中锻炼和发展

Page 6: 信息学竞赛入门指导

两个误区 误区 1

信息学竞赛 = “ 计算机”竞赛

误区 2信息学竞赛 = “ 编程”竞赛

Page 7: 信息学竞赛入门指导

信息学奥林匹克竞赛 考查选手以编程语言为工具来解决从具体

问题中抽象出来的数学模型的能力

几个重要概念编程语言(工具)数据结构(理论性工具)算法(理论)

Page 8: 信息学竞赛入门指导

目录 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题

Page 9: 信息学竞赛入门指导

集成开发环境( IDE ) Pascal 语言

Free PascalLazarus

C/C++ 语言DJGPPDev C/C++

Page 10: 信息学竞赛入门指导

IDE 的使用( Free Pascal ) 编译

编译( compile ) alt + F9 生成( make ) F9 运行( run ) ctrl + F9 显示( user screen ) alt + F5

调试 断点( break point ) ctrl + F8 运行( go to cursor ) F4 单步( trace into / step over ) F7 / F8 查看( add watch ) ctrl + F7

Page 11: 信息学竞赛入门指导

Pascal 语言的输入输出 read

形式: read (f, var 表 );功能:从磁盘文件 f 中将数据依次读到 var 表

表示的各个变量中 write

形式: write (f, var 表 );功能:将 var 表所表示的各个变量的值依次写

到磁盘文件 f 上

Page 12: 信息学竞赛入门指导

Pascal 语言的输入输出 readln

形式: read (f, var 表 );功能:从磁盘文件 f 中将数据依次读到 var 表

表示的各变量中 并将文件指针移到行结束符后 writeln

形式: write (f, var 表 );功能:将 var 表所表示的各个变量的值依次写

到磁盘文件 f 上 然后再写一个行结束符

Page 13: 信息学竞赛入门指导

Pascal 语言的输入输出 assign

形式: assign (f, str);功能:将文件名字符串 str 赋给文件变量 f

close形式: close (f);功能:关闭和 f 关联的磁盘文件 在写操作时自

动产生一个文件结束标志

Page 14: 信息学竞赛入门指导

Pascal 语言的输入输出 reset

形式: reset (f);功能:打开一个已经存在的磁盘文件 其文件名

必须先由 assign 过程赋给变量 f 该文件只能读 rewrite

形式: rewrite (f);功能:建立并打开一个新的允许写磁盘文件 其

文件名必须先由 assign 过程赋给变量 f

Page 15: 信息学竞赛入门指导

问题 1

创建一个 A.pas 从 A.in 中读入两个正整数 x 和 y 向 A.out 中打印一个正整数 x+y

Page 16: 信息学竞赛入门指导

var x, y: integer;begin assign (input, 'A.in'); reset (input); assign (output, 'A.out'); rewrite (output); readln (x, y); writeln (x + y); close (input); close (output);end.

Page 17: 信息学竞赛入门指导

问题 2

创建一个 B.pas 从 B.in 中读入一个不超过 100 的正整数 n

和 n 个不超过 100 的正整数 ai 向 B.out 中打印一个正整数 即输入的 n+1

个数中最大的数

Page 18: 信息学竞赛入门指导

var i, n, t, max: integer;begin assign (input, 'B.in'); reset (input); assign (output, 'B.out'); rewrite (output); read (n); max := n; for i := 1 to n do begin read (t); if t >= max then max := t; end; writeln (max); close (input); close (output);end.

Page 19: 信息学竞赛入门指导

目录 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题

Page 20: 信息学竞赛入门指导

栈 栈是限定只在表尾进行插入和删除操作的线

性表 因此栈又称为后进先出 (Last In First Out ) 的线性表 简称 LIFO 结构

a1 a2 a3 … an-1 an

栈底 栈顶

Page 21: 信息学竞赛入门指导

栈的基本操作 清空( Clear ) 栈顶元素( Top ) 删除( Pop ) 插入( Push ) 判断是否为空( Empty )

Page 22: 信息学竞赛入门指导

栈的数组实现var stack: array[1..101] of integer; top: integer;

procedure clear;begin top := 0;end;

function empty : boolean;begin empty := (top = 0);end;

procedure push (x: integer);begin inc (top); stack[top] := x;end;

procedure pop;begin dec (top);end;

function gettop: integer;begin

gettop := stack[top];end;

Page 23: 信息学竞赛入门指导

表达式求值 表达式

1 + 2 + 3 = 61 + 2 * 3 = 7(1 + 2) * 3 = 9

表示方法前缀 / 中缀 / 后缀

Page 24: 信息学竞赛入门指导

后缀表达式 在后缀表达式中变量(操作数)出现的顺

序与中缀表达式顺序相同 后缀表达式中不需要优先级来定义计算顺

序 而由运算(操作符)的位置来确定运算顺序

Page 25: 信息学竞赛入门指导

中缀表达式转后缀表达式 1+2+3 -> 12+3+ 1+2*3 -> 123*+ (1+2)*3 -> 12+3*

后缀表达式根据运算出现的先后顺序进行计算 运算将找到其前面连续的两个变量进行计算 经过计算得到一个新的变量

Page 26: 信息学竞赛入门指导

问题 3

将下列中缀表达式转换成后缀表达式 并把结果在 C.pas 中打印到 C.out 中

1+(2+3)*4-5*6+7 ((1+2*3)-4)*5+6*7 (1+2)*(3-4*(5*6+7))

Page 27: 信息学竞赛入门指导

问题 4

将下列后缀表达式的结果在 D.pas 中打印到 D.out 中

123+4*+56*-7+ 123*+4-5*67*+ 12+3456*7+*-*

Page 28: 信息学竞赛入门指导

中缀表达式转后缀表达式 运算优先级

括号乘除加减

以 ((1+2*3)-4)*5+6*7 为例

Page 29: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

(

变量

运算

Page 30: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

变量

运算 ( (

Page 31: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

1变量

运算 ( (

Page 32: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

1变量

运算 ( ( +

Page 33: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

1 2变量

运算 ( ( +

Page 34: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

1 2变量

运算 ( ( + *

Page 35: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

1 2 3变量

运算 ( ( + *

Page 36: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

1 6变量

运算 ( ( +

Page 37: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

7变量

运算 (

Page 38: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

7变量

运算 ( -

Page 39: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

7 4变量

运算 ( -

Page 40: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

3变量

运算

Page 41: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

3变量

运算 *

Page 42: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

3 5变量

运算 *

Page 43: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

15变量

运算 +

Page 44: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

15 6变量

运算 +

Page 45: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

15 6变量

运算 + *

Page 46: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

15 6 7变量

运算 + *

Page 47: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

15 42变量

运算 +

Page 48: 信息学竞赛入门指导

中缀表达式转后缀表达式 ((1+2*3)-4)*5+6*7

57变量

运算

Page 49: 信息学竞赛入门指导

目录 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题

Page 50: 信息学竞赛入门指导

时间复杂度 算法基本操作数随输入规模的增长所体现

出的函数关系

常见时间复杂度O(c) O(n) O(nx)O(logn) O(nlogn) O(nxlogn)O(n!) O(nx)

Page 51: 信息学竞赛入门指导

排序对于 n 个数字 将它们由大到小地排成一列

排序算法O(n2) :冒泡排序 选择排序 插入排序O(nlogn) :归并排序 快速排序 堆排序O(n) :桶排序 基数排序

Page 52: 信息学竞赛入门指导

冒泡排序 将 n 个数字看作重量不同的气泡 重量最轻的气泡会浮到最上方 冒泡排序每次都会选出重量最轻的气泡 再对剩余的元素进行冒泡排序

Page 53: 信息学竞赛入门指导

冒泡排序实例

6

5

3

1

4

8

9

2

初始队列

Page 54: 信息学竞赛入门指导

冒泡排序实例

6

5

3

1

4

8

9

2

第一轮冒泡排序

6

5

3

1

4

8

2

9

6

5

3

1

4

2

8

9

6

5

3

1

2

4

8

9

6

5

3

1

2

4

8

9

6

5

1

3

2

4

8

9

6

1

5

3

2

4

8

9

1

6

5

3

2

4

8

9

1

6

5

3

2

4

8

9

Page 55: 信息学竞赛入门指导

冒泡排序实例第二轮冒泡排序

1

6

5

3

2

4

8

9

1

6

5

3

2

4

8

9

1

6

5

3

2

4

8

9

1

6

5

3

2

4

8

9

1

6

5

2

3

4

8

9

1

6

2

5

3

4

8

9

1

2

6

5

3

4

8

9

1

2

6

5

3

4

8

9

Page 56: 信息学竞赛入门指导

冒泡排序实例第三轮冒泡排序

1

2

6

5

3

4

8

9

1

2

6

5

3

4

8

9

1

2

6

5

3

4

8

9

1

2

6

5

3

4

8

9

1

2

6

3

5

4

8

9

1

2

3

6

5

4

8

9

1

2

3

6

5

4

8

9

Page 57: 信息学竞赛入门指导

冒泡排序实现for i := n downto 1 do

for j := 1 to i - 1 doif f[j] < f[j + 1] then

begint := f[j + 1];f[j + 1] := f[j];f[j] := t;

end;

Page 58: 信息学竞赛入门指导

目录 信息学竞赛概述 编程实例 —— 找出最大的数 数据结构实例 —— 表达式求值 算法实例 —— 冒泡排序 算法实例 —— 0-1 背包问题

Page 59: 信息学竞赛入门指导

0-1 背包问题 给定 n种物品和一背包 物品 i 的重量是 wi

其价值为 vi 背包的容量为 c 问应如何选择装入背包中的物品 使得装入背包中物品的总价值最大

Page 60: 信息学竞赛入门指导

枚举 每种物品 2种可能(取与不取) 前 4种物品列表如下:

背包容量: 10

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v取 1 w=3 v=4 取 2 4 w=5 v=6取 2 w=1 v=2 取 3 4 w=6 v=7取 3 w=2 v=3 取 1 2 3 w=6 v=9取 4 w=4 v=4 取 1 3 4 w=9 v=11取 1 2 w=4 v=6 取 1 2 4 w=8 v=10取 1 3 w=5 v=7 取 2 3 4 w=7 v=9取 1 4 w=7 v=8 取 1 2 3

4w=10 v=13

取 2 3 w=3 v=5 取空 w=0 v=0

Page 61: 信息学竞赛入门指导

动态规划 设 f[i,j] 表示前 i种物品中取重量为 j 的物品可以获得的最大价值

f[i,j] = max (f[i-1,j], f[i-1,j-w[i]]+v[i])

所求答案: max {f[n,k]}, k = 0..c 时间复杂度: O(nc)

Page 62: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 - - - - - - - - - -

0 0 - - - - - - - - -

2 - - - - - - - - - -

3 - - - - - - - - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 63: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 - - - - - - - - - -

3 - - - - - - - - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 64: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - - - - - - - -

3 - - - - - - - - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 65: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 - - - - - - - - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 66: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 - 3 - - - - - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 67: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 - - - - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 68: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 - 7 - - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 69: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 - - - - - - - - - -

10

-

-

-

-

-

Page 70: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 - - - 4 - - - - -

10

-

-

-

-

-

Page 71: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 2 - - 4 6 - - - -

10

-

-

-

-

-

Page 72: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 2 3 - 4 6 7 - - -

10

-

-

-

-

-

Page 73: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 2 3 5 4 6 7 9 - -

10

-

-

-

-

-

Page 74: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 2 3 5 6 6 7 9 10 -

10

-

-

-

-

-

Page 75: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 2 3 5 6 7 7 9 10 11

10

-

-

-

-

-

Page 76: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 2 3 5 6 7 9 9 10 11

10

-

-

-

-

13

Page 77: 信息学竞赛入门指导

前 4种物品的状态

f

3 4

1 2

2 3

4 4

3 4

2 5

3 5

3 2

w v0 1 2 3 4 5 6 7 8 9

1 0 - - 4 - - - - - -

0 0 - - - - - - - - -

2 0 2 - 4 6 - - - - -

3 0 2 3 5 6 7 9 - - -

4 0 2 3 5 6 7 9 9 10 11

10

-

-

-

-

13

Page 78: 信息学竞赛入门指导

我的联系方式 手机(哈尔滨): 13654583893 E-Mail : [email protected] QQ : 281470414 MSN : [email protected]

谢谢