天天看點

如何認識事物

在一個月明星稀的夜晚,你坐在陽台的躺椅上,手捧着銀瓶梅,看得有滋有味。忽然天空閃過一道異光,一個外星生物蹦到了你面前,指了指你手上的那本書問道:這是什麼?你很想直接回答這是一本書,但這樣對方可能對你發動超能力。那如何才能把「書」這個東西給講明白呢?我們來試一下。書是一種帶有文字和圖像的紙張的集合。它能夠攜帶大量的資訊,不過由于書本身也占用一定的體積,是以當它比較多時也會出現攜帶不友善等問題。人們通常可以在書店、圖書館或朋友之間擷取到書,内容也包羅萬象,包括小說、傳記、科學著作等等。書通常由墨水、紙張、羊皮紙或者其他材料固定在書脊上組成。書的出現跟活字印刷術有很大關系,它使得大規模、高效率地産出書籍成為了可能,在書出現以前,中國古代會把字刻在竹簡上,不過這樣的「書」比較笨重,攜帶的資訊也非常有限。在現代出現了電子書,它不占用實體空間,隻要有相應的電子裝置就能閱讀,解決了實體書笨重不友善攜帶的問題,不過也有人說它少了那種讀紙質書的樂趣。從本質上來說,書能滿足人們的精神需求,也可以通過讀書來交到志同道合的朋友。經過這麼一番簡單解釋之後,是不是把「書是什麼」大概地捋清楚了。看起來有點複雜,了解了下面這個模型之後就會很清晰了。它分為内環和外十字兩部分。下面就來解釋下這個模型。内環先從左上角的「定義」開始說起,解釋「什麼」,比如燈泡:可以在夜間提供照明的裝置。接下來開始闡述「特性」,簡單來說就是優點和缺點,比如書的優點:有質感,有收藏價值,可以記筆記,缺點在于攜帶不是那麼友善,也不環保。了解了特性之後,就自然會想知道由于這些特性,導緻它比較适合哪些場景。最後自然想了解它到底是怎麼實作的,通過這四點,我們對一件事物就有了基本的了解。不過還不夠,這些更多 Focus 在事物本身,我們也要跳出來看一下,于是就有了「外十字」。外十字外十字主要分為 3 部分。History 回答的是為什麼。為什麼會有書,書産生之前是怎樣的形态,有點像産品需求。Related 說明有沒有相關的,一個事物很少會獨立存在,總會有什麼跟它産生關聯,這也友善我們對它産生更全面的認識。Abstract 是對這個事物本身進行抽象,看看能不能提取出本質,這樣看書這個行為甚至可以和玩遊戲關聯起來,因為都能達到精神愉悅。通過這兩部分的結合,對事物的了解就會比較全面了。我們再來做個簡單的測試:什麼是紅黑樹?定義: 一種自平衡二叉查找樹,需要符合 5 條基本要求(篇幅原因,這裡就不列出來了)。特性: 從根到葉子的最長可能路徑不多于最短的可能路徑的兩倍長。同時由于本身就是二查找樹,是以也繼承了它固有的特性,比如查找、插入的時間複雜度都是 O(log n)。場景: 由于相對比較平衡,是以效率較高,C++ STL 中的 map 就是通過它來實作的。實作: 主要是插入和删除。插入時需要先将節點染成紅色,再通過判斷叔父節點的顔色來決定下一步是旋轉還是将祖父節點染成紅色(篇幅原因,就不列出來了)。曆史: 為什麼會産生紅黑樹呢?因為二叉查找樹有一個很大的問題:容易失衡,這就導緻某些場景下效率會很低,是以需要有一個平衡性好一點的二叉查找樹。相關: 類似的平衡性不錯的還有 AVL 樹,比紅黑樹更平衡,不過實作起來也更複雜,插入、删除時的旋轉操作也更多,對平衡性要求特别高的可以考慮 AVL 樹。抽象: 回歸到二叉查找樹的初衷 ,它是一個通用、高效的基礎資料結構,可以演化出 set / map 等更進階的資料結構,也可以用來排序(中序周遊)。其他的事物也可以通過這個模型來認識,這樣就不會隻浮于表面。不妨做一個練習,比如如何認識「如何認識事物」?原文連結:http://mp.weixin.qq.com/s/np9OxXMmi1rGRK2Fbb1CAQ