首页 > 编程语言 >算法设计基础

算法设计基础

时间:2023-02-01 10:24:36浏览次数:37  
标签:int 基础 问题 算法 循环 计算 设计 表达式

算法研究的重要问题类型

  1. 查找问题
  2. 排序问题
  3. 图问题
  4. 组合问题
    最优化问题:寻找一个组合对象,能够满足特定的约束条件并使某个函数取得极值
  5. 数学问题
  6. 几何问题

代码优化技巧

  1. 常量计算
    对于在计算中不变的数值和表达式,尽量在说明语句中赋值:
    节省目标代码的执行时间。
  2. 算术计算
    1. 尽量使用乘除代替加减
    2. 高次整幂采取降阶操作

      \(P=a*x^4+b*x^3+c*x^2+d*x+e\) 可以修改为\(P+(((a*x+b)*x)+c)*x+d)*x+e\)

    3. 位计算代替除法和取余

      判断奇数x%2!=0可以修改为(x&1)==1

    4. 避免重复计算
      程序中相同的计算结果保留下来
    5. 有利于编译的优化
      尽可能重复的利用存储单元:
      x=a-b;
      y=b-a;
      //x、y的绝对值相等,但编译器无法识别,会使用两个存储单元,应改为
      x=a-b;
      y=-x;
      
    6. 优化逻辑运算
      利用计算逻辑表达式的短路功能,减少逻辑运算
    7. 合理安排条件表达式顺序
      嵌套分支中,执行概率较大的条件表达式放在前面
    8. 改善循环结构
      1. 不滥用循环
        循环次数较少时,尽量不使用循环
        for(int i=0;i<3;i++)
            sum+=a[i];
        //改写为
        sum+=a[0]+a[1]+a[2];
        
      2. 合理安排嵌套
        循环次数较多的,作为内循环
      3. 合并循环
      4. 循环不变式外提
        相同的循环条件下,一次循环完成多种功能
      5. 循环无开关
        循环中出现与循环变量无关的判断,可以在循环外进行判断
            for(int i=0;i<100;i++)
                if(x>5)
                    c[i]=a[i]+b[i];
                else
                    c[i]=a[i]-b[i];
            //改写后减少99次判断
            if(x>5)
                for(int i=0;i<100;i++)
                    c[i]=a[i]+b[i];
            else
                for(int i=0;i<100;i++)
                    c[i]=a[i]-b[i];
        

标签:int,基础,问题,算法,循环,计算,设计,表达式
From: https://www.cnblogs.com/agitm/p/17068576.html

相关文章

  • 手写基础版Vue响应式原理
    1.定义测试对象我们新建了一个obj对象,然后`newObserve`<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-......
  • PostgreSQL学习笔记-4.基础知识:触发器、索引
    PostgreSQL触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。下面是关于PostgreSQL触发器几个比较重要的点:PostgreSQL触发器可以在BEFORE、AFT......
  • 代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.n叉树的最大深度,111.二叉
    Day15周日休息~一、参考资料二叉树的最大深度(优先掌握递归)题目链接/文章讲解/视频讲解:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E......
  • 反射操作的基础代码用法
    `packagecn.javaguide;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;publicclassMain{......
  • 博奥智源公司,浅谈软件运维服务项目需求设计
    1.企业门户网站(1)根据企业要求调整网站的排版;(2)根据第三方安全测评单位的检测报告对网站系统本身的漏洞和BUG进行修正;(3)在省、市政府测评范围内对网站系统功能进行变更和完......
  • 设计模式-Simple Factory(简单工厂)
    模式说明简单工厂模式又叫静态工厂模式,但不属于23种设计模式。简单工厂模式是由一个工厂对象决定创建出哪一个产品类的实例。UML结构图优点实现了对责任的分割,隔离了......
  • mybits_基础
    1.框架:一款半成品软件,我们可以基于框架继续开发,从而完成一些个性化的需求2.ORM:对象关系映射,数据和实体对象的映射3.MyBatis:是一个优秀的基于Java的持久层框架,它内部封......
  • G 清楚姐姐逛街(Easy Version)【2023牛客寒假算法基础集训营4】
    G 清楚姐姐逛街(EasyVersion)原题链接题意终点会按照固定方式移动的搜索问题,多次查询思路只要时间t是确定的,那么终点的位置就是确定的->可以模拟每一时刻bfs维......
  • c++学习1 基础关键词
    一"const"修饰变量只能被初始化和读取,不能被赋值更改,且必需初始化,不初始化的话会因为读取到随机数而报错。example:constintdate=100;cout<<"date="<<date;//结......
  • 字节二面:100Wqps短链系统,如何设计?
    文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面......