数据结构算法复杂度
1、影响算法效率的主要因素
(1)算法采用的策略和方法;
(2)问题的输入规模;
(3)编译器所产生的代码;
(4)计算机执行速度。
2、时间复杂度
?
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
|
// 时间复杂度:2n + 5
long sum1( int n)
{
long ret = 0; \\\\1
int * array = ( int *) malloc (n * sizeof ( int )); \\\\1
int i = 0; \\\\1
for (i=0; i<n; i++) \\\\n
{
array[i] = i + 1;
}
for (i=0; i<n; i++) \\\\n
{
ret += array[i];
}
free (array); \\\\1
return ret; \\\\1
}
\\\\时间复杂度: n + 3
long sum2( int n)
{
long ret = 0; \\\\1
int i = 0; \\\\1
for (i=1; i<=n; i++) \\\\n
{
ret += i;
}
return ret; \\\\1
}
\\\\时间复杂度: 3
long sum3( int n)
{
long ret = 0; \\\\1
if ( n > 0 )
{
ret = (1 + n) * n / 2; \\\\1
}
return ret; \\\\1
}
|
随着问题规模n的增大,它们操作数量的差异会越来越大,因此实际算法在时间效率上的差异也会变得非常明显!
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。
3、空间复杂度
?
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
|
//空间复杂度:12 + n
long sum1( int n)
{
long ret = 0; \\\\4
int * array = ( int *) malloc (n * sizeof ( int )); \\\\4 + 4 * n
int i = 0; \\\\4
for (i=0; i<n; i++)
{
array[i] = i + 1;
}
for (i=0; i<n; i++)
{
ret += array[i];
}
free (array);
return ret;
}
\\\\空间复杂度: 8
long sum2( int n)
{
long ret = 0; \\\\4
int i = 0; \\\\4
for (i=1; i<=n; i++)
{
ret += i;
}
return ret;
}
\\\\空间复杂度: 4
long sum3( int n)
{
long ret = 0; \\\\4
if ( n > 0 )
{
ret = (1 + n) * n / 2;
}
return ret;
}
|
多数情况下,算法执行时所用的时间更令人关注,如果有必要,可以通过增加空间复杂度来降低时间复杂度,同理,也可以通过增加时间复杂度来降低空间复杂度,具体问题,具体分析。
数据结构顺序表
表是具有相同类型的n(n >= 0)个数据元素的有限序列,即:
- 线性表(List)是零个或多个数据元素的集合
- 线性表中的数据元素之间是有顺序的
- 线性表中的数据元素个数是有限的
- 线性表中的数据元素的类型必须相同
?
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
//seq_list.h
#ifndef _SEQ_LIST_H_
#define _SEQ_LIST_H_
struct seq_list
{
int capacity;
int length;
unsigned int *node;
};
struct seq_list* seq_list_create( int capacity);
int seq_list_capacity( struct seq_list* list);
int seq_list_length( struct seq_list* list);
int seq_list_insert( struct seq_list* list, int position, void * data);
void * seq_list_get( struct seq_list* list, int position);
void * seq_list_remove( struct seq_list* list, int position);
void seq_list_clear();
void seq_list_destroy( struct seq_list* list);
#endif
//seq_list.c
#include "seq_list.h"
#include <stddef.h>
#include <malloc.h>
struct seq_list* seq_list_create( int capacity)
{
int i = 0;
struct seq_list* ret = NULL;
if (capacity >= 0)
{
ret = ( struct seq_list*) malloc ( sizeof ( struct seq_list) + sizeof (unsigned int ) * capacity);
if (ret != NULL)
{
ret->capacity = capacity;
ret->length = 0;
ret->node = (unsigned int *) (ret + 1);
}
}
return ret;
}
int seq_list_insert( struct seq_list* list, int position, void * data)
{
int i = 0;
int ret;
ret = (list != NULL);
ret = ret && position >= 0 && position < list->capacity;
ret = ret && list->length < list->capacity;
if (ret)
{
for (i = list->length; i > position; i--)
{
list->node[i] = (list->node[i - 1]);
}
list->node[i] = (unsigned int )data;
double *p = ( double *)data;
list->length++;
}
return ret;
}
void * seq_list_get( struct seq_list* list, int position)
{
void * ret = NULL;
if (list != NULL && position >= 0 && position < list->length)
{
ret = ( void *)list->node[position];
}
return ret;
}
void * seq_list_remove( struct seq_list* list, int position)
{
void * ret = NULL;
int i = 0;
if (list != NULL && position >= 0 && position < list->length)
{
int i = 0;
ret = seq_list_get(list, position);
for (i = position + 1; i < list->length; i++)
{
list->node[i - 1] = list->node[i];
}
list->length--;
}
return ret;
}
int seq_list_capacity( struct seq_list* list)
{
int ret = -1;
if (list != NULL)
{
ret = list->capacity;
}
return ret;
}
int seq_list_length( struct seq_list* list)
{
int ret = -1;
if (list != NULL)
{
ret = list->length;
}
return ret;
}
void seq_list_clear( struct seq_list* list)
{
if (list != NULL)
{
list->length = 0;
}
}
void seq_list_destroy( struct seq_list* list)
{
free (list);
list = NULL;
}
//seq_list_main.c
#include <stdio.h>
#include "seq_list.h"
int main( void )
{
struct seq_list* list = seq_list_create(100);
double *p = NULL;
int ret = 0;
double a = 1.1;
double b = 2.2;
double c = 3.3;
double d = 4.4;
double e = 5.5;
seq_list_insert(list, 0, &a);
seq_list_insert(list, 1, &b);
seq_list_insert(list, 2, &c);
seq_list_insert(list, 3, &d);
seq_list_insert(list, 4, &e);
printf ( "list capacity = %d, length = %d\\n" , seq_list_capacity(list), seq_list_length(list));
p = ( double *)seq_list_get(list, 0);
if (p != NULL)
{
printf ( "%lf\\n" , *p);
}
p = ( double *)seq_list_get(list, 3);
if (p != NULL)
{
printf ( "%lf\\n" , *p);
}
p = ( double *)seq_list_remove(list, 3);
if (p != NULL)
{
printf ( "remove data %lf, index at 3 , after length: %d\\n" , *p, seq_list_length(list));
}
p = ( double *)seq_list_get(list, 3);
if (p != NULL)
{
printf ( "after remove, index at 3: %lf\\n" , *p);
}
seq_list_clear(list);
printf ( "after clear, list length is %d\\n" , seq_list_length(list));
seq_list_destroy(list);
return 0;
}
|
相关文章
猜你喜欢
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-29 94
-
2025-05-26 75
-
2025-05-26 42
-
2025-05-29 13
-
2025-05-29 78
热门评论