Sorting in Linear Time Michael Tsai 2013/5/21.

Slides:



Advertisements
Similar presentations
index 目次 ( 請按一下滑鼠,解答就會出現喔 !) 接續下頁解答 3-1 極限的概念.
Advertisements

怎樣才算「識飲識食」? 適當 適量 在日常生活中進食 適當 和 適量 的食物 和飲料。 何謂「適當」? 1. 不偏食,選擇不同種類的食物和飲料, 以吸收不同的營養素。 2. 多進食營養價值高的食物。 3. 避免進食熱量、脂肪、糖份、鹽份和膽 固醇含量過高的食物,以及加工食品 ( 如 罐頭和即食麵.
如何學好數學? 黃駿耀老師
第六章 幼儿园课程.
9·11经典全过程 美国东部时间8点50分,一架载有81名乘客、11名 机组人员的美国航空公司的波音767客机、由波士顿飞
马克思主义哲学发展史(下).
关于精品课程建设的 组织、管理与思考 天津市教育委员会 叶 庆 二〇一〇年三月六日.
食 物 中 毒.
贵州省公务员面试 备考指导 中公教育 面试讲师 刘运龙.
如何挑選吳郭魚 嗨~ 餐旅二乙 4a2m0105 白妤潔 4a2m0122 何姿瑩.
学校春季呼吸道传染病预防知识 连云港市疾病预防控制中心
第三课 中国共产党的历程.
东方生风,风生木,木生酸,酸生肝 ——《素问·阴阳应象大论》 肝.
亲子沟通的艺术 江西师范大学 杨 颖 0791— (办) (手机)
望 诊.
第五章 列宁的新闻论著及其对克思主义新闻学的发展
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
Introduction 基本概念 授課老師:蕭志明
禁毒知识教育 ·.
用“自言自语法”提高学生 英语口头表达能力 李奉栖.
第5章 排序与查找 PART A 《可视化计算》.
解放軍論壇 中共信息戰發展 對我國軍事戰略之影響.
我們最常去的地方還是我的故鄉苗栗, 您知道春天的樟樹是什麼香味嗎?
Performance Evaluation
专题五 高瞻远瞩 把握未来 ——信息化战争 主讲教师:.
学生培养的过程性评价.
第十章 现代秘书协调工作.
前不久看到了这样一则报道:某个大学校园里,一个大学生出寝室要给室友留一张字条,告诉他钥匙放在哪里。可是“钥匙”两个字他不会写,就问了其他寝室的同学,问了好几个,谁也不会写,没办法,只好用“KEY”来代替了。 请大家就此事发表一下自己看法。
IV. Implementation IV-A Method 1: Direct Implementation 以 STFT 為例
也許你很疑惑: 最近升官的同事,專業能力又沒你強! 情場得意的朋友,長的又沒你帥或美! 小曹要交新朋友,為什麼就是比較簡單!
利用共同供應契約 辦理大量訂購流程說明.
課程名稱:資料結構 授課老師:_____________
第九章 排序 概述 插入排序 交换排序 选择排序 归并排序 基数排序 外排序.
Course 4 搜尋 Search.
排序 Sorting.
第十章 排序與搜尋.
第 7 章 陣列 (Array).
Graph 2 Michael Tsai 2012/5/1 連載: 學生上課睡覺姿勢大全
程式撰寫流程.
本章結構 前言 簡單範例-可靠度問題 產生隨機變數值 應用範例分析 模擬誤差分析-輸出資料分析 電腦軟體介紹 隨機亂數產生器
主讲人: 吕敏 } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 } Spring 2012 ,USTC.
詩文的形成 有意義的字詞 句子 段落 一首詩文的形成,是由有意義的字詞組成句子,再由句子組成段落。
String Matching Michael Tsai 2012/06/04.
基數排序法.
Sorting 排序 Bubble Sort O(n2) Insert Sort Selection Sort Quick Sort
第二部分 免疫系统与免疫活性分子 第二章 免疫系统 第三章 免疫球蛋白 第二 部分 第五章 细胞因子 第四章 补体系统.
樹 2 Michael Tsai 2013/3/26.
感謝同學們在加分題建議. 我會好好研讀+反省~
資料結構與C++程式設計進階 排序與搜尋 講師:林業峻 CSIE, NTU 6/ 14, 2010.
第8章 資料排序 資料結構設計與C++程式應用
計算機程式 授課教師:廖婉君教授 第六單元 Arrays
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
Linked Lists Prof. Michael Tsai 2013/3/12.
Hashing Michael Tsai 2013/06/04.
數字系統 資訊工程系 國立清華大學資訊基礎教育 教學改進計畫 數字系統 資訊工程系 /4/22.
String Matching Michael Tsai 2013/05/28.
記帳士考試會計輔導 指導教授: 游 美 老師.
Course 10 削減與搜尋 Prune and Search
演算法時間複雜度 (The Complexity of Algorithms)
Disjoint Sets Michael Tsai 2013/05/14.
演算法分析 (Analyzing Algorithms)
兒童及少年保護、 家庭暴力及性侵害事件、 高風險家庭 宣導與通報
Hashing Michael Tsai 2017/4/25.
Divide and Conquer 3 Michael Tsai 2011/3/11.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
The role of Algorithms in Computing
資料結構 老師:李崇明 助教:楊斯竣.
10107: What is the Median? ★★☆☆☆
Presentation transcript:

Sorting in Linear Time Michael Tsai 2013/5/21

