算法笔记:时间复杂度、空间复杂度 进制转化 秦九韶算法
一、何为算法。
算法是解决问题的方法与步骤,一般通过考虑算法的时间复杂度和空间复杂度来判断一个算法的优秀度。
eg:常见的时间复杂度:O(1) <O(logn)< O(n) <O(nlogn)< O(n²)< O(2ⁿ)<O(n!)
1、时间复杂度:分析算法的执行效率。
int fun(int n)
{int i=n;int j=3*n;return i+j;
}
以上函数只有俩个执行语句,最终结果是个固定的常数,则时间复杂度为O(1)。
int fun(int n)
{int i=1;while(i<=n)i=i*2return i;
}
以上函数中while执行了log2(n)次,则时间复杂度为O(logn)。
int fun(int n)
{int sum=0;for(int i=0;i<n;i++)sum+=i;return sum;
}
以上函数for执行了n次,则时间复杂度为O(n)。
一般抓取主要的执行语句来判断时间复杂度。
int fun(int n)
{int sum=0;for(int i=1;i<=m;i++)sum+=i;for(int i=1;i<=n;i++)sum+=i;return sum;
}
以上函数有俩个分别的for循环,则时间复杂度O(m+n)。
int fun(int m,int n)
{int sum=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){sum+=i*j;j=j*2;}}return sum;
}
有俩个for循环套用,外面的for执行了m次,里面的for执行了log2n次,则时间复杂度为O(mlogn)
int fun(int n)
{int sum=0;for(int i=0;i<n;i++){for(int j=0;j<n;j++){sum+=i*j;}}return sum;
}
两个for都执行了n次,则时间复杂度为O(n²)
计算机一秒可以执行10亿次。
2、空间复杂度:算法所占内存空间。
int fun(int n)
{int sum=0;for(int i=0;i<n;i++)sum+=i;return sum;
}
空间复杂度O(1)
int fun(int n)
{int arr[N];while(i<=N)i=i*2return i;
}
空间复杂度O(n)
int fun(int m,int n)
{int arr[M][N];for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)sum+=arr[i][j];return sum;
}
空间复杂度O(MN)
常见的空间复杂度O(1)<O(n)<O(n²)
二、二进制原理和表示方法。
1、二进制原理
计算机内部采用二进制代码(0和1)存储信息。
A=10,B=11,C=12,D=13,E=14,F=15
二进制eg:110-1=101.
十六进制eg:119+2=11B
eg:1A2-13=18F
2、正整数的二进制、十进制、十六进制的转换
十进制数转换为N进制数【除基(N)取余、逆序输出】
eg(11)=(1011)2=(13)8=(B)16
N进制数转换为十进制数【按权展开、逐项相加】
eg:(1101)B=13 D
3、小数中的进制转换
十进制小数转换为N进制数【小数部分乘以N,取整数部分直至小数点后为0】
eg:(0.125)D=(0.001)2=(0.02)4=(0.1)8=(0.2)H
N进制小数数转换为十进制数【位权展开,逐项相加】
eg:(0.101) B=0.625
4、计算机中整数的表示方法。
最高位表正负,0表正,1表负
对于正数,原码 = 反码 = 补码
对于负数,反码 = 将原码的各位取反(符号位除外);补码等于反码加1
eg:原码:100011
反码:1111100
补码:111101
2的8次方种,每位不是0就是1;最大的是(11111111)2=(255)10;有符号的话就去掉符号位为2的7次方种;n位就是2的n次方种。
#include <stdio.h>
int main()
{int i=0,n,a[32];scanf("%d",&n);while(n>0){a[i]=n%2;i++;n=n/2;}for(int j=i-1;j>=0;j--){printf("%d",a[j]);}return 0;
}
5、秦九韶算法
作用:减少乘法计算,使算法的时间复杂度降低从而使算法更加优秀。
利用秦九韶算法求一元n次多项式的时间复杂度为O(n)。
秦九韶算法总结:对于一个n次多项式,至多需要做n次乘法和n次加法
算法程序:
ans = s[0];//s[0]保存最高项系数
for(i=1;i<=n;i++)
ans = ans * x + s[i] ;
算法笔记:时间复杂度、空间复杂度 进制转化 秦九韶算法相关推荐
- 计算机组成原理——基本组成 进制转化 奇偶校验 原码 反码 补码 移码 移位 原码补码乘法除法 IEEE754 加法器ALU
笔记来源于王道考研视频 第一章 通过电信号传递信息(低电平代表0,高电平代表1) 计算机系统 计算机系统=硬件+软件 软件 系统软件 应用软件 操作系统,数据库管理系统(DBMS),标准程序库(编程时 ...
- 用递归实现简单的进制转化器(模块化设计):学习递归题型之一
引言: 在阅读C Primer Plus时,我发现一个非常有意思的将十进制转化二进制的方法,我通过逻辑推理,将十进制转化为八进制以及十六进制的方法类比了出来:在此处呢,我将用递归实现对十进制转化为三种 ...
- 编码/解码和进制转化工具hURL
编码/解码和进制转化工具hURL 在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Linu ...
- ASP常用进制转化类(2,8,10,16,32,64)
<% ' 名称:HDOBTools ' 描述:进制转化类 ' 作用:用于各种进转的转化 Class HDOBToolsPrivate hdobHackPrivate Sub Class_Init ...
- python数据结构:进制转化探索
*********************************第一部分*************************************************************** ...
- 【PAT - 甲级1010】Radix (25分)(二分,进制转化)
题干: Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? Th ...
- 进制转化进10进制数
Option Explicit Private Sub Form_Click() Dim St As Integer, Dem As Long St=InputBox("输入一个十六进制数& ...
- 【风马一族_C】进制转化
1 #include "stdio.h" 2 #include "Math.h" 3 #define number 50 //设置数组的长度 4 5 int n ...
- 进制转化——十进制转二进制
我们现在来说一下进制转化的问题,以十进制转二进制为例. 在数学里我们算一个十进制数的二进制数,比如11的二进制数是1011,这是怎么得到的呢? 11/2=5余1: 5/2=2余1: 2/2=1余0: ...
最新文章
- final修饰的变量是引用不能改变还是引用的对象不能改变
- rocketmq中producer设计与实现
- 关于去中心化身份的一点思考
- 阿里云mysql写入性能_插入mysql类型
- 使用Hibernate和Spring设置分布式Infinispan缓存
- mysql 命令行批量sql_命令行中执行批量SQL的方法
- java 读取manifest_使用JAVA从jar文件读取MANIFEST.MF文件
- linux启动本地远程服务,如何使用SSH在本地控制远程服务器执行命令
- Python数据结构与算法(2.3)——链表
- Ubuntu安装yum
- 使用3g模块SIM5360E收发短信
- ShuipFCMS -- 简单强大内容管理系统
- Linux CentOS7 备份及还原系统
- DO=MOSI DI=MISO
- 对话西门子Mendix:低代码与亚马逊云科技Serverless的底层融合,助力企业提效降本...
- 京东Java岗:来自面试官的夺命连环56问,你怀疑人生了吗?
- p二、使用 docker-compose 安装 Prometheus+Alertmanager+Grafana
- 学术论文--论文查看的网站/快速查看中英文文献/不怕难
- [Swift]LeetCode61. 旋转链表 | Rotate List
- 把WPS/Excel里的单元格为图片url链接转换为图片显示
热门文章
- matlab 保存三维矩阵,如何以Python语法读取Matlab中保存的三维矩阵(Dicom矩阵)?...
- 卡尔曼滤波应用:过滤随机游走过程
- Scrapy爬虫:XPath语法
- Motoman机器人离线编程——Motocom32参考文献及注意事项
- 关于成功的7个小故事
- windows安全警报怎么关闭_Windows 开机启动画面,声音等设置
- Eclipse集成properties插件-unicode码转化成中文
- 10.SVN入门笔记——使用 SVN 独立客户端TortoiseSVN
- “错误	C1083	无法打开包括文件: “boost/shared_ptr.hpp”: No such file or directory”解决办法
- freopen函数的使用以及freopen与fopen的区别 open、fopen、freopen区别(文件操作)