首页 > 其他分享 >时间复杂度与空间复杂度分析

时间复杂度与空间复杂度分析

时间:2023-11-14 21:13:17浏览次数:22  
标签:分析 const 字节 int 复杂度 long 空间 top

noip模拟赛爆空间真难受。。。。

空间常数

1Byte=8bit(位)。KB,MB,TB......采用1024进制。

short 2字节 (-215~215) 整数型
int 4字节 (-231~231) 整数型
long long  8字节 (-263~263) 整数型
unsigned long long 8字节 [0~264) 整数型
char  1字节 (0~256) ascll码
bool 1字节 true(1) 或 false(0)
float 4字节   单精度浮点数
double 8字节 双精度浮点数
long double 未知 未知

例:int a[1e8]约占381MB(100000000*4/10242)。(考场一般512MB,数组最好不超过1e8)

如何在代码中快速有效计算空间呢?

#include<bits/stdc++.h>
const int maxn=1e7;
using namespace std;
bool st;
int a[maxn];
int b[maxn];
double c[maxn];
bool end;
int main(){
    printf("%dMB",(&end-&st)/(1024*1024));
    return 0;
}

时间常数优化的一些小trick

1.快读&&快输

int read(){
    int s=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
    return s*f;
}

 2.STL的巨大常数(sort除外)so必要时自己手写。

#define min(a,b) (a)<(b)?(a):(b)
#define max(a,b) (a)>(b)?(a):(b)
#define sight(c) ('0'<=c&&c<='9')
#define swap(a,b) a^=b,b^=a,a^=b

bitset:

struct bitsets{
    long long t[4];
    void set(int x){
        int aa,bb;
        aa=x/60;bb=x%60;
        this->t[aa]|=1LL<<bb;
    }
    void reset(){
        this->t[0]=0;
        this->t[1]=0;
        this->t[2]=0;
        this->t[3]=0;
    }
    void ad(const bitsets &g){
        this->t[0]&=g.t[0];
        this->t[1]&=g.t[1];
        this->t[2]&=g.t[2];
        this->t[3]&=g.t[3];
    }
    void oo(const bitsets &g){
        this->t[0]|=g.t[0];
        this->t[1]|=g.t[1];
        this->t[2]|=g.t[2];
        this->t[3]|=g.t[3];
    }
    void xo(const bitsets &g){
        this->t[0]^=g.t[0];
        this->t[1]^=g.t[1];
        this->t[2]^=g.t[2];
        this->t[3]^=g.t[3];
    }
    bool tr(const bitsets &g){
        bool top=true;
        top&=((this->t[0]&g.t[0])==0);
        top&=((this->t[1]&g.t[1])==0);
        top&=((this->t[2]&g.t[2])==0);
        top&=((this->t[3]&g.t[3])==0);
        return top;
    }
};

3.循环优化。

for (i=1;i<=b;i++)

这样写是很慢的。

for (int i=1;i<=b;i++)

快一丢丢。

4.位运算优化。

if (a^b) 等价于 if (a!=b)
if (!(a^b)) 等价于 if (a==b)

5.多维数组循环。

int a[100001][51];
for(int i=1;i<=50;i++){
    for(int j=1;j<=100000;j++){
        a[j][i]++;
    }
}
慢于
int a[51][100001];
for(int i=1;i<=50;i++){
    for(int j=1;j<=100000;j++){
        a[i][j]++;
    }
}

主要是因为数组的地址是连续的,但连续访问第一维时地址却是跳跃的(更慢)。

比如a[1][1],a[1][2],a[1][3],a[1][4]....a[2][1].中a[1][1]与a[2][1]的地址相隔甚远。

6.

memset,sizeof,strlen是O(n)的时间复杂度。

length()是O(1)的,但string的运算慢于char数组。

 

标签:分析,const,字节,int,复杂度,long,空间,top
From: https://www.cnblogs.com/Peng1984729/p/17832573.html

