只要你是一名程序员,或准程序员,那么不可或缺的都得学习一样能让你的代码像某二仙桥大爷骑了小电驴一样快,而且还贼TM牛逼的东西——
算法
现在的算法,主要有以下五种:
递归!
分治!
二分!
动态规划!
贪心!
我愿称之为:计算机界的五常祖宗,因为几乎所有的算法都是由这五种算法演化或组合而来的。
算法,为什么叫做算法,就是因为它是能让计算机的计算量减少,效率能够提高,短短几句代码,可能也会发生时间复杂度急剧减小
下面是在长度为 n 的数组中普通搜索与二分搜索的时间复杂度与代码的比较:
const int N = 1e8 + 10;
int a[N];
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
// 普通搜索
/*
int flag = 0;
for (int i = 1; i <= n; i++) {
if (a[i] == m) {
printf("%d", i);
flag = 1;
break;
}
}
if (flag == 0) {
printf("-1");
}
*/
// 时间复杂度为O(n)
// 二分搜索
int l = 1;
int r = n;
int mid;
int ret = -1;
while (l <= r) {
mid = (l + r) / 2;
if (a[mid] == m) {
ret = mid;
break;
} else if (a[mid] < m) {
l = mid + 1;
} else {
r = mid - 1;
}
}
printf("%d", ret);
// 时间复杂度为O(log n)
其实吧,算法简介是真的没什么可以写的,那我总不能写小说写了个预告不写内容吧
好了,下课!
下一节课还是算法课,我们来学递归!
PS:看在我这么努力的份上,给个三连吧!!!