Advanced Competitive Programming

Similar documents
0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

演算法導入、ソート、データ構造、ハッシュ

Microsoft Word - ACL chapter02-5ed.docx

3. 路徑 (path): 指從一個點經由一串相鄰的邊到達另一個點 4. 行跡 (trace): 如果路徑經過的邊沒有重複, 那這個路徑就是一個行跡 5. 迴路 (circuit): 如果行跡的起點跟終點是同一個點, 那這就是一個迴路 6. 簡單路徑 (track): 如果路徑經過的點沒有重複, 那

Foreword: Graph Theory by CK63rd poao899 圖論, 算是演算法中比較獨立的一個支派, 起源為科科堡的七橋問題 (Seven Bridges of Königsberg) 數學中也有圖論, 在數學中它屬於離散數學 它也可以說是研究一維的拓樸學的一門學派 (from

入 門 : 歡 迎 你 不 論 你 是 因 著 什 麼 樣 的 緣 分 踏 入 程 式 設 計 的 領 域, 不 論 你 最 終 能 走 得 多 遠, 請 保 有 一 顆 愉 悅 的 心, 因 為 你 將 為 自 己 添 加 一 個 與 別 人 不 同 的 專 業 技 能 在 開 始 之 前, 你

Stack, queue, 運算式解析 二元樹與走訪 圖的 DFS 與 BFS 拓撲排序演算法 尤拉迴路 Uva 514, 樹狀結構 Day5: 資料結構基礎 07/12 樹 (tree) 是一種特殊的資料結構, 它可以用來描述有分支的結構, 是由一個或一個以上的節點所組成的有限集合,

Microsoft PowerPoint 台南一中-99高中宣導簡報

月光迴旋曲

建中資訊科校內培訓講義 – 圖論

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

Microsoft Word - 澎湖田調報告-宏達組9804.doc


平 凡 足 迹 李 本 川 作 者 为 中 国 科 学 院 海 洋 研 究 所 研 究 员,1935 年 生, 山 东 荣 成 人 我 今 年 63 岁 了 大 前 年 丈 夫 和 儿 子 在 一 个 月 内 先 后 离 开 了 人 世, 女 儿 又 已 出 嫁, 现 在 是 孑 然 一 身 我 是

今天 年春季号 总 92 期

*

( ) / / / / / / /

(Microsoft Word - 8\244T\244\362\277\337\272]\244W\265L\246W.doc)

Microsoft Word - 專家本色 doc


但, 你 应 该 听 过 我 们 走 在 大 路 上 这 首 歌, 或 许 还 知 道 革 命 人 永 远 是 年 轻 那 支 歌 ; 并 且, 几 乎 可 以 肯 定, 你 在 戴 红 领 巾 的 那 阵, 必 然 唱 过 牛 儿 还 在 山 坡 吃 草, 放 牛 的 却 不 知 道 哪 儿 去

2 临 终 助 念 答 问 序 临 终 关 怀, 由 佛 门 净 宗 古 来 祖 师 大 德 提 倡 助 念 往 生, 现 今 已 渐 为 社 会 大 众 所 重 视, 在 台 湾, 台 大 长 庚 等 各 大 医 院, 也 都 设 有 助 念 室 ; 大 陆 上 许 多 道 场, 也 有 专 为

校园之星

<4D F736F F F696E74202D FA8BEA861B8EAB7BDBEE3A658BB50C0B3A5CE28B773A6CBA5AB29>

之 原 則 及 國 防 部 訂 頒 國 軍 列 管 國 有 不 動 產 提 供 非 軍 方 單 位 使 用 處 理 原 則 規 定 不 符, 仍 應 以 出 租 方 式 辦 理 惟 可 就 偏 遠 地 區 提 供 官 兵 金 融 水 電 服 務 使 用 部 分, 研 議 降 低 租 金 標 準, 報

chineseall

釋禪波羅蜜次第法門

证券代码: 证券简称:锦江股份 公告编号:【】

1700 装 卸 搬 运 7645 装 卸 搬 运 服 务 2100 建 筑 7410 工 程 服 务 11% 装 卸 搬 运 服 务, 是 指 使 用 装 卸 搬 运 工 具 或 者 人 力 畜 力 将 货 物 在 运 输 工 具 之 间 装 卸 现 场 之 间 或 者 运 输 工 具 与 装 卸