Sorting Algorithm in Linear Time? 上回講過, Comparison-based (比較元素然後交換其順序) sorting的complexity lower bound為Ω 𝑛 log 𝑛 如何突破這個障礙? 不要使用comparison-based的方法 因此可達到𝑂 𝑛 需要利用額外的假設 通常是”以空間換取時間”

例子: 電話排序問題 電話排序假設全部電話號碼有s個種可能 (所有排列組合) 我們有n組電話要排 則使用超大表格排序法需要O(s)的時間 (空間換取時間) Input: {20000002, 89999999, 20000000, …} Index 20000000 空 20000002 … 89999999 Array 有 空 … 共s個

例子: 電話排序問題 如果使用comparison-based sorting平均需要𝑂 𝑛 log 𝑛 假設超大表格排序法所需時間為 𝑐 1 𝑠 假設comparison-based排序法所需時間為 c 2 𝑛 log 𝑛 假設10 𝑐 1 = 𝑐 2 break even point為 s= 10 n log n 假設以台北市電話號碼為例, 𝑠= 10 8 10 8 =10 𝑛 log 𝑛 , n< 10 8 break even point大約為 n=k ×10 6 當n大於此數則non-comparison sorting比較快

Counting Sort 假設: 知道可能出現的所有input種類個數K (而且𝐾=𝑂 𝑛 ) Input array “Cumulative Mass Function” 算小於或等於index的數字出現了幾次 Counting: 算每個數字出現了幾次

Counting Sort 比3小或相等的有7個

Counting Sort 比0小或相等的有2個

注意Counting Sort為stable sort 注意Counting Sort為stable sort. 因為是從最後面依序放入output array, 因此同樣大小的元素會依原本input array中順序放入. Counting Sort

A: input array n: input總個數 B: output array K: 可能出現的input element總數 Counting Sort void CountingSort (int A[], int n, int B[], int K) { int C[K], i, j,; for (i=0;i<K;i++) C[i]=0 for (j=0;j<n;j++) C[A[j]]=C[A[j]]+1; for (i=1;i<K;i++) C[i]=C[i]+C[i-1]; for (j=n-1;j>=0;j--) { B[C[A[j]]]=A[j]; C[A[j]]--; } 𝑂(𝐾) Counting: 數每種element共幾個 𝑂(𝑛) 𝑂(𝐾) “CMF”: 數比每種element小或相等的共幾個 𝑂(𝑛) 從input array最後一個開始依序放入output array 𝑂 𝑛+𝐾 =𝑂(𝑛)

Sorting on several keys 假設K有很多個sub-key 𝐾=( 𝐾 1 , 𝐾 2 ,…, 𝐾 𝑟 ) 則 𝐾 𝑥 ≤ 𝐾 𝑦 iff 𝐾 𝑥,𝑖 = 𝐾 𝑦,𝑖 , 1≤𝑖≤𝑗 𝑎𝑛𝑑 𝐾 𝑥,𝑗+1 < 𝐾 𝑦,𝑗+1 for some 𝑗<𝑟, or 𝐾 𝑥,𝑖 = 𝐾 𝑦,𝑖 , 1≤𝑖≤𝑟 則我們可以有以下的sorting 方法. Most Significant Digit first (MSD) sorting 先依照most significant key sort, 然後依序往least significant key sort過去 Least Significant Digit first (LSD) sorting 先依照least significant key sort, 然後依序往most significant key sort過去 Most significant key Least significant key

Radix Sort 假設:有”多個key” 以個位數排序 以十位數排序 以百位數排序 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436 839 355 457 657 329 355 436 457 657 720 839 注意: 十進位一樣的部分 會照前一回合的順序 (也就是個位數的順序!) 因此用來排序的演算法 必須是stable! 先依照least significant digit sort, 然後依序往most significant key sort過去: Least Significant Digit first (LSD) sorting

Radix Sort 如果先依照most ignificant key sort, 然後依序往least significant key sort過去: Most Significant Digit first (MSD) sorting? 正確的做法必須切分成小的subset再去排序! (因此MSD比較麻煩) 以百位數排序 以十位數排序 329 457 657 839 436 720 355 329 355 457 436 657 720 839 329 720 436 839 355 457 657 329 355 436 457 657 720 839 如果直接使用接下來的十位數排序 會亂掉!

Radix Sort 以個位數排序 以十位數排序 以百位數排序 329 457 657 839 436 720 355 720 355 𝑂(𝑛) 𝑂(𝑛) 𝑂(𝑛) 假設使用Counting Sort在每一回合做排序 d個, d=位數 𝑂(𝑑𝑛)

Bucket Sort 假設: input是從uniform distribution取出來的 同樣bucket的再使用簡單的insertion sort做排序 最後再把各bucket內的元素依序列出即可

Bucket Sort 假設: input是從uniform distribution取出來的 因此分到各個bucket的數量會差不多. 大略計算一下所需的時間: 𝑇 𝑛 =Θ 𝑛 + 𝑖=0 𝑛−1 𝑂( 𝑛 𝑖 2 ) 𝐸 𝑇 𝑛 =E Θ 𝑛 + 𝑖=0 𝑛−1 𝑂 𝑛 𝑖 2 =Θ 𝑛 + 𝑖=0 𝑛−1 𝑂 𝐸[𝑛 𝑖 2 ] =Θ 𝑛 +𝑛 ⋅𝑂 2− 1 𝑛 =Θ(𝑛) 走過每個bucket的時間 每個bucket內insertion sort所需時間 總時間 𝐸 𝑛 𝑖 2 =2− 1 𝑛 (證明過程請見Cormen p202-203)

Today’s Reading Assignment Cormen 8.2, 8.3, 8.4