时间复杂度与空间复杂度

时间复杂度

在这里插入图片描述
看一下每个的例子

log N

在这里插入图片描述

nlogN

在这里插入图片描述

n^2

在这里插入图片描述
在这里插入图片描述

空间复杂度

在这里插入图片描述
在这里插入图片描述

几个算法

辗转相除法

具体过程:输入两个数,取出较大的一个记作m,小的记作n,然后取余得到r,将n赋给m,r赋给n,在做运算直到n为零

#pragma once
#include<iostream>
using namespace std;
class ZXC
{public:

	bool execute(int m, int n);
};

//cpp文件
#include"zxc.h"
bool
ZXC::execute(int m, int n)
{
	int r = 0;
	if (m < n)
	{//如果m比n小就交换
		m = m + n;
		n = m - n;
		m = m - n;
	}
	while (n != 0)
	{
		r = m % n;
		m = n;
		n = r;
	}
	cout<<"最大公因数是"<<m<<endl;
	return 1;
}

这个时间复杂度应该小于logN

韩信点兵

关注保证上次的条件成立然后赵下一个条件什么时候成立

#pragma once
#include<iostream>
using namespace std;
class HDB
{
public:

	bool
		execute();
};
//cpp文件
#include "HDB.h"
bool
HDB::execute()
{
//除三余2,除5余3,除11余7,除23余5,求在1000-20000之间的所有数
	int n = 2;
	while (n % 5 != 3)n += 3;//保证满足前面的条件来找满足下一个条件的数
	while (n % 11 != 7)n += 15;
	while (n % 23 != 5)n += 165;//找到最小的符合要求的数
	if (n > 20000)cout<<"没有"<<endl;
	else 
	{
		while (n < 20000)
		{
			if (n > 1000)
				cout << n << "  ";
			n += 165 * 23;//
		}

	}

	return 1;

}

时间复杂度为logN

幻方问题:
在这里插入图片描述
每种情况试过去肯定不行,我们需要一个精妙的的设计
在这里插入图片描述
在这里插入图片描述
蓝字是出现顺序
黄框是第二种情况的处理
蓝框是第三个情况的处理

练习

答案

在这里插入图片描述

  1. main函数

#include"fun.h"
int main()
{
double x;
cout << “请输入x的值” << endl;
cin >> x;
Fun().execute(x);
return 0;
}
Fun.h文件
#pragma once
#include
using namespace std;
class Fun
{
public:
bool execute(double x);//代入x
};
fun.Cpp文件
#include “fun.h”
bool
Fun::execute(double x)
{
//函数表达式为f(x)=3x3+2*x2+x+4
cout<<"函数表达式为f(x)=3
x3+2*x2+x+4"<<endl;
cout<<“值为”<<((3*x+2)*x+1)*x+4<<endl;//减少乘法的次数
return 1;
}
结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值