首页 > 其他分享 >常数优化2

常数优化2

时间:2022-12-03 11:44:49浏览次数:41  
标签:string int unsigned ++ vector 常数 除法 优化

本文介绍的常数优化方法或者能使代码略微加速,或者是一般人写代码时就习惯写成较快的方式

注意STL函数的时间复杂度

例1:

以下遍历char[]的两种方法

for(int i = 0; i < str.size(); i++)

for(int i = 0, len = str.size(); i < len; i++)

不使用O2等优化的情况下,前者的复杂度是O(n^2),后者是O(n)

例2:

n * n

相比

pow(n, 2)

快很多

除法运算比乘法运算慢得多

设变量n是浮点型,以下两个语句

i / 2
i * 0.5

除法比乘法慢得多

整数的自增和自减,++和--尽量放前面

++i 比 i++ 略快一点

大循环放内层

以下两段代码

for(int i = 1; i <= 10; i++){
	for(int j = 1; j <= 1000000; j++){
	}
}

for(int i = 1; i <= 1000000; i++){
	for(int j = 1; j <= 10; j++){
	}
}

前者运行速度比后者快

unsigned数据的除法比signed快

进行除法时,可以考虑写成

(unsigned int)n / m;

但是由于类型转换本身需要消耗时间,所以总是大于0的变量都可以定义为unsigned

减少函数的值传递

以下两段代码

bool compare(string str1, string str2)

bool compare(string *str1, string *str2)

前者运行速度慢,当数据很大时,这种差距更加显著

避免过大的循环

如果两个函数f1和f2互相不影响,那么把

for(int i = 1; i <= n; i++){
	f1();
	f2();
}

这种写法改成下面这种会快不少

for(int i = 1; i <= n; i++){
	f1();
}
for(int i = 1; i <= n; i++){
	f2();
}

当且仅当循坏过大时才拆开!循环语句本身的耗时很大,执行一次的用时仅次于除法

用构造函数赋初值

用好构造函数,例如定义一个整形变量sum并将其初值赋为0,一般的写法

int sum = 0;

改成

int sum(0);

会快一些

ps.这种方法对运行效率的提高微乎其微,所以大可忽略不计

pair类型尽量使用有序赋值,即大括号

pair类型的有序赋值

p = {a, b};

比std方法

p = make_pair(a, b);

快1.5倍左右

关于乘法的一个小误区

通常情况下,将

n *= 10;

写成位运算的

n = (n << 1) + (n << 3);

并不能提高效率,有时甚至还会变慢

关于vector插入元素

运用了就地构造和强制类型转换的

vector.emplace_back();//(C++11起)

比基于拷贝构造的

vector.push_back();

有显著的内存优化,运行效率也有一定的提升

标签:string,int,unsigned,++,vector,常数,除法,优化
From: https://www.cnblogs.com/xj22yangyichen/p/16947247.html

相关文章

  • 【磨刀霍霍向数模】系列之凸优化求解利器cvxpy
    CVXPY是Python中内置的解决凸优化问题的模块,其可以自动转化问题为标准形式,调用解法器,求解。本文介绍求解的常见思路方法。1.设定变量cvx.Variable(shape=(),name=Non......
  • 子查询优化之 Semi-join 优化 | StoneDB 研发分享 #2
    缘起StoneDB在列式存储引擎Tianmu的加持下,在大多数场景下相对MySQL都会有大幅性能提升。当然,这是需要工程师不断优化代码才能做到的,而且,性能好也需要通过基准测试才......
  • 尾调用及递归优化
    参考文章尾调用优化-阮一峰;基本概念一、尾调用一个函数的最后一步是调用另一个函数,并返回。注意点是,返回的是一个函数的调用(执行)。//最简形式functionf......
  • 编译器优化丨Cache优化
    摘要:本文重点介绍几种通过优化Cache使用提高程序性能的方法。本文分享自华为云社区《编译器优化那些事儿(7):Cache优化》,作者:毕昇小助手。引言软件开发人员往往期望计算机......
  • 容器开发运维人员的 Linux 操作机配置优化建议
    "工欲善其事必先利其器",作为一个PAAS平台架构师,容器相关技术(docker,k8s等)是必不可少的.本文简单介绍下我自己的Linux操作机配置.提升工作效率,提高使用体验.❤️......
  • 数据中台 | 如何优化企业"数据消费"策略
    随着大数据时代的到来,企业的数据消费模式发生转变并不断升级。企业正在清晰地认识大数据的价值并加以利用,通过数据分析找出并满足消费者的需求,在这场数字变革中实现转型。因......
  • weblogic优化
    一、登录web界面卡顿[root@localhostsecurity]#find/-namejava.security/apppackage/jdk1.8.0_311/jre/lib/security/java.security[root@localhostsecurity]#cat......
  • 秒杀优化-异步秒杀思路
    当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤1、查询优惠卷2、判断秒杀库存是否足够3、查询订单4、校验是否是......
  • 记一次接口优化操作
    项目正式上线之后,后期主要是不断地进行版本迭代,开发新的功能。自己参与开发的项目正式开始使用后,人数还不少,早上高峰期的时候一个接口一个小时的请求数达到约3万。而......
  • 私藏!资深数据专家SQL效率优化技巧 ⛵
    ......