前 言 教 育 无 小 事, 它 成 就 着 学 生 的 未 来 作 为 教 师, 他 们 无 时 无 刻 不 在 关 注 着 学 生 的 成 长 学 生 的 未 来 学 生 就 像 一 朵 含 苞 待 放 的 花 朵, 需 要 老 师 们 的 细 心 呵 护, 给 学 生 需 要 的 东 西, 而

《盗墓笔记》 南派三叔/著

<CFFBB7D1D5DFD0D0CEAAD1A72E6D7073>

独立学院建设与发展


14052_公開用.pdf

# 7 % % % < % +!,! %!!

#!! +!,! # &!. / !!, 7!!, & #! % 7! % )

& ( )! +!, # %! ( & &.! / /.

Microsoft PowerPoint - DS&Algorithm [相容模式]

Microsoft PowerPoint - 資料結構總複習

AutoCAD 用戶如何使用 ArchiCAD

untitled

untitled

Chapter 1 Introduction

Excel VBA Excel Visual Basic for Application

Microsoft Word - CPE會議紀錄151022

Fuzzy Highlight.ppt

第十四屆南區大專院校電子電機相關科系盃賽

<4D F736F F D BAD3AF5AC2B2B3B92E5FAD70BAE2BEF72DBEE3A5BB5F202E646F63>

MailCloud信箱代管定價表

untitled

新設大学に対する留意事項(改善すべき点)の内容 神戸常盤大学 認可された大学の情報 基本計画書・教育課程等の概要

Microsoft Word - K33資料結構_題+解+評OK_.doc

Microsoft Word - 专论综述1.doc

2 校 史 沿 革

封面

指定標題

People, Things and Stories -Museologists within the City Walls TAIWAN NATURAL SCIENCE Vol.35 (1)

Microsoft PowerPoint 頭肩頸穴位舒壓(meili講義)1206.pptx

Microsoft Word - 光瑩論文ing.doc

Public Projects A Thesis Submitted to Department of Construction Engineering National Kaohsiung First University of Science and Technology In Partial

Microsoft Word htm

( )... 5 ( ) ( )


( ) ( ) TAIWAN NATURAL SCIENCE Vol.32(1) 85

附件: 学年华南师范大学共青团工作先进集体和优秀个人名单

IT 36% Computer Science Teachers Association, CSTA K K-12 CSTA K-12 K-12 K-6 K6-9 K STEM STEM STEM

Microsoft Word - 選擇_無解答2_.doc

The Dating Game

投影片 1

Outline Abstract The story of Aztec 1.1 夢 想 等 你 去 追 求 阿 茲 特 克 的 靈 魂 5 2. The Features of Aztec 2.1 室 內 設 計 與 音 樂 氣 氛 料 理 特 色 活

Microsoft Word - 4.doc

1 DISJOINT SETS 建國中學 01 年資訊能力競賽培訓講義 //11 Algorithm Path Compression 1: procedure Find(x) : if x.parent x then 3: x.parent Find(x.parent) : retur

現在人類獲取地球內部訊息的方法, 是從可能影響我們身家性命安全的地震, 用數學模型把地震資料轉換成地震波速度, 進而獲得地底物質密度與深度的關係 地下世界知多少 km/s g/cm 3 P Gpa km S P S 3,000 3,000 ak K 透視地底 Percy Bridgma

並 責 成 各 里 幹 事 下 里 服 勤 宣 導 病 媒 防 治 知 識, 協 助 各 家 戶 清 除 病 媒 孳 生 源 ( 積 水 容 器 ), 降 低 棲 群 密 度, 預 防 傳 染 病 之 發 生, 以 確 保 民 眾 身 體 健 康 及 居 家 生 活 品 質 訂 定 每 月 最 後

仅 中 方 证 书 学 历 证 书 学 位 证 书 仅 外 方 证 书 学 位 证 书 文 凭 颁 发 证 书 中 外 双 方 证 书 中 方 证 书 学 历 证 书 学 位 证 书 外 方 证 书 学 位 证 书 文 凭 其 他 证 书 证 书 名 称 说 明 : 请 参 照 学 位 授 予 和

Microsoft Word htm

, [3 ] Petri, 25 7, 500, [4,5 ], 3, (2), 2003, [ 6 ],,, ,, [7 ], 569, 26, ( ) : 2 ; 3 ; 4, ; 5, : (a) ( ) :,,

