算法時間復雜度的表示法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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM