Java數據結構與算法概述

爲什麼要學習數據結構與算法

使用合適的數據結構和算法進行優化程序,可以使得你的程序運行的更快,
並且佔用更少的資源,有益於開發大型程序

也就是說它會從時間複雜度和空間複雜度兩方面進行分析,時間複雜度關注的是效率,空間複雜度關注的是資源利用率。在特定的場景下用特定的數據結構和算法進行優質的開發,這樣可以從時間上和資源佔用量上都達到一個非常好的效果。“有益於大型程序的開發”,這句話什麼意思呢?以爲我們在進行比較複雜的程序中,我們會涉及到一個大的數據量比較複雜的處理邏輯,幾個例子:現在有1萬條數據,每處理一條數據需要經過10個鏈式函數(a掉b,b調c,c又可能調d)的調用,A同學開發出來一個程序,它每處理一條數據用時1毫秒,這是相當快了,在這種大頻度的調用下,只需要1毫秒,B同學開發了一套程序,需要兩毫秒去處理一條數據,那麼對比A和B兩個同學所研發的這套程序呢,其實沒有什麼太大的區別,1毫秒和2毫秒對我們來說都是眨眼之間轉瞬即逝的,但是我們來計算下數據量,我有1萬條數據,每處理一條B就比A慢了1毫秒,那麼1千條,那麼B就比A慢1秒中,1萬條就慢10秒鐘,1秒鐘對我們程序員來講都是相當少,但是我們可以看到每一條數據少1毫秒就會出現1萬條數據慢10秒的差距,對於一個用戶來講5秒以內是我們用戶等待的一個極限,超過5秒之後會給用戶一個好慢的印象,所以說可以有益於開發大型程序,它可以優化我們。每一個節點進行優化,每一個節點少一點點時間,在大數據的情況下,它就會少很多時間。

高級工程師和普通工程師區別就在於高級工程師他所開發的代碼,質量和效率都是要優於普通工程師的。普通工程師每天都用foreach for循環,高級工程師他會在合適的地方選擇合適的數據結構,而不是盲目的去選擇一個hashMap或者一個ArrayList。

Java 數據結構是什麼?

 數據結構是對在計算機內存中的數據的一種安排。
 包括數組,鏈表,棧內存,二叉樹,紅黑樹,哈希表等

瞭解數據結構和算法,可以秒殺水代碼,衝擊高薪職位。

(初級)數據結構 優點 缺點
數組 插入快,如果知道下標,可以快速的存取 查找慢,刪除慢,大小固定
有序數組 比無序的數組查找快 刪除和插入慢,大小固定
提供後進先出方式的存取 存取其它項很慢
鏈表 插入快,刪除快 查找慢
二叉樹 查找,插入,刪除快(前提是樹保持平衡) 刪除算法複雜
(高級)數據結構 優點 缺點
紅-黑樹 查找,插入,刪除快(樹總是平衡的) 算法複雜
2-3-4樹 查找,插入,刪除快(樹總是平衡的) 算法複雜
哈希表 如果關鍵字已知則存取極快。插入快 刪除慢,如果不知道關鍵字則存取很慢,對存儲空間使用不充分
插入刪除快,對大數據項的存取很快 對其它數據項存取慢
對現實世界模擬 有些算法慢且複雜

大O表示法表示算法性能

概念:
大O表示法的實質並不是對運行時間給出實際的值,而是爲了表達運行時間是如何受數據項個數所影響的。
O的含義:
大寫字符O,可以認爲其含義是“order of ”(大約是)。
那爲什麼沒有精確的值呢?我們看下面這張圖
在這裏插入圖片描述
1.我們倒着看,先看O[n!] (n的階乘,123…n),這是最慢最慢的一個時間複雜度,看橫軸elements(數據量)隨着增加,它的運行時間幾乎成直線向上攀升,也就是說會數據量增加會越來越慢,處理一個數據要1秒,處理5個數據就要1234*5=120秒,這種算法對我們來說極爲不可取。
2. 再看倒數第二的O[2^n] (2的n次方),其實比n的階乘好不了多少,比如說處理一條數據用2秒,處理5條數據就是2^5 =32秒,這時間上升速度也是相當快的。
3.我們看看O[n^2] (n的平方),就是圖中第三條數據,它就相對平緩的增長,也就是說處理一條數據需要1秒的話,處理10條數據我需要100秒,這就是它的大概的計算方式,當然是order of 大約的
4.我們看看O[nlogn],第四條線,它的增長相對更加平穩一些,如果我們處理一條數據的話,是n的log1,如果處理100條數據是100log100,這樣的話在數學的函數表示上,它的增長會稍慢些,也就說是我們大O表示法其實是隨着這個個數所影響的這個時間。
5.我們來看下更好些的O(n),也就是說100條數據用100秒,1000條數據用1000秒,10000條數據用10000秒,這個是比N倍的logn更好一級別的,是成橫軸縱軸是1對1的比例上升
6.O[logn]它比nlogn少一個n,這更好一些,更加平緩。
7. O[1],我們說大O表示法是時間被數據項個數所影響的,那麼O[1]是什麼意思?也就是說不管是1千條,1萬條,甚至是1億條都不會影響我們的處理效率,它的時間複雜度一直是維持在1這一塊,也就是非常的快,你有多少條數據,我都沒有問題,都不會影響我的處理速度。目前來說,O[1]是最快的時間複雜度算法。棧和隊列都可以達到O[1],不管有多少數據,只要它存的下,我就可以用O[1]的速度把它取出來,以最快的速度把它取出來。

發佈了63 篇原創文章 · 獲贊 16 · 訪問量 4890
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章