广而告知: 博客写得好,Emoji要选好!!🎵 🎶 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢
写博客是知识是巩固和温习,所以在这个信息爆炸的时代,每个人每天都要接收很多讯息,你的记忆是有限的,知识也是有限的,时间也是有限的,既然如此,那是时候磨亮我的五十米大刀了。 你很强,上天揽月你不行,你很强,下海捞鱼总行吧!
💀☠💩🤡👹👺👻👽👾🤖 -->渴望知识!!!
目录
典型例子1:二分查找
二分查找定义:(Binary-Search)
二分查找又叫做折半查找,最大三大优点:比较次数少,查找速度块,占用内存少。
并且二分查找,被称之为运算最快的查找方式。
但是二分查找的缺点也是很明显:数据必须有序,并且插入删除困难。
普及一下:时间复杂度其实等效于while(N--),当N=0的时候while不为真就退出时执行的次数是N次,那个时间复杂度就是O(N);
那么我们来计算一下在N个数里面查找需要多少次:
N,N/2,N/4...N/2^K
那么最坏情况是查找了多少次呢?也就是除了2的次数。
假设查找次数是X次
N=2^X
X=logN(以2为底,N的对数)
N=a^X-->如果a的x次方等于N(a>0,且a≠1),那么数x叫做以a为底N的对数(logarithm),记作x=loga N。其中,a叫做对数的底数,N叫做真数
因此二分查找的时间复杂度是:O(logN)
举例:
假设N=1000,里面找一个数A
x=logN=log(2)2^10 也就是X约等于10,如果在1000个数里面找到A只需要10次
假设N=1000 000,里面找一个数A
x=logN=log(2)2^20 也就是X约等于20,如果在1000个数里面找到A只需要20次
假设N=1000 000 000,里面找一个数A
x=logN=log(2)2^30 也就是X约等于30,如果在1000个数里面找到A只需要30次
#include <stdio.h>
#include <assert.h>
int BinarySearch(int* arr, int n, int x)
{
assert(arr != NULL);
int start = 0;
int end = n - 1;
while (start <= end)
{
int mid = start + ((end - start) >> 1);
if (arr[mid] < x)
start = mid + 1;
else if (arr[mid] > x)
end = mid - 1;
else
return mid;
}
return -1;
}
int main()
{
int n = 10000;
int arr[10000] = { 0 };
int x = 8000;
int count = 0;
for (int i = 0; i < 10000; i++)
{
arr[i] = i;
}
count = BinarySearch(arr, n, x);
printf("%d\n", count);
return 0;
}
典型例子2:阶乘
阶乘时间复杂度是O(N)
Fac(N)
Fac(N-1)
Fac(N-2)
...
Fac(1)
Fac(0)
#include <stdio.h>
long long Fac(size_t num)
{
if (0 == num)
return 1;
return Fac(num - 1) * num;
}
int main()
{
int num = 10;
int count = 0;
count = Fac(num);
printf("%d\n", count);
return 0;
}
典型例子3:斐波那契数列
斐波那契数列的时间复杂度O(2^N)
第三项是前两项的和
2^0+2^1+a^2 ...=1+2+4
可以用以下的画图方式来解释数列:
Fib(N)=2^(n-2) +2^(n-3) +2^(n-4) +...+2^2 +2^1 +2^0 公式1
公式1 乘以2 等于
2*Fib(N)= 2^(n-1) +2^(n-2) +2^(n-3) +...+2^3 +2^2 +2^1 公式2
将公式1减去公式1,
Fib(N)=2^(n-1)-2^0 公式3
#include <stdio.h>
int Fib(int num)
{
while (num < 3)
{
return 1;
}
return Fib(num - 1) + Fib(num - 2);
}
int main()
{
int num = 30;
int count = 0;
count = Fib(num);
printf("%d\n", count);
return 0;
}
最后,请各位发财的金手指,帮忙点点赞和关注!
💁♂️💁♀️🙋🙋♂️🙋♀️🧏🧏♂️一赞三连🧏♀️🙇🙇♂️🙇♀️🤦🤦♂️🤦♀️🤷🤷♂️🤷♀️
💁♂️💁♀️🙋🙋♂️🙋♀️🧏🧏♂️一赞三连🧏♀️🙇🙇♂️🙇♀️🤦🤦♂️🤦♀️🤷🤷♂️🤷♀️
💁♂️💁♀️🙋🙋♂️🙋♀️🧏🧏♂️一赞三连🧏♀️🙇🙇♂️🙇♀️🤦🤦♂️🤦♀️🤷🤷♂️🤷♀️