算法與數據結構(面向對象思想)

算法與數據結構和編程之間關係

計算機就是算法與數據結構,

當你選擇搜索這類的文章的時候,你已經在翻大山了

編程就是當你翻過一座山的時候,你發現前面還有一座更高的山.

 

LZ從事java工作一年了,最近聽見同事之間在討論這個東西,說東說西的都有,我就以我一年來的開發經驗嘗試着去說一說算法和數據結構與編程的奇妙關係.

比較官方的說法就是(來自百度):

算法:   

        算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能爲空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出停止於一個終態。一個狀態到另一個狀態的轉移不一定是確定的。隨機化算法在內的一些算法,包含了一些隨機輸入.

數據結構:  

       數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。通常 情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率.

 

有些新學習編程的小夥伴肯定會蒙圈,特別是對數學不好的,像我就是數學學渣,那麼下面請跟着學渣的視角進入編程的世界,

先說數據結構,畢竟算法也得有東西算,才又算法,所謂先有雞後有蛋,數據結構,既然是結構,裏面肯定是有不同的數據的,對我而言,與其叫數據結構,不如叫數據流,數據流中包含了各種數據,數據結構構成流,流亦是數據結構,面向對象就是,萬物皆數據,以流的形式呈現.

首先要想明確數據流最重要就是兩個詞

數據: 單個元素,也可以是數據流,

數據流,: 多種數據融合在一起

 

比如LZ舉個例子,我們儘量一個現實的物體來描述,並且數據流很小的,比如一盒香菸,把香菸比作數據流,它的數據結構既是紙,菸草,再細分構成紙數據流的又是樹皮,水,木漿,數據流中包含數據流,每一種元素細分都是一種數據流.在大的數據流面前,小的數據流又變成了大數據流的數據,呈現的形式就一包香菸.

再比較大的,例如一棟大樓,從數據分析,表面上看它是由牆壁,磚頭,鋼材等多種數據,這着數據又是數據流,因爲牆壁又包含了多種數據,水泥,瓷磚,各種數據組合在一起就形成了一棟大廈;

一個好的數據結構, 可以省略很多算法, 比如現在有一個需求, 在首頁顯示最新好友, 還可以查看歷史好友, 每天最多邀請5位好友,邀請好友獎勵贈送獎勵, 五個以後就不贈送;1, 第一次設計是一個map結構, key是一個時間戳 yyyy-MM-dd  value是一個Arraylist, 每次添加好友時, 拿到當前時間戳, 然後去好友map中去取這個key, 再判斷value的長度是否達到了5個長度, 否則就不進行贈送了, 現在好友列表有了,是一個map結構, 但是我要從這個結構裏面拿出來最新的五個好友就有點困難了, 我需要拿到所有的key, 判斷哪個key, 距離當前的時間最近, 然後再取得value, value是一個Arraylist, 再判斷這個集合裏面誰在這一天中誰前誰後,  在取最新的好友的過程中, 用了很多算法, 不方便,  後來升級了成一個LinkedList, 新添加的在前面, 後添加的在後面,把長度控制在五個, 長度超過五個了就不贈送獎勵, 但我需要獲取最新的好友列表時, 直接把這個結構拿出來就行了, 不用進行任何其他的從操作, 提升了, 程序運行效率.

 

現在就可以說算法了

有人說算法和函數不一樣

算法是自己寫的,函數是用來調用的

那什麼樣的人才是寫算法的呢,現在的編程語言,誰不用API,都是在用之前的人寫的代碼,加之自己的分支,循環,判斷,得到一種結果,那別人的代碼也是建立在別人的別人的代碼之上寫的,那恐怕只有發明計算機的人才是寫算法的人了,

 

LZ認爲,傳入多個參數,輸出多個參數和結果,這個過程就叫算法和函數,算法=函數.

回到之前舉的例子,一棟大樓,雖然是由各種數據構成的,但是數據都是散開的,數據無法自己聚合在一起,形成數據流,

不會自己變成我們想要的結果,

而算法就是中間的粘合劑,中間關口,它決定傳入的參數,對數據流進行,改修,留下需要的,拋棄不需要的,將數據和其他數據組成在一起,形成數據流,將數據流和數據流組成在一起,形成新的數據流,將數據流拆分成數據,再聚合,這就是算法的作用,現在的人不都是喜歡講靈魂嗎? 算法就是數據流的靈魂,沒有算法的數據實時沒有靈魂的,

 

所有編程的人員的,不論哪種語言,第一個案例應該都是"你好 世界",LZ這裏以JAVA爲例,”

System.out.println(“Hello world”);

這就是將數據原樣輸出到控制檯,當然避開jdk內部的算法,安全檢查,編譯成字節碼文件再由虛擬機運行,發送給CPU執行指令

 

再寫一個帶算法的,不用多高深

int a = 10;

if(a < 9){

System.out.println(a);

}

 

我們定義了參數,但是我們有選擇權不輸出,就是算法,單純的數據沒有算法進行改造沒有太大意義的

 

現在的web應用比如說一個去某寶上面選擇一個商品加入購物車,你選擇的商品,你的賬戶信息,等各種信息以數據流的形式到服務器,服務器通過算法,檢查數據流的安全性,從數據流獲取想要的數據,決定哪些數據需要保存起來,將數據經過重構,考慮是否需要返回給你,再已新的數據流的形式返回給你,客戶端獲取數據流,在通過算法,聚合數據流,包裝數據流,呈現出視圖,就是你看見的商品已經再購物車的效果了

 

此文章不做任何標準,只代表LZ自己的見解,爲算法和數據結構多做出一種解釋,編程最重要的就是思想碰撞,希望對大家理解算法與數據結構有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章