相关文章

  • 工地环境监测系统实现:实时在线监测、联动自动控制、超标报警、数据分析等功能
    智慧工地云平台源码 智慧工地全套源码随着我国城市的发展,对住宅等的建设要求不断提高,为了满足人民的需要,不断进行规划、建设,但与此同时由于施工、运输、设备、建筑材料、施工设备等因素的影响,工地环境污染一直没有得到有效治理。为控制建筑工地的粉尘、噪音等的污染,必须加强对施工......
  • SqlServer索引原理分析
     中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理。网管对前台的管理和维护工作包括保障网络链路通畅、处理MIS终端的突发事件以及对操作员的管理、培训等,这是网管们日常做得最多、最辛苦的功课;然而MIS系统架构中同等重要的针对数据库的管......
  • 光纤网络排障分析
    日常工作中,发现某条光链路连接不稳定,时快时慢、时断时连。    在交换机上直接查看这条链路交换口上的光收发功率,发现异常。简单说明下,RXPower代表光模块接收功率,TXPower代表发送功率。引起这种故障的原因很多,一般包含光模块、光纤、交换机端口质量问题,光模块是否选择得当......
  • 词法分析程序的设计与实现
    设计原理词法分析是编译过程的第一阶段。它的任务就是对输入的字符串形式的源程序按顺序进行扫描,根据源程序的词法规则识别具有独立意义的单词(符号),并输出与其等价的Token序列。有限自动机是描述程序设计语言单词构成的工具,而状态转换图是有限自动机的比较直观的描述方法。我们使......
  • 数据分析之方差分析
    方差分析(AnalysisofVariance,简称ANOVA)是一种统计方法,用于比较两个或多个样本均值之间的差异。它可以帮助我们确定某个因素(自变量)对于观测值(因变量)的影响程度是否显著。在数据分析中,方差分析被广泛应用于实验设计和比较研究中。下面我将详细介绍方差分析的原理、步骤和应用。......
  • 如何利用分析工具,让教师更了解学生,更精准地辅导他们学习成绩?
    教师利用分析工具来更好地了解学生,并提供更精准的辅导和指导,是教学实践中的重要一环。在本文中,我们将详细探讨如何利用分析工具,在不同层面上更精准地辅导学生学习成绩,包括数据收集、学生表现分析、个性化辅导等方面。数据收集多维度数据采集教师可以通过分析工具收集学生学习......
  • 数据分析人员需要掌握sql到什么程度?
    SQL(StructuredQueryLanguage)是用于管理和操作关系型数据库的标准化语言,对于数据分析人员来说,掌握SQL是至关重要的。在本文中,我们将详细探讨数据分析人员需要掌握SQL的程度,并从基础知识到高级应用进行全面介绍。基础知识了解数据库基本概念作为数据分析人员,首先需要了解数据......
  • 如何利用成绩分析工具实现有效的教学反馈和改进?
    教学反馈和改进对于提高教育质量至关重要,而利用成绩分析工具可以帮助教师更好地了解学生的学习情况,并将这些数据转化为有效的反馈和改进措施。本文将详细介绍如何利用成绩分析工具实现有效的教学反馈和改进,包括选择合适的工具、数据收集与分析、制定改进措施等方面。选择合适的......
  • Webpack Bundle Analyzer包分析器
    当我们需要分析打包文件dist里哪些资源可以进一步优化时,就可以使用包分析器插件webpack-bundle-analyzer。NPM上的介绍是使用交互式可缩放树图可视化webpack输出文件的大小。我的是vue2项目。1、webpack-bundle-analyzer插件的安装$npminstall--save-devwebpack-bundle-analy......
  • 记一次 .NET 某券商论坛系统 卡死分析
    一:背景1.讲故事前几个月有位朋友找到我,说他们的的web程序没有响应了,而且监控发现线程数特别高,内存也特别大,让我帮忙看一下怎么回事,现在回过头来几经波折,回味价值太浓了。二:程序到底经历了什么1.在线程上找原因这个程序内存高,线程高,无响应,尼玛是一个复合态问题,那怎么入手呢?......