忍耐和堅持雖是痛苦的事情,但卻能漸漸地爲你帶來好處。 ——奧維德html
1、學習目標python
· 回顧在計算機科學、編程和問題解決過程當中的基本知識;算法
· 理解「抽象」在問題解決過程當中的重要做用;編程
· 理解並實現抽象數據結構;網絡
· 複習Python編程語言數據結構
2、寫在前面框架
自第一臺電子計算機使用線路和開關傳達人類的指令以來,咱們編程的思考方式有了很大的改變,在不少方面,計算機技術的發展爲計算機科學家提供了衆多的工具和平臺去實現他們的想法。高性能理器,高速網絡和大內存使得計算機研究者必須掌握在這樣複雜的螺旋式通道中的編程能力,儘管計算機發展變幻無窮,可是一些基本的原則是不會改變的,計算機科學所關注的是如何使用計算機去解決問題。你花了大量的時間去學習一些基本的問題解決方式而且指望在處理問題的能力上信心十足,你也知道學習些程序的困難。大型問題的複雜度和相應的解決方案大大超過了與之相關的基礎問題的處理方式。dom
本章重點說明兩個方面的內容。第一,回顧在計算機科學中研究數據結構和算法所必須遵循的框架,特別是要知道爲何學習和要理解這些主題能幫助咱們更好地解決問題。第二,複習一下Python語言。儘管這裏只是概要介紹和一些簡短的例子,可是這回貫穿整所有的內容。數據結構和算法
3、什麼是計算機科學(Computer science)編程語言
Computer science is the study of problems, problem-solving, and the solutions that come out of the problem-solving process. Given a problem, a computer scientist’s goal is to develop an algorithm, a step-by-step list of instructions for solving any instance of the problem that might arise. Algorithms are finite processes that if followed will solve the problem. Algorithms are solutions.
……
Solutions are considered independent from the machine.
計算機科學是關於研究問題、問題解決過程以及問題解決過程的方案。提出一個問題,計算機科學家的目標就是找到一個算法,這個算法用來指導如何一步一步解決這一類問題。算法就是一種特定的處理過程,遵循這個過程就能解決這個問題,也就是說算法就是解決方案。
Computer science, as it pertains to the problem-solving process itself, is also the study of abstraction. Abstraction allows us to view the problem and solution in such a way as to separate the so-called logical and physical perspectives.
計算機科學的研究也是抽象的研究,抽象使咱們看待問題的方式從具體(physical)中分離出來,從而上升到邏輯(logical)的層面。
舉個例子,當你在使用Python中的math模塊的,當咱們導入這個模塊,咱們能夠進行下面的處理:
上面這個例子就是一個過程的抽象(procedural abstraction),咱們不須要知道sqrt函數是怎樣實現的,咱們惟一須要知道的如何使用這個函數。若是咱們正確地導入了相關的模塊,就能夠假設這個函數所提供的結果是正確的,能夠肯定確定是有人實現了求平方根的函數,可是咱們並不關心這個問題,一般咱們將這種狀況抽象成一種「黑盒」模型:
We simply describe the interface: the name of the function, what is needed (the parameters), and what will be returned. The details are hidden inside。
咱們只對接口進行描述:函數的名字,必要的條件(參數)以及函數的返回值。具體的細節被隱藏在內部。
4、什麼是編程(Programming)
Programming is the process of taking an algorithm and encoding it into a notation, a programming language, so that it can be executed by a computer. Although many programming languages and many different types of computers exist, the important first step is the need to have the solution. Without an algorithm there can be no program.
編程就是講算法轉換爲符號(編程語言)以供計算機執行。儘管有衆多的編程語言和不一樣的計算機存在,第一步也是最重要的一步就是找到解決問題的方案,沒有算法就不會有程序。
Computer science is not the study of programming. Programming, however, is an important part of what a computer scientist does. Programming is often the way that we create a representation for our solutions. Therefore, this language representation and the process of creating it becomes a fundamental part of the discipline.
計算機科學不是學習編程,編程倒是計算機科學家的一項重要的工做。編程是咱們創建的解決方案的具體表現,因此編程語言是基礎。
在計算機中全部的數據項表現爲一種二進制串,爲了使這些二進制變得有意義,咱們須要相應的數據類型(data types)。數據類型就是咱們對二進制的交互接口,較底層的內置數據類型爲算法的開發創建了基礎。
The difficulty that often arises for us is the fact that problems and their solutions are very complex. These simple, language-provided constructs and data types, although certainly sufficient to represent complex solutions, are typically at a disadvantage as we work through the problem-solving process. We need ways to control this complexity and assist with the creation of solutions.
5、爲何要學習數據結構和抽象數據類型
在處理問題的時候爲了防止陷入細節,經過在問題空間(problem domain)中建立數據模型能夠更高效地處理問題,有更多的經歷去關注問題的自己。
An abstract data type, sometimes abbreviated ADT, is a logical description of how we view the data and the operations that are allowed without regard to how they will be implemented.
抽象數據類型簡稱ADT,是一種對數據的邏輯抽象,對他的操做方法無需關注具體的實現。
爲了提供這種級別的抽象,咱們須要多數據進行封裝(encapsulation)。具體就是封裝實現的具體細節,確保對用戶不可見,這就是信息隱藏(information hiding),以下圖:
若是你是Python的初學者,或者對不少的概念感到陌生,建議你學習一下Python的基本語法和經常使用的模塊,這裏提供一些資源以供學習:
Python 官方文檔:https://docs.python.org/3/reference/index.html
Python 文檔(中文):http://python.usyiyi.cn/
廖雪峯的Python教程[推薦]:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
笨辦法學python:http://download.csdn.net/detail/csulennon/8944755
學習資料不求多,好好看一個精品系列就行,切忌東一榔頭西一錘子。