java算法-基礎理論

    不少開發者都知道「程序=數據結構+算法」這個著名的公式,單曲並不真正明白算法的定義或概念。究竟什麼是算法呢?從字面意義上理解,算法即用於計算的方法,經過這種方法能夠達到預期的計算結果。java

1、算法特徵

    一個典型的算法通常均可以從中抽象出5個特徵:又窮性、確切性、輸入、輸出和可行性。下面詳細分析這5個特徵。算法

  • 有窮性:算法的指令或步驟的執行次數是有限的,執行時間也是有限的。
  • 確切性:算法的每個指令或步驟都必須又明確的定義和描述。
  • 輸   入:一個算法應該又相應的輸入條件,用來刻畫運算對象的初始狀況。
  • 輸   出:一個算法應該又明確的結果輸出。這是容易理解的,由於沒有獲得結果的算法毫無心義。
  • 可行性:算法的執行步驟必須是可行的,且能夠在有限時間內完成。

2、算法分類

    算法是一門古老且龐大的學科,隨着歷史的發展,演化出多種多樣的算法。按照不一樣的應用和特性,算法能夠分爲不一樣的類別。編程

    一、按照應用來分類

         按照算法的應用領域,即解決的問題,算法能夠分爲基本算法、數據結構相關的算法、幾何算法、圖論算法、規劃算法、數值算法、數值分析算法、加密/解密算法、排序算法、查找算法、並行算法和數論算法等。數組

    二、按照肯定性來分類

         按照算法結果的肯定性來分類,算法能夠分爲肯定性算法和非肯定性算法。數據結構

  • 肯定性算法:這類算法在有限的時間內完成計算,獲得的結果是惟一的,且常常取決於輸入值。
  • 非肯定性算法:這類算法在有限的時間內完成計算,單是獲得的結果每每不是惟一的,即存在多值性。

    三、按照算法的思路來分類 

         按照算法的思路來分類,算法能夠分爲遞推算法、遞歸算法、窮舉算法、貪婪算法、分治算法、動態規劃算法和迭代算法等多種算法。性能

3、算法與數據結構的關係

    數據結構是數據的組織形式,能夠用來表徵特定的對象數據。在計算機程序設置中,操做的對象是各式各樣的數據,這些數據每每擁有不一樣的數據結構,如數組、結構體、聯合、指針和鏈表等。由於不一樣的數據結構所採用的處理方法不一樣,計算的複雜度也不一樣,因材算法每每依賴於某種數據結構。也就是說,數據結構的算法實現的基礎。(程序=數據結構+算法)加密

    數據結構spa

4、流程圖表示

    流程圖是一種圖形表示算法流程的方法,其由一些圖框和流程線組成。其中,圖框標識各類操做的類型,圖框中的文字和符號標識該操做的內容,流程線表示操做的前後次序。圖框以下:指針

    在實際使用中,通常採用以下三種流程結構。code

  • 順序結構

            順序結構是最簡單 的一種流程結構,簡單的一個接着一個的進行處理,通常來講,順序結構數和於簡單的算法。

            

  • 分支結構

            分支結構經常使用語根據某個條件來決定算法的走向,以下所示。這裏首先判斷條件P,若是P成立,則執行B;否者執行A,而後在繼續下面的算法。分支結構有時也稱爲條件結構。

            

  • 循環結構
           循環結構經常使用於須要反覆執行的算法操做,按照循環的方式,能夠分爲當型循環結構和直到型循環結構。區別以下:
    • 當型循環結構先對條件進行判斷,而後再執行,通常採用while語句來實現。
    • 直到循環結構先執行,而後在對條件進行判斷,通常採用until、do...while語句來實現。
    • 注:不管當型循環結構仍是直到型循環結構,都須要進行合理的處理,以保證可以跳出循環;不然構成死循環是沒有任何意義的。

    通常來講,採用上述三種流程結構,能夠完成全部的算法任務。經過合理安排流程結構,能夠構成結構化的程序,這樣便於算法程序的開發和交流。

5、算法的性能評價

    算法其實就是解決問題的一種方法,一個問題的解決每每能夠採用多種方法,但每種方法所用的時間和獲得的效果每每是不同的。算法的一個重要任務即是找到合適的、效率最高的解決問題的方法,即最好的算法。從理論上來說,這就須要對算法的性能有一個合理的評論。一個算法的優劣每每經過算法複雜度來衡量,算法複雜度包括時間複雜度和空間複雜度兩個方面。

    一、時間複雜度

        時間複雜度即一般所說的算法執行所須要耗費的時間,時間越短,算法越好。一個算法執行的時間每每沒法精確估計,一般須要在實際的計算機中運行纔可以知道。可是,也能夠對算法的代碼進行估計,而獲得算法的時間複雜度。

    二、空間複雜度

        空間複雜度是指算法程序在計算機中執行所消耗的存儲空間。空間複雜度能夠分爲以下兩個方面。

             1)程序保存所須要的存儲空間,即程序大小。

             2)  程序在執行中所須要小號的存儲空間資源,如程序在執行過程當中的中間變量等。

        通常來講,程序的大小越小,執行過程當中消耗的資源越少,這對程序就越好。

6、編程實例

    一、使用while循環來計算1+2+3+....+100的值

public static void main(String[] args) {
    /**
    * 使用while循環來計算1+2+3+....+100的值
    */
    int current= 1;//從1開始累加
    int total = 0;//累加數
    while (current<=100){
        total+=current;
        current++;
    }
    System.out.println(total);
}

    效果以下:

5050

    二、將ASCII碼位於32~126之間的95個字符顯示在屏幕上,爲了美觀,要求小於100的碼值前填充一個0,每行打印8個字符。

public static void main(String[] args) {
    /**
    * 將ASCII碼位於32~126之間的95個字符顯示在屏幕上,爲了美觀,要求小於100的碼值前填充一個0,每行打印8個字符。
    */
    String temp = "";
    for (int i = 32; i <= 126; i++) {
        temp = i<100?("0"+i):(i+"");
        System.out.print(temp+ "=" +(char) i+" ");
        if ((i-31)%8 ==0){
            System.out.println("\n");
    }
}

效果以下:

032=  033=! 034=" 035=# 036=$ 037=% 038=& 039=' 
040=( 041=) 042=* 043=+ 044=, 045=- 046=. 047=/ 
048=0 049=1 050=2 051=3 052=4 053=5 054=6 055=7 
056=8 057=9 058=: 059=; 060=< 061== 062=> 063=? 
064=@ 065=A 066=B 067=C 068=D 069=E 070=F 071=G 
072=H 073=I 074=J 075=K 076=L 077=M 078=N 079=O 
080=P 081=Q 082=R 083=S 084=T 085=U 086=V 087=W 
088=X 089=Y 090=Z 091=[ 092=\ 093=] 094=^ 095=_ 
096=` 097=a 098=b 099=c 100=d 101=e 102=f 103=g 
104=h 105=i 106=j 107=k 108=l 109=m 110=n 111=o 
112=p 113=q 114=r 115=s 116=t 117=u 118=v 119=w 
120=x 121=y 122=z 123={ 124=| 125=} 126=~

    三、使用for循環的嵌套,打印出九九乘法表

public static void main(String[] args) {
    /**
     * 使用for循環的嵌套,打印出九九乘法表
     */
    for (int i = 1; i <= 9 ; i++) {
        for (int j = 1; j <= i ; j++) {
            System.out.print(j+"*"+i+"="+i*j+"\t");
        }
        System.out.println("");
    }

}

效果以下:

1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81
相關文章
相關標籤/搜索