Turing Machine [1] n n n findmin (a 1, a 2,, a n ) 1. result a 1 2. index 2 3. result min (result, aindex) 4. index index go to step 3 till (in

Microsoft PowerPoint Training-1 (graph theory).pptx

男人的大腦 女人的大腦

<4D F736F F D B0EAA677A7BDAF53A6D2A4ADB5A52DAD70BAE2BEF7A46AB74E>

碩命題橫式

复 变 函 数 与 积 分 变 换 常 微 分 方 程 数 值 分 析 数 值 分 析 课 程 实 习 微 分 方 程 数 值

untitled

(1) ( ) : (3), (12) (7) (10)

济南信息工程学校章程

<4D F736F F D20A6CBA55FA5ABBDC3A5CDA9D22DB3AFAB46A9FDA142AA4CAED1B7EC2E646F63>

財團法人張思恒文教基金會

H1428

TAIWAN NATURAL SCIENCE Vol.32(4) 55

中 国 系 统 工 程 学 会 理 事 会 民 主 管 理 办 法 中 国 系 统 工 程 学 会 行 政 人 员 人 事 管 理 制 度 中 国 系 统 工 程 学 会 财 务 管 理 办 法 教 育 系 统 工 程 专 业 委 员 会 2015 年 工 作 总 结 过 程 系 统 工 程 专 业

2009 P001-P003.cdr

一只特立独行的猪.doc

~ 2013 TAIWAN NATURAL SCIENCE Vol.32(1) 37

酒 神 (长篇小说)

Liao Mei-Yu Professor, Department of Chinese Literature, National Cheng Kung University Abstract Yao Ying was a government official in Taiwan for more

Microsoft Word - 前行广释7.doc

11_05_docx

.., + +, +, +, +, +, +,! # # % ( % ( / 0!% ( %! %! % # (!) %!%! # (!!# % ) # (!! # )! % +,! ) ) &.. 1. # % 1 ) 2 % 2 1 #% %! ( & # +! %, %. #( # ( 1 (

Transcription:

Advanced 國立成功大學 ACM-ICPC 程式競賽培訓隊 nckuacm@imslab.org Department of Computer Science and Information Engineering National Cheng Kung University Tainan, Taiwan

Week 5 Sorting & Graph 排序 離散化 一些基礎圖論

Outline 排序 - Merge Sort - Counting Sort 離散化 基礎圖論 - Dfs - Bfs - Disjoint Set & Union

Sort

排序? 那是什麼? 可以吃嗎? 簡單來說, 就是排序 像是把 1,4,5,3,2 排成 1,2,3,4,5

Sorting Algorithm Bubble Sort Merge Sort Counting Sort STL Sort

Bubble Sort 從最基礎的開始

Bubble Sort 1. 比較兩個相鄰的元素, 前面的比較大就 swap 2. 重複動作 1 直到序列結束 3. 重複以上動作直到序列不需要再做調整

code

Bubble Sort Animation

分析一下複雜度 因為序列長度為 N, 所以內層迴圈要跑 N 次 worst case 可能需要跑 N 次內層迴圈 所以複雜度為 O(N 2 )

Merge Sort Deja vu! 加速囉

Merge Sort 分治的一種 不斷地把序列拆成左右子序列, 並對他們遞迴 將兩邊的結果合併

For Example

code #1 - Basic version

code #2 - advanced version

分析一下複雜度 每次都會把序列長度砍半 也就是說有 logn 層 每一層最差需要處理 N 個數字 複雜度為 O(NlogN)

Counting Sort はやく! もっとはやく! ( 快! 還要更快! )

Counting Sort 計算各個元素出現次數

code

分析一下複雜度 因為要把整個陣列掃過一次 O(N) 假設值域大小為 K, 最後還要掃過整個值域 O(K) 總複雜度 O(N + K)

Discretization 既然學完排序了

假設今天有個題目 請計算出個元素出現的次數 1 N 10 5, S i 10 9 ( 沒錯! 有負數!)

沒錯! 就是離散化! 顧名思義只在乎元素之間的關係, 並不在乎差距 像是我們可以把 1,5,9,11,2000 轉換成 0,1,2,3,4 於是我們就不用怕負數了 <3 不過還是可以用 map 就是了啦 ( 小聲

先備知識 STL 函數 unique sort( 或是你要自己手寫也可以啦 ) 二分搜 通常我是用 lower_bound

code

基礎圖論

名詞解釋 圖 : 由數個節點以及邊組成 環 : 一個節點可以由不重複的路徑回到自己, 則稱這條路徑為環 樹 : 沒有任何環的聯通圖 聯通塊 : 一群點中, 所有點都可以直接或間接連接到其他點

圖的儲存 鄰接矩陣 G[u][v] 表示 u 與 v 之間有一條邊存在 鄰接表 把 u 會連接到的點都 push 進去 G[u] 假設有一條單向邊從 u 到 v G[u].push_back ( v ); 假設有一條雙向邊於 u, v 之間, 則需要 G[u].push_back ( v ), G[v].push_back ( u );

假設現在有 n 個點 m 條邊

如果還有權重的話

Searching

dfs 全名 :Depth-First Search, 深度優先搜尋 由 Hopcroft & Tarjan 提出 把根節點塞入 stack 中 while ( stack!= empty() ) 取出第一個點, 把未遍歷過的相鄰節點塞進 stack

code

bfs 全名 :Breadth-First Search, 廣度優先搜尋法 把根節點塞入 queue 中 while ( queue!= empty() ) 取出第一個點, 把未經歷過的相鄰節點塞進 queue

code

Disjoint Set

Disjoint Set 可以在良好的複雜度內, 查詢兩個元素是否在同一個集合 同一個元素不會同時出現在兩個集合內

Disjoint Set 操作 查詢元素所屬組別 加入新元素進入集合 合併兩個集合 查詢集合大小

Disjoint Set 概念 用一顆樹表達一個組別 如果兩個相異元素根節點相同, 則兩元素屬於同一個集合

Disjoint Set Initialization

Disjoint Set Find

欸, 好像怪怪的

假設一下 想一下, 如果這一個結構是 1 2 3 4... n 那麼每次 find ( 1 ) 就要跑 n 次, 複雜度 O(n) 聽起來很爛

路徑壓縮 因為第一次查詢的時候就已經知道最頂端的節點是什麼了 所以記錄下來, 下一次就省掉許多時間了 有數學證明可以把複雜度從 O(N) 壓到 O(α(N)) α 指的是反阿克曼函數, 簡單來說就是成長速度非常慢的函數

Disjoint Set Union

codes on github https://github.com/miohitokiri5474/codesbackup/tree/mas ter/ncku-icpc/2020/week5 https://ppt.cc/fkpjix

Topological Sort

點的度數 在一張圖中, 每個節點都有它的 度數, 一個節點的度數代表這個節點連接幾條邊 如右圖, 點 1 的度數為 3, 點 4 的度數為 2, 點 5 的度數為 0

入度 & 出度 但如果這是一張有向圖, 又可以將其細分為 入度 與 出度, 入度就是連進這個節點的邊, 出度就是從這個點連出去的邊 如右圖, 點 1 的入度為 1 出度為 2, 點 4 的入度為 1 出度為 1, 點 5 的入度為 0 出度為 0

Topological Sort 給定一張有向圖, 你要為所有節點訂定一個順序 {v 1, v 2,, v n }, 且這個順序滿足 i j 皆不存在從 v j 走到 v i 的路徑, 則此順序就是這張圖的拓樸排序

Topological Sort 如下圖中, {1,2,4,3,5,7,6} 就是一組合法的拓樸排序, 因為不存在任一組 i j 且有任一條路徑可以從 v j 走到 v i

Topological Sort 換個說法, 一個點如果要被排進序列時, 所有指向它的點都必須被排進去了, 以下圖為例 點 2 必須等點 1 被排進去後才能被排進去 點 3 必須等點 2 與點 4 被排進去後才能被排進去 一張圖可能存在多組拓樸排序

做法 那麼做法呼之欲出了, 只要某個點的入度為 0 時, 這個點就可以被排進去拓樸序列

做法 只要每次都將入度為 0 的點排進拓樸序列尾端, 並將該點及其連出去的邊移出這張圖, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了 實作過程可以使用 stack 或 queue 本篇教學使用 queue

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要每次都將入度為 0 的點放在當前序列尾端, 並將該點移出圖中, 重複下去直到圖上所有點都被移除時, 就完成該圖的拓樸排序了

做法 只要開一個陣列記錄每個節點的入度, 在每一次要拔一個點時, 將該點指到的所有點入度都減 1, 如果那個點入度為 0 時, 將它丟進 queue 中 演算法的複雜度 : 遍歷所有點, O(V) 遍歷所有邊, O(E) 總複雜度, O(V + E)

Topological Sort 欸那一張圖一定有拓樸排序嗎? 其實不一定 可以看看右圖

Topological Sort 當一張圖出現環時, 這張圖不存在拓樸排序 在程式中, 當你的 queue 中沒任何元素且整張圖未遍歷完時, 這張圖不存在拓樸排序 一張圖存在拓樸排序若且唯若這張圖為有向無環圖, 通常簡稱為 DAG(Directed Acylic Graph)

Source Code

Questions?