算法+數據結構(一)

數據結構+算法

(原創:黑小子-餘)

前言:小編我從小數學並很差,每次考試都是特碼分數,跟小夥伴比算數也經常慢一拍,父親經常恨子不成器。從小就不自信的我,以爲本身智商總比別人差一點,直到成年後,我發現真是如此,每一個夜深人靜的時候,深深地懷疑本身,哈哈!其實,小編我是一個很正能量的人,雖然踏出學堂、初入社會找工做並不順利,並且生活中發生不少事也並不如意,找工做的那段時間,也懂得了不少,我相信這些經歷都會使我更增強大,我並不怪罪這個社會,反而,我把這些都歸咎在本身身上,在本身身上找緣由,並作出一些應對策略和改變。前端

 

一、自律:把自律當成一種習慣,而不是對本身的一種約束。當你堅持一段時間後,不管是編程也好,仍是生活也罷,總會在某些有一些小的提高,你會有成就感,它們會化成你的動力。java

二、堅持:堅持是一個長久的過程,有些人想一天就想把編程學會,固然小編我也想,其實否則,每每欲速則不達,事與願違。其實小編堅持最長久的事是喜歡一我的,哈哈。算法

三、心態:不少人都死在這個地方,小編我當初也在這個地方死過。在學校編程的時候,if判斷總是整不會,別人教也不會,真的是愚蠢至極,都恨本身不成器了。因而,我就去和咱們班主任談談心,咱們管她叫慧姐,我跟她說:我是否是智商有問題。慧姐給我一頓批,我失落的回到教室,始終沒法證實本身在智商上有問題這一結論。說到這裏,我本身都笑了。編程

 

其實,我也是個小白,菜的要命的那種,可是我又不肯放棄,並且,我也喜歡寫寫文章,因此有了這個興趣,又有了繼續下去的動力,證實本身!本文有借鑑, dcc939705214後端

第一章 (一)

1、算法是個什麼鬼?數組

1. 從新定義問題,結構化描述數據結構

       2. 根據重定義,歸類問題函數

       3. 根據問題類別,作經驗匹配spa

       4. 根據匹配結果,分支處理:若匹配,採用經驗方法;若匹配不上,設計開發新方法設計

       5. 迭代更新經驗庫,加強面向將來問題的能力

 

簡單來講,算法本質是:解決某類問題的方法。若是方法已經在經驗庫裏了,直接拿來主義,也就是「既有算法」;若是不在,那麼設計開發的新方法,新方法就是「新算法」。固然還有一種狀況:雖然經驗庫裏有針對該類問題的方法了,可是設計開發了一個更有效的新方法,那麼也稱爲「新算法」。

2、什麼是「更有效的算法」?

小編覺得,更有效的算法,是節省開銷,不管是時間上仍是經濟仍是效率上,減小程序應用的代價。算法其實從學科分類上講,屬於計算數學,計算數學屬於應用數學。講到數學,小編我頭又開始疼了,不做太多詮釋,小編認爲,理科生比文科生更適合學編程。小編我把本身規劃在文科生!

3、算法有什麼用?

世間萬物,皆爲對象,java是面向對象編程,凡是生活中出現的事物,利用編程均可以模擬場景。當然,生活中到處存在算法,不管是點外賣,逛超市,作生意,都須要與算法打交道。真正的是,從上面對解決現實問題的過程方法論的描述中,其實已經能夠看出算法的價值就在於:經驗的重用IT行話就是「不要重複製造輪子」。

4、算法的應用場景和示例

應對電燈不工做的算法——代碼方式

 

應對電燈不工做的算法——流程圖方式

 

 

應對電燈不工做的算法——天然語言方式

一、首先檢查電源是否接好了:沒有接好,接上。

二、若是接上了仍然不工做,看看燈泡是否燒壞了:若是是,換個新燈泡

三、若是燈泡沒有燒壞,修理燈泡

 

 

5、數據結構又是什麼鬼?

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。一般狀況下,精心選擇的數據結構能夠帶來更高的運行或者存儲效率。數據結構每每同高效的檢索算法索引技術有關。(這個狹義就有些廣了)在許多類型的程序的設計中,數據結構的選擇是一個基本的設計考慮因素。許多大型系統的構造經驗代表,系統實現的困難程度和系統構造的質量都嚴重的依賴因而否選擇了最優的數據結構。許多時候,肯定了數據結構後,算法就容易獲得了。有些時候事情也會反過來,咱們根據特定算法來選擇數據結構與之適應。不論哪一種狀況,選擇合適的數據結構都是很是重要的。

選擇了數據結構,算法也隨之肯定,是數據而不是算法是系統構造的關鍵因素。這種洞見致使了許多種軟件設計方法和程序設計語言的出現,面向對象的程序設計語言就是其中之一。

上面談敘那麼多,就是表達一個觀點:算法是要配合數據結構的,拋開數據結構談算法就是無源之水、無根之樹。

著名的圖靈獎得主:尼古拉斯·沃斯 提出那個著名的等式:程序 = 算法 +數據結構。

經常使用結構

數組:在程序設計中,爲了處理方便, 把具備相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱爲數組。在C語言中, 數組屬於構造數據類型。一個數組能夠分解爲多個數組元素,這些數組元素能夠是基本數據類型或是構造類型。所以按數組元素的類型不一樣,數組又可分爲數值數組、字符數組、指針數組、結構數組等各類類別。

棧:是隻能在某一端插入和刪除的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,須要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。

隊列一種特殊的線性表,它只容許在表的前端front)進行刪除操做,而在表的後端(rear)進行插入操做。進行插入操做的端稱爲隊尾,進行刪除操做的端稱爲隊頭。隊列是按照「先進先出」或「後進後出」的原則組織數據的。隊列中沒有元素時,稱爲空隊列。

鏈表:是一種物理存儲單元上非連續、非順序的存儲結構,它既能夠表示線性結構,也能夠用於表示非線性結構,數據元素的邏輯順序是經過鏈表中的指針連接次序實現的。鏈表由一系列結點(鏈表中每個元素稱爲結點)組成,結點能夠在運行時動態生成。每一個結點包括兩個部分:一個是存儲數據元素的數據域,另外一個是存儲下一個結點地址的指針域。

樹:是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關係N,N知足 如下條件:

1)有且僅有一個結點 K0,他對於關係N來講沒有前驅,稱K0爲樹的根結點。簡稱爲根(root)。  2)除K0外,K中的每一個結點,對於關係N來講有且僅有一個前驅。

3)K中各結點,對關係N來講能夠有m個後繼(m>=0)。

圖:圖是由結點的有窮集合V和邊的集合E組成。其中,爲了與樹形結構加以區別,在圖結構中經常將結點稱爲頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具備相鄰關係。

堆:在計算機科學中,堆是一種特殊的樹形數據結構,每一個結點都有一個值。一般咱們所說的堆的數據結構,是指二叉堆。堆的特色是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。

散列表:若結構中存在關鍵字和K相等的記錄,則一定在f(K)的存儲位置上。由此,不需比較即可直接取得所查記錄。稱這個對應關係f爲散列函數(Hash function),按這個思想創建的表爲散列表

 

 

總結:看到這裏,我相信,你多少對算法和數據結構有一點點了解,其實算法很廣義,須要你這種有夢想的人去探索。我最初寫博客,也只是想對本身的理解作一個記錄,若是本文有不合格的地方,能夠指正,三人行,必有我師!

 

 

qq2931445528

-----------------------------------------------------------END----------------------------------------------------------------

相關文章
相關標籤/搜索