数据结构 引言
什么是IT?(測重技術)
1.信息技術(英語:Information Technology,縮寫:IT)也稱信息和通信技術(Information and Communications Technology,ICT),是主要用于管理和處理信息所采用的各種技術總稱,主要是應用計算器科學和通信技術來設計、開發、安裝和部屬信息系統及應用軟件。
2.在商業領域中,美國信息技術協會(ITAA)定義信息技術為“對于以計算器為基礎之信息系統的研究、設計、開發、實現、維護或應用。”此領域相關的任務包括網絡管理、軟件開發及安裝、針對組織內信息技術生命周期的計劃及管理,包括軟硬件的維護、升級和更新。
IT技術的前景
1.物聯網 物物相連的互聯網
2.豐富多彩的WEB應用
3.海量又有效率的大數據
4.計算與服務的分離--云計算 (超級計算機)
5.區塊鏈技術--比特幣與新人民幣
6.人工智能開啟智慧2.0時代
現代計算機的祖先
1.計算機的英文原詞“computer”是指從事數據計算的人。而他們往往都需要借助某些機械計算設備或模擬計算機。例如算籌、算盤。623年德國博學家Wilhelm Schickard率先研制出了歐洲第一部計算設備,這是一個能進行六位以內數加減法,并能通過鈴聲輸出答案的“計算鐘”。使用轉動齒輪來進行操作。
2.查爾斯·巴貝奇于1820年構想和設計了第一部完全可程序化計算機。但由于技術條件、經費限制,以及無法忍耐對設計不停的修補,這部計算機在他有生之年始終未能問世。約到19世紀晚期,許多后來被證明對計算機科學有著重大意義的技術相繼出現,包括打孔卡片以及真空管。德裔美籍統計學家赫爾曼·何樂禮設計了一部制表用的機器,其中便應用打孔卡片來進行大規模自動數據處理。
在20世紀前半葉,為了迎合科學計算的需要,許多專門用途的、復雜度不斷增長的模擬計算機被研制出來。這些計算機都是用它們所針對的特定問題的機械或電子模型作為計算基礎。1930-1940年代,計算機的性能逐漸強大并且通用性得到提升,現代計算機的關鍵特色被不斷地加入進來。
3.1941年夏天誕生的阿塔納索夫-貝瑞計算機是世界上第一部電子計算機,它使用了真空管計算器,二進制數值,可復用內存;在英國于1943年被展示的神秘的巨像計算機(Colossus computer),盡管程序化能力極為有限,但是它使人們確信使用真空管既值得信賴,又能實現電氣化的再編程;哈佛大學的馬克一號;以及基于二進制的ENIAC,全名為電子數值積分計算器,這是第一部通用意圖的計算機,但由于其結構設計不夠彈性化,導致對它的每一次再編程都要重新連接電子線路。
?
現代計算機--馮·諾依曼式計算機
存儲程序計算機在體系結構上主要特點有:
未來計算機
1.能識別自然語言的計算機
2.高速超導計算機
3.激光計算機
4.分子計算機
5.量子計算機
6.DNA計算機
?
計算機科學的范圍(測重理論)
1.計算機科學(英語:computer science,有時縮寫為CS)是系統性研究信息與計算的理論基礎以及它們在計算機系統中如何實現(英語:implementation)與應用的實用技術的學科。它通常被形容為對那些創造、描述以及轉換信息的算法處理的系統研究。
2.數據結構和算法:算法指定義良好的計算過程,它取一個或一組值作為輸入,經過一系列定義好的計算過程,得到一個或一組輸出。算法是計算機科學研究的一個重要領域,也是許多其他計算機科學技術的基礎。算法主要包括數據結構、計算幾何、圖論等。除此之外,算法還包括許多雜項,如模式匹配、部分數論等。
3.計算理論:按照Peter J. Denning的說法,計算機科學的最根本問題是“什么能夠被有效地自動化?”計算理論的研究就是專注于回答這個根本問題,關于什么能夠被計算,去實施這些計算又需要用到多少資源。為了試圖回答第一個問題,遞歸論檢驗在多種理論計算模型中哪個計算問題是可解的。而計算復雜性理論則被用于回答第二個問題,研究解決一個不同目的的計算問題的時間與空間消耗。
著名的“P=NP?”(組合爆炸)問題,千禧年大獎難題之一,是計算理論的一個開放問題。
4.信息論與編碼理論:信息論與信息量化相關,由克勞德·香農創建,用于尋找信號處理操作的根本極限,比如壓縮數據和可靠的數據存儲與通訊。編碼理論是對編碼以及它們適用的特定應用性質的研究。編碼(code)被用于數據壓縮,密碼學,前向糾錯,近期也被用于網絡編碼。研究編碼的目的在于設計更高效、可靠的數據傳輸方法。
5.編程語言和編譯器和形式化方法等等
計算機系統層次與結構
1.硬件層
?真實存在于與馮 諾依曼體系架構當中
2.匯編層
?低級語言(機器語言),也稱為匯編語言,用來與硬件層溝通。
3.操作系統層
?相當于管家,管理匯編語言,使其形成體系,用來屏蔽CPU的差距
4.虛擬機層
?屏蔽操作系統的差異,實現跨平臺語言
5.軟件應用層
各結構的相關關系:
硬件層為底層系統,軟件應用層為最高層系統。低層系統為高層系統提供基礎,而高層系統依賴于低層系統。
操作系統
1.操作系統(英語:operating system,縮寫作?OS)是管理計算機硬件與軟件資源的計算機程序,同時也是計算機系統的內核與基石。操作系統需要處理如管理與配置內存、決定系統資源供需的優先次序、控制輸入與輸出設備、操作網絡與管理文件系統等基本事務。操作系統也提供一個讓用戶與系統交互的操作界面。
2.常見的操作系統:
DOS,MS-Windows,Unix,Linux,BSD,Android,IOS
虛擬機與匯編技術
1.匯編技術
編譯型語言:一般需要通過編譯(compile)、鏈接(linker)兩個步驟。
編譯:源碼--->編譯器(compiler)--->機器碼
鏈接:把各個模塊的機器碼串聯起來形成可執行文件。
代表語言:C、C++、Pascal、Object-C以及最近很火的蘋果新語言swift。
解釋型語言:不需要編譯,只需將字節碼(二進制)(只有虛擬機VM能識別)轉換為能讓CPU識別的機器碼。
代表語言:JavaScript、Python、Erlang、PHP、Perl、Ruby等
注意:C語言也是解釋型語言,但99.999%都是編譯型語言。
按編譯可分為動態語言和靜態語言。
動態語言:依賴于VM,在運行時可根據某些條件改變自身結構。主要在于代碼結構的變化。
代表語言:Java、Python、C#、Object-C等
靜態語言:不依賴VM,直接編譯,具有編譯型語言的特性。
代表語言:C、C++等
按類型可分為動態類型語言和靜態類型語言。
動態類型語言:是指在運行期間做類型檢查的語言,說的是數據類型。它不是在編譯階段決定,是將類型綁定延后到運行階段。
代表語言:Python、JavaScript、Ruby、PHP等
靜態類型語言:是在編譯期間確定的,即運行之前,編寫代碼時要明確確定變量的數據類型。(數據類型不可變)
代表語言:C、Java、C++、C#等
了解以上各類語言的同時,也需區分跨語言的平臺和跨平臺的語言。
跨語言的平臺:.NET
.NET是微軟為了抗衡Java做出的對策,它與Windows系統密切相關,包括了很多以前的語言,比如C#、C++,而這些語言都可以在.NET平臺上使用。
跨平臺的語言:以Python、Java為例。Python與Java都是直接面向虛擬機,而不是面向CPU;并且Python與Java均是先編譯在執行的語言,它們可在所有安裝了Python與Java的虛擬機電子設備上運行。
2.虛擬機
人機交互的基本工具--程序設計語言
1.語言的定義
2.程序設計語言
人與機器約定(規定)好的一套符號規則,在符號規則中有一定確定的信息,這些信息包括控制信息與數據信息。所謂的符號規則類似于數字、音頻、視頻等。
3.常用的程序設計語言
4.程序語言的發展歷史,非結構化到結構化的躍遷
結構可分為順序結構、分支結構、循環結構
程序的概念,離散思想與所基于的數學基礎
1.程序的定義?軟件 ?應用 ?
2.離散思想與數學基礎
?
算法與數據結構概述
前世今身
人們在日常生活與生產的過程中,總是會遇到各種各樣不理解的事物與難以理順過程的問題。如何解決這兩者,是擺在人面前的一個障礙。為了解決前者,我們會用各種各樣的概念去描述一個事物,在描述的過程中,我們會對它的性質加以研究,從而區分出它的特點;而對于后者,我們則會在充分認識事物對象的基礎上去找一個流程模型以解決過程的問題。這兩者是很自然相關的。同樣,信息技術的處理對象是信息,而在計算機與通訊的各種元件上,信息表示為各種各樣的數據,無論是模擬的還是數字的。在處理數據的時候,如何描述數據與設計過程就是我們主人公————數據結構與算法要做的事情。簡而言之,數據結構描述數據,而算法則是解決數據問題的過程。
定位應用
1.數據結構
數據結構解決數據的描述問題。也就是說,任何待處理的數據對象必須先找到合適的結構去描述,然后才能在計算機系統里處理它。在流行的高級語言中,如Java、python等都提供了很常用的數據結構,例如各種數據與集合框架。
2.算法
數據得以描述,目的是為了解決問題。如何針對各種各樣的數據結構與問題規模去設計不同的過程解決特定的問題,這就是算法的藝術。鑒于在一個計算系統中計算資源的稀缺性,我們要設計不同的算法并且加以比較,從而選取最合適問題的算法方案去提升程序的經濟性。算法如此重要,從最基本的對數據的排序問題,以及最近流行的AI技術,算法的活力從未停滯。
3.編程之禪
問題 —> 數據結構+算法 == 程序 —> 解決問題
?
轉載于:https://www.cnblogs.com/Chestnut-g/p/10306084.html
總結
- 上一篇: Java8学习系列之匿名函数Lambda
- 下一篇: python编程规范