算法基础1:复杂度和简单算法

2024-03-01 1428阅读

温馨提示:这篇文章已超过398天没有更新,请注意相关的内容是否还可用!

目录

一.时间复杂度

1.概述

2.时间复杂度表达

3.简便计算时间复杂度

4.注意事项

二.简单算法

1.异或运算

(1)交换操作

(2)异或算法应用1

(3)异或算法应用2

2.插入排序

3.二分法

4.对数器

三.空间复杂度

1.概念

2.空间复杂度计算和表示

(1)计算步骤:

(2)空间复杂度的表示

3.示例代码

(1)空间复杂度O(1)

(2)空间复杂度O(n)


一.时间复杂度

1.概述

        一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。

        时间复杂度为一个算法流程中,常数操作数量的一个指标。常用0(读作big 0)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为f(N),那么时间复杂度为0(f(N))。

       时间复杂度表示某个算法运行时间的趋势,可以大致评判程序的效率。 评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是“常数项时间”。

2.时间复杂度表达

        列出需要执行程序的次数,写成T(N)=aN²+bN+C的形式。此时,以存在的最高次项作为时间复杂度,因为N趋于无穷时,只有最高次项对结果的影响大。

例如:列出式子为aN³+bN+C,时间复杂度即为O(N³)。

具体的高阶低阶排行如下图:

算法基础1:复杂度和简单算法

  如果阶数指标相同,无法通过常数项比较时间复杂度,只能通过实际跑代码区分。

3.简便计算时间复杂度

        一般来说,最内层执行次数最多的语句就决定了整个算法的趋势,通常看最内层语句执行次数的规律即可。

4.注意事项

对于任何算法流程,估计时间复杂度O时,按照最差情况估计。

二.简单算法

1.异或运算

(1)交换操作

此时a和b必须拥有不相同的内存空间,因为同样的内存区域跟自己异或,会直接变成0。

void swap(int,a, int b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

(2)异或算法应用1

问题:一个数组中,只有1个数出现奇数次,其他数均出现偶数次。求出现奇数次的这个数。

解法:定义一个eor = 0,将数组中所有数与其异或,异或出的eor即为解。因为异或运算同一批数,不管顺序如何,异或结果一样。所以等同于偶数次的数先异或。

原理:异或的交换律。

#include
#include
#include
using namespace std;
void solve(int num[]);
int main() {
	//算法问题1:问题:一个数组中,只有1个数出现奇数次,其他数均出现偶数次。求出现奇数次的这个数
	//解法:定义一个eor = 0,将数组中所有数与其异或,异或出的eor即为解。
	int nums[] = { 1,2,1,2,1,3,2,1,2,3,3 };
	solve(nums);
	system("pause");
	return 0;
}
void solve(int num[]) {
	int eor = 0;
	int len = sizeof(num) / sizeof(num[0]);
	for (int i = 0; i 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]