提高机器运行速度的技巧

很多人误以为宏是在程序运行时被替换的,所会定义宏会浪费运行时间。其实宏时在编译时被替换的,不会占用运行时间。定义宏是有很多好处的,在此我就不细说了。

函数调用很占用运行时间,如果在一段程序中有一个函数被频繁的调用,可以将其直接写在上层函数中(单单从考虑运行时间的角度,不仅比写成函数的形式要好,而且好很多,即使函数是内敛的,也不如直接写进上层函数好)。

当大家所要编写的程序对运行时间要求比较高的时候,博主在这里给的建议是:

1、不要害怕使用用宏,宏对运行时间没有影响

2、反复使用的语句可以先写成函数,在数据测试成功之后,将这些函数写进上层函数中

e.g.

此段程序在某个测试数据环境下,如果使用内敛函数,运行时间为1000ms+;如果直接把比较写进上层函数,则运行时间为795ms

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//Title: test code
//Author: Call偶围城
//Date: 2013-12-23
#include <stdio.h>
#define DOG 'S'
#define WALL 'X'
#define DOOR 'D'
#define EMPTY '.'
#define YES 1
#define NO 0
#define VISITED 1
#define UNVISITED 0
#define MAX 10
int n,m,t;
char maze[MAX][MAX];
int vis[MAX][MAX];
int res;
void Init() {
int i,j;
for (i = 0;i < MAX;i++)
for (j = 0;j < MAX;j++)
vis[i][j] = UNVISITED;
return;
}
//inline bool IsInMaze(int i,int j) {
// if (1 <= i && i <= n
// && 1 <= j && j <= m
// && vis[i][j] == UNVISITED)
// return true;
// else false;
//}
void Visit(int i,int j,int deep) {
if (deep > t || res == YES) return;
if (deep == t && maze[i][j] == DOOR) {
res = YES;
return;
}
if (maze[i][j] == EMPTY || maze[i][j] == DOG) {
vis[i][j] = VISITED;
// if (IsInMaze(i+1,j)) Visit(i+1,j,deep+1);
// if (IsInMaze(i-1,j)) Visit(i-1,j,deep+1);
// if (IsInMaze(i,j+1)) Visit(i,j+1,deep+1);
// if (IsInMaze(i,j-1)) Visit(i,j-1,deep+1);
if (i+1 <= n && vis[i+1][j] == 0) Visit(i+1,j,deep+1);
if (1 <= i-1 && vis[i-1][j] == 0) Visit(i-1,j,deep+1);
if (j+1 <= m && vis[i][j+1] == 0) Visit(i,j+1,deep+1);
if (1 <= j-1 && vis[i][j-1] == 0) Visit(i,j-1,deep+1);
vis[i][j] = UNVISITED;
}
return;
}
int main() {
int i,j,k;
int S_i,S_j;
while (scanf("%d%d%d",&n,&m,&t) != EOF && (n||m||t)) {
for (i = 1;i <= n;i++) {
for (j = 1;j <= m;j++) {
while (scanf("%c",&maze[i][j])
&& maze[i][j] != DOG
&& maze[i][j] != WALL
&& maze[i][j] != DOOR
&& maze[i][j] != EMPTY);
if (maze[i][j] == DOG) {
S_i = i;
S_j = j;
}
}
}
res = NO;
Init();
Visit(S_i,S_j,0);
if (res == YES) printf("YES\n");
else printf("NO\n");
}
return 0;
}

HDU-1010