zoukankan      html  css  js  c++  java
  • 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)

    Java中  Set 和 List 集合  的contains()方法,检查数组链表中是否包含某元素
    检查数组链表中是否包含某元素,使用 Set 而不使用 List  的原因是效率问题,
     前者的 set.contains()方法 实现的复杂度是O(1)、 而后者 list.contains()方法 实现的复杂度是O(n)


    List特点:

    元素有放入顺序,元素可重复 ,

    Set特点:

    元素无放入顺序,元素不可重复(

    注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

    附上二者contains()方法的区别对比:

    ​1、 Set的contains()方法:

    HashSet的contains返回true,当且仅当equals返回true    ​

    并且    ​hashCode返回相等的值 ;Set除了比较equals,还比较hashCode



    2、List的contains()方法:

    list.contains(o),系统会对list中的每个元素e调用o.equals(e),方法,加入list中有n个元素,那么会调用n次o.equals(e),

            只要有一次o.equals(e)返回了true,那么list.contains(o)返回true

    算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)


    简单理解: 就是变量为n的时候,算法需要对变量操作次数的量级。
    简单解释:
       简单说O(n²)表示当n很大的时候,复杂度约等于Cn²,C是某个常数,简单说就是当n足够大的时候,n的线性增长,复杂度将沿平方增长。
       O(n)也是差不多的意思,也就是说n很大的时候复杂度约等于Cn,C是某个常数。
       O(1)就是说n很大的时候,复杂度基本就不增长了,基本就是个常量C。
    举例解释:
    要找到一个数组里面最大的一个数,你要把n个变量都扫描一遍,操作次数为n,那么算法复杂度是O(n).
    用冒泡排序排一个数组,对于n个变量的数组,需要交换变量位置n^2 次,那么算法复杂度就是O(n^2 ).
    有时候,如果对变量操作的次数是个多项式比如n^4+n^2+n, 就取数量级最大的那个,O(n^4)

    摘自原文:https://www.cnblogs.com/wang-yaz/p/9243645.html

    云在青天水在瓶
  • 相关阅读:
    solr6.5搭建以及使用经验
    Intellij IDEA svn的使用记录
    初次从eclipse转到intellij idea上的一些经验
    Linux一键安装PHP/JAVA环境OneinStack
    CentOS下yum安装mysql,jdk以及tomcat
    centos yum换阿里云源
    ehcache配置:使用Spring+SpringMVC+Mybatis或者有shiro
    微博短链接的生成算法(Java版本)
    手把手教你使用Git
    工作中有关分布式缓存的使用和需要注意的问题梳理
  • 原文地址:https://www.cnblogs.com/flms/p/14841867.html
Copyright © 2011-2022 走看看