讀書筆記 - 演算法之美
1. 最優停止理論 - 如何選擇停止觀望的時機
也就是最優停止問題(源於“祕書問題”),答案很簡單,就是37%(其實是1/e, 35%-40%)。最優停止問題有男性選擇約會物件、女性挑選求婚者、租房等。
在所有的最優停止問題中,最大的難點不在於選擇哪一種可選方案,而是確定自己需要考慮多少種方案。
遵循這個法則,一般取得最理想結果的可能性就非常接近於最高值。
2. 每種文化的社會偏愛都會對社會的形式系統產生影響。
例如,在我們的心中國際象棋是中世紀歐洲人的象徵,但是實際上國際象棋起源於8世紀的印度。
3. 具體的37法則,從觀察期切換到行動期的時間點一般在37%左右
在考察前37%的申請人時,不要接受任何人的申請。然後,只要任何一名申請人比前面所有人選有優秀,就要後不猶豫地選擇他/她。
就像做軟體技術選型時候,過了觀察期,馬上行動。
奇怪的數學對稱性。
4.
相關推薦
讀書筆記 - 演算法之美
1. 最優停止理論 - 如何選擇停止觀望的時機 也就是最優停止問題(源於“祕書問題”),答案很簡單,就是37%(其實是1/e, 35%-40%)。最優停止問題有男性選擇約會物件、女性挑選求婚者、租房等。 在所有的最優停止問題中,最大的難點不在於選擇哪一種可選方案,而是確定自己需要考慮多少種方案。 遵循這
資料結構與演算法之美專欄學習筆記-排序(上)
排序方法 氣泡排序、插入排序、選擇排序、快速排序、歸併排序、計數排序、基數排序、桶排序。 複雜度歸類 氣泡排序、插入排序、選擇排序 O(n^2) 快速排序、歸併排序 O(nlogn) 計數排序、基數排序、桶排序 O(n) 演算法的執行效率 1. 最
資料結構與演算法之美專欄學習筆記-排序(下)
分治思想 分治思想 分治,顧明思意就是分而治之,將一個大問題分解成小的子問題來解決,小的子問題解決了,大問題也就解決了。 分治與遞迴的區別 分治演算法一般都用遞迴來實現的。分治是一種解決問題的處理思想,遞迴是一種程式設計技巧。 歸併排序 演算法原理 歸併的思想 先把陣列從中間分
資料結構與演算法之美專欄學習筆記-線性排序
線性排序 線性排序的概念 線性排序演算法包括桶排序、計數排序、基數排序。 線性排序演算法的時間複雜度為O(n)。 線性排序的特點 此3種排序演算法都不涉及元素之間的比較操作,是非基於比較的排序演算法。 對排序資料的要求很苛刻,重點掌握此3種排序演算法的適用場景。 桶排序 演算法
資料結構與演算法之美專欄學習筆記-排序優化
選擇合適的排序演算法 回顧 選擇排序演算法的原則 1)線性排序時間複雜度很低但使用場景特殊,如果要寫一個通用排序函式,不能選擇線性排序。 2)為了兼顧任意規模資料的排序,一般會首選時間複雜度為O(nlogn)的排序演算法來實現排序函式。 3)同為O(nlogn)的快排和歸併排序相比,
資料結構與演算法之美專欄學習筆記-陣列
什麼是陣列 陣列(Array)是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。 線性表 線性表就是資料排成像一條線一樣的結構。 常見的線性表結構:陣列,連結串列、佇列、棧等。 非線性表有:二叉樹、圖、堆等。 連續的記憶體空間和相同型別的資料 優點:兩限制使得
資料結構與演算法之美專欄學習筆記-複雜度分析
複雜度分析 什麼是複雜度分析 資料結構和演算法解決是“如何讓計算機更快時間、更省空間的解決問題”。 因此需從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。 複雜度描述的是演算法執行時間(或佔用空間)與資料規模的增長關係
資料結構與演算法之美專欄學習筆記-二分查詢(下)
四種常見的二分查詢變形問題 查詢第一個值等於給定值的元素 //查詢第一個等於給定值的元素 public static int BSearch2(int[] a, int n, int value){ //定義陣列頭尾索引 int low = 0, high = n - 1;
資料結構與演算法之美專欄學習筆記-跳錶
跳錶的概念 對連結串列建立n級索引,例如每兩個結點提取一個節點到上一層,稱之為索引層。 圖中的down表示down指標,指向下一級結點 跳錶的時間複雜度 跳錶的高度 跳錶的高度是log2n。 跳錶的時間複雜度 跳錶中查詢某個資料的時間複雜度是O(logn)。
資料結構與演算法之美專欄學習筆記-雜湊演算法
雜湊演算法的定義和原理 將任意長度的二進位制串對映為固定長度的二進位制串。 這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制串就是雜湊值。 設計一個優秀的雜湊演算法需要滿足: 從雜湊值不能反向推匯出原始資料(所以雜湊演算法也叫單向雜湊演算法); 對輸入資料非常敏感,哪怕原始
資料結構與演算法之美專欄學習筆記-二叉樹基礎(上)
樹 節點的定義 樹中的元素稱之為節點 高度的定義 節點的高度:節點到葉子節點的最長路徑 樹的高度:跟節點的高度 深度的定義 根節點到這個節點所經歷的邊的個數 層的定義 節點的深度+1 二叉樹 滿二叉樹 除了葉子結點外每個節點都有左右兩個子節點 完全二叉樹 葉子結
《資料結構與演算法之美》專欄閱讀筆記5——散列表和雜湊函式
這應該是看完最呆(沒有想到的那種呆~)的一個小章節了,給作者鼓掌,講的好好。果然抽象能力才是王道 文章目錄 1、散列表 1.1、小概念 1.2、雜湊函式 1
《資料結構與演算法之美》專欄閱讀筆記4——二分查詢
找呀找呀找朋友 文章目錄 1、二分查詢 2、變形的二分查詢 2.1、查詢第一個、最後一個值等於給定值的元素 2.2、查詢第一個大於等於、最後一個小於等於給定值
《資料結構與演算法之美》專欄閱讀筆記3——排序演算法
上週排計劃,說花個一天的時間看完好了(藐視臉)~然後每天回家看一會,看了一個星期……做人,要多照鏡子好嘛 文章目錄 1、簡單排序 1.1 如何分析排序演算法
《資料結構與演算法之美》專欄閱讀筆記2——線性表
換個方式來寫筆記,最近啃完了《Thinking in Java》,想要在看專欄的時候多做點擴充套件性的東西,比如把難撩的泛型加進來做實現,程式碼還是要寫起來才曉得怎麼寫更酷。總之最近看書的過程中、搜尋答案的過程中發出了很多“哇~超厲害!超酷!我也要這樣棒棒噠!”的嘆聲。新的開始,
《資料結構與演算法之美》專欄閱讀筆記1——複雜度分析
蹭可愛的男朋友買的極客時間的專欄【資料結構與演算法之美】,作者讓大家定個學習的flag。o( ̄▽ ̄)o,好吧,最近喜歡做思維導圖(純粹因為好看!),所以flag就是每篇都要寫讀書筆記咯~ 文章目錄 1、如何抓住重點,系統
資料結構與演算法之美專欄學習筆記-二叉樹基礎(下)
二叉查詢樹 Binary Search Tree 二叉查詢樹的定義 二叉查詢樹又稱二叉搜尋樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的節點的值都大於這個節點的值。 二叉查詢樹的查詢操作 二叉樹類、節點類以及查詢方法的程式碼實現
資料結構與演算法之美 課程筆記二 複雜度分析(上)
資料結構和演算法本身解決的是“快”和“省”的問題,即如何讓程式碼執行得更快,如何讓程式碼更省空間。所以,執行效率是演算法一個非常重要的考量指標。衡量演算法的執行效率最常用的就是時間和空間複雜度分析。 一、為什麼需要複雜度分析? 把程式碼跑一遍,通過統計、監控來得到演算法執行的時間和佔用的記憶
資料結構與演算法之美 課程筆記一 如何抓住重點,系統高效地學習資料結構與演算法?
什麼是資料結構?什麼是演算法? 從廣義上講,資料結構就是指一組資料的儲存結構。演算法就是操作資料的一種方法。 從狹義上講,是指某些著名的資料結構和演算法,比如佇列、棧、堆、二分查詢、動態規劃等。 那資料結構和演算法有什麼關係呢? 資料結構和演算法是相輔相成的。資料結構是為演算法服務的
《資料結構與演算法之美》專欄閱讀筆記2
換個方式來寫筆記,最近啃完了《Thinking in Java》,想要在看專欄的時候多做點擴充套件性的東西,比如把難撩的泛型加進來做實現,程式碼還是要寫起來才曉得怎麼寫更酷。總之最近看書的過程中、搜尋答案的過程中發出了很多“哇~超厲害!超酷!我也要這樣棒棒噠!