首页 > 编程语言 >关于算法复杂度的分析

关于算法复杂度的分析

时间:2023-01-06 15:47:36浏览次数:40  
标签:int 复杂度 算法 循环 时间 result 关于

Hello,各位看官好,今天我们来说一个问题,就是如何计算算法复杂度(这里所说的算法复杂度就是时间复杂度)。

       一、时间复杂度的概念

  二、计算时间复杂度的原理以及方法

  三、练习题目

 

  一、时间复杂度的概念

    这里要说一下,时间复杂度其实可以分成三种,分别是最好时间复杂度,最坏时间复杂度,以及准确复杂度,那么我们平时说的是哪一种呢?我们所说的就是最坏时间复杂度,简称大O,

    那么其实其他两种复杂度我们需不需要呢?其实也是需要的,不过我们无需理会他们到底怎么算的,只需要记住他们的标记,其中最好时间复杂度为大Ω,准确时间复杂度为大θ。

  二、时间复杂度的原理以及方法

    计算时间复杂度,以我个人的经验来说,只需要记住三件事情:

      1、首先要看循环几层

      2、需要看循环里面的内容和外面的内容是否有关联

      3、如果一下子看不出来,那么就找出规律,一个一个算。

  我们逐条解说

    1、首先要看循环几层

      1、一般来说循环几层就是n的几次方(前提是判断条件和循环里面的内容没有关系),举例:

      public void loop(int n) {
         int result = 0;
        for (int i = 0; i < n; i++) {
              result ++;
        }

        for (int i = 0; i < n; i++) {
             for (int j = 0; i < n; i++) {
                  result ++;
             }
         }
      }

    这里的话就一目了然,最高位两层而且里面的内容和判断条件没有关系,所以他的时间复杂度就是n2

    

    2、需要看循环里面的内容和外面的内容是否有关联

      我们举一个例子:

      public void multiplication(int n) {
          int result = 1;
          while (result <= n) {
               result = result * 2;
          }
      }

    这里来说判断条件就跟里面的部分有关联,那么这里就需要看2n >=n,所以他的内容就是log2n。

    3、如果我们不确定他的复杂度是多少,我们就按照规律将写出来,结果自然一目了然。

  三、练习题目

    x = n;
    y = 1;
    while(x >= (y-1)*(y-1)) {
        y++;
    }

  这是邓俊峰老师的数据结构书里面的一道练习题,我们可以以此来做一下解题思路:

    y=1   x>=0

    y=2  x>=1

    y=3  x>=4

    y=4  x>=9

    y=n x>=n2

    那么我们替换一下参数n=x,x=n(因为这样比较好看),x2=n,结果x=log2n,结束。

 

  以上就是我对算法时间复杂度的理解。

 

标签:int,复杂度,算法,循环,时间,result,关于
From: https://www.cnblogs.com/songyuchen/p/17030627.html

相关文章

  • 快速选择算法—第k个数
    题目描述给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列从小到大排序后的第k个数。输入格式第一行包含两个整数n和k。第二行包含n个整数(......
  • 算法—查找三数相加为零的三元组
    packagealgorithm;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;/***给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b......
  • 关于group by的用法
    文章目录​​准备`sql`​​​​执行​​​​分析执行过程​​用了很久的​​gorupby​​​一道面试题让我突然觉得自己不会用了。原题是这样的:表A有三个列分别为​​a、b、......
  • 算法笔记——泰勒展开
    泰勒展开在\(x_0=0\)处的泰勒展开泰勒展开是对一个\(n\)次多项式\(f(x)=\sum\limits_{i=0}^{n}a_ix^i\)变换,这里\(n\)可以趋向于\(\infty\)。考虑这个多项式的......
  • 学点数模-2——遗传算法
    今天来学习一下遗传算法,其实相关的代码已经找到了,但是想先学一下,因为我发现我有些地方不能纯看代码看懂。还是得辅佐一下。说白了就是模拟生物进化的,那么我们先构建一个模......
  • 我在京东做研发 | 京东云算法科学家解析爆火的ChatGPT
    令人惊艳的ChatGPT横空出世背后有怎样的前沿技术支撑走向大规模产品应用又有何局限深耕对话式AI技术十余年京东云算法科学家将带您一同走进技术世界解析ChatGPT的技术......
  • 关于异或-异或运算及其应用
    概念异或,是一个数学运算符,英文为exclusiveOR,缩写为xor,应用于逻辑运算异或的数学符号为“⊕”,计算机符号为“xor”  如果a、b两个值不相同,则异或结果为1......
  • 关于DoTween的使用方法笔记
    一、Unity常用组件拓展方法(1)Transform拓展方法1)Position1)改变世界坐标移动方法,第一个参数是要移动到的目标点,不是移动这个向量的距离transform.DOMove(newVector3(1......
  • 代码随想录算法训练营第八天 |344.反转字符串 541. 反转字符串II 题目:剑指Offer 05.替
    344.反转字符串文章:代码随想录(programmercarl.com)视频:字符串基础操作!|LeetCode:344.反转字符串_哔哩哔哩_bilibiliclassSolution{public:voidreverseStri......
  • 算法图解·阅读笔记·第一章
    算法图解第一章1.引言算法:算法是一组完成任务的指令。2.二分查找二分查找适用于有序列表,时间复杂度为O(logn)defbinary_search(order_list,item):low=......