因為可以脫離測試環境,硬體裝置,資料規模等意外因素的干擾。
大o複雜度表示法:
int
test
(int n)
return a;
}
在上式中設每行**執行時間為乙個單位時間。那麼第2、3行分別需要乙個單位時間,所以需要2單位時間。而4、5行都執行了n遍,所以需要2n單位時間。總的需要(2n+2)*單位時間。
所以我們有乙個公式:t(n)=o(f(n))
即所有**執行時間與每行**執行次數成正比。
例子中t(n)=o(2n+2),這就是大o時間複雜度表示法,也叫時間複雜度。
在記錄時間複雜度時,我們只需要取最大的量級就行,因此t(n)=o(2n+2)可以記作o(n)。
o(1)
int
test()
此時t(n)=o(3),但是我們可以用o(1)表示。因為o(1)表示常量級。
int
test()
return a;
}
此時t(n)=o(102),也可以表示為o(1)。
所以說,只要沒有隨著n增長而時間變長的執行語句(最典型的就是沒有n)那就是常量時間。
o(logn)
int
test
(int n)
return a;
}
可以看到退出條件為:當a乘了x個2之後等於n。也就是2^x=n,x=log2n。時間複雜度為o(logn)。這裡可以說一下,無論log以什麼為底數,都可以統一為logn。因為logan=logab x logbn。即logan=c x logbn。log2n、log3n、log100n之間只要成乙個常數c就能轉換,因此統一為logn。
o(m+n)
就是由兩個變數決定
int
test
(int n,
int m)
for(
; j<=m ; j++
)return a+b;
}
此時為m和n共同決定,因此t(n)=o(m+n)。
o(n2)
int
test
(int n,
int m)
}return a;
}
兩個迴圈巢狀,裡迴圈執行n2次,因此t(n)=o(n2)。
同理三個迴圈巢狀就是o(n3)。
備戰BAT面試 查漏補缺 IO相關
io相關 io概述 站在記憶體的角度上,從其他的裝置進入記憶體的,都是輸入,從記憶體到其他的裝置的都是輸出,i o就是用於裝置之間的進行傳遞的資料互動的物件的所屬的型別。位元組流與字元流 位元組流 通常用來處理二進位制資料 處理的是bit 字元流 處理的最基本的單元是unicode碼元 大小2位元組...
備戰BAT面試 查漏補缺 雙親委派模型
對於某個特定的類載入器而言,應該為其指定乙個父類載入器,當用其進行載入類的時候 1.委託父類載入器幫忙載入 2.父類載入器載入不了,則查詢引導類載入器有沒有載入過該類 3.如果引導類載入器沒有載入過該類,則當前的類載入器應該自己載入該類 4.若載入成功,返回 對應的class 物件 若失敗,丟擲異常...
備戰BAT面試 查漏補缺 介面與抽象類
介面 介面方法的訪問許可權 jdk 1.8以前,介面中的方法必須是public的 jdk 1.8時,介面中的方法可以是public的,也可以是default的 jdk 1.9時,介面中的方法可以是private的 介面函式的宣告 在介面中,屬性預設public static final,這三個關鍵字...