大一上離散數學
第一章:離散數學基礎與證明邏輯
1. 命題邏輯與等價關係 (Propositional Logic)
觀念與公式
直觀意義: 命題就像是一個開關,只能是「絕對的真 (True)」或「絕對的假 (False)」,不能模稜兩可。當我們用邏輯運算子(如 AND, OR, NOT)把多個命題串起來時,就像是在設計電路,透過真值表可以窮舉所有可能的結果。
必背公式與定律:
- 條件語句 (Conditional Statement):
- 雙條件語句 (Bi-conditional Statement):
- 笛摩根定律 (De Morgan’s Laws): 以及
- 逆反命題 (Contrapositive):
實戰演練(題型大全)
【題型一:基本真值表判斷】(常考頻率:高)
題目: 證明 是一個恆真句 (Tautology)。
Step-by-step 解答:
- 將條件語句轉換為 OR 形式: (透過 )。
- 套用笛摩根定律:。
- 使用結合律與交換律重新分組:。
- 套用否定律: (恆真)。
【題型二:邏輯推理謎題】(重要程度:中)
題目: 在一個島上有兩種人:一種只說真話,一種只說謊話。你遇到 A 和 B 兩人。A 說:「B 總是說真話。」B 說:「我們是不同種類的人。」請問 A 和 B 分別是哪種人?
Step-by-step 解答:
- 假設 A 是說真話的人,那麼 B 也必須是說真話的人。
- 如果 B 也是說真話的人,B 說的「我們是不同種類的人」就變成假話,這與前提矛盾。
- 因此 A 必然是說謊話的人。
- 既然 A 說謊,A 說「B 說真話」是假的,代表 B 實際上也是說謊話的人。
- B 說「我們是不同種類的人」是謊話,符合兩人都說謊(同種類)的事實。結論:兩人皆為說謊者。
2. 述詞與量詞 (Predicate Calculus)
觀念與公式
直觀意義: 述詞就像是一個「填空題」,單看述詞並不知道真假;而量詞則是規定了「範圍」。全稱量詞 () 代表「每一個都要滿足條件」,存在量詞 () 代表「只要找到一個符合的即可」。
必背公式與定律:
- 量詞的笛摩根定律: 以及
實戰演練(題型大全)
【題型一:量詞真偽判斷與反例】(常考頻率:高)
題目: 判斷 在不同論域 (Domain) 下的真偽:(a) 所有實數 (b) 所有整數。
Step-by-step 解答:
- (a) 在實數領域中為 False。反例 (counter-example):取 ,,並不 。
- (b) 在整數領域中為 True。因為 或 。在整數中,不存在 的數字,故永遠成立。
【題型二:日常語句翻譯成邏輯符號】(常考頻率:極高)
題目: 將「每個人都恰好有一個最要好的朋友」轉換為邏輯表示式。令 為「 是 的最要好朋友」。
Step-by-step 解答:
- 「每個人 」:。
- 「存在一個朋友 」:。
- 「恰好只有這一個 」:除了 之外的任何 ,如果也是好朋友,那麼 必定等於 。
- 結合上述條件,推導邏輯表示法:。
3. 推理規則 (Rules of Inference)
觀念與公式
直觀意義: 這是偵探辦案的標準流程。如果我們知道某些前提(線索)為真,就可以按照特定的套路(規則)推導出新的結論。最常用的招式是「若 A 則 B,現在 A 發生了,所以 B 一定會發生」。
必背公式與定律:
- Modus Ponens (肯定前件):
- Modus Tollens (否定後件):
- Hypothetical Syllogism (三段論):
- Disjunctive Syllogism (選言三段論):
實戰演練(題型大全)
【題型一:複合邏輯推理證明】(重要程度:高)
題目: 已知前提:(1) 如果你寄電子郵件給我,我就會寫完程式。(2) 如果你沒寄電子郵件給我,我就會早點睡覺。(3) 如果我早點睡覺,我就會神清氣爽地醒來。請證明結論:「如果我沒寫完程式,我就會神清氣爽地醒來」。
Step-by-step 解答:
- 定義變數: = 你寄信、 = 我寫完程式、 = 我早睡、 = 我神清氣爽。
- 前提列式:, , 。目標結論:。
- 利用 的逆反命題:。
- 利用假言三段論結合 與 :得出 。
- 利用假言三段論結合 與 :得出 ,證明完畢。
4. 證明方法與策略 (Methods of Proving)
觀念與公式
直觀意義: 面對數學命題的攻擊策略。「直接證明」是正面直拳擊破;「反證法 (Contradiction)」是先假裝對手是對的,然後找出邏輯漏洞自相矛盾;「對偶證明 (Contraposition)」則是閃避正面,從背後(否定結論)攻擊。
實戰演練(題型大全)
【題型一:對偶證明法 Contraposition】(常考頻率:高)
題目: 證明:如果 是奇數,則 是奇數。
Step-by-step 解答:
- 假設結論的反面: 是偶數。
- 這表示存在某個整數 使得 。
- 代入原式:。
- 因為 必定是偶數,代表 是偶數。因為結論的否定推導出前提的否定,故原命題成立。
【題型二:反證法 Contradiction】(常考頻率:極高)
題目: 證明 是無理數。
Step-by-step 解答:
- 假設 是有理數,則它可以表示為兩個最簡整數比 (,且 互質)。
- 平方得到 ,移項得 。這代表 是偶數,推導出 也必須是偶數。
- 令 ,代回得 。
- 這代表 是偶數,推導出 也是偶數。
- 若 皆為偶數,它們有公因數 2,與前提「最簡整數比」矛盾!故假設錯誤, 必為無理數。
【題型三:無效證明與邏輯謬誤】(重要程度:高)
題目: 找出證明 的謬誤。證明步驟為:。
Step-by-step 解答:
- 錯誤發生在 轉換到 的這一步。
- 因為我們初始假設 ,所以 。
- 在等式兩邊同除以 等同於「除以 0」,這在數學上是不允許且無效的操作。
5. 數學歸納法 (Mathematical Induction)
觀念與公式
直觀意義: 推骨牌效應。你要確保第一張骨牌會倒 (Basic Step, 基礎步 ),並且證明「只要第 張骨牌倒下,就一定能推倒第 張」(Inductive Step, 歸納步 )。全部成立後,所有骨牌都會倒下。
必背公式與定律:
- 標準歸納法核心:
- 強歸納法核心:
實戰演練(題型大全)
【題型一:數列總和證明】(常考頻率:極高)
題目: 證明前 個正奇數的總和為 。
Step-by-step 解答:
- 基礎步 (Basic Step): 當 時,前 1 個正奇數為 1,其總和等於 ,成立。
- 歸納步 (Inductive Step): 假設 為真,即 。
- 我們要證明 也為真。將 加上下一個奇數 :。
- 化簡等式右邊:。故得證。
【題型二:歸納法的經典錯誤】(常考頻率:中)
題目: 證明所有貓的顏色都一樣 ( = 任意 隻貓顏色相同)。假設 成立,當有 隻貓時,移走其中一隻 ,剩下的 隻貓顏色一樣。再把 換回來並移走另一隻貓,剩下的 隻貓顏色也一樣,因此所有貓顏色一樣。這個證明哪裡錯了?
Step-by-step 解答:
- 這個證明的漏洞在於歸納步從 推向 時失效。
- 當 隻貓時,移走一隻貓 ,剩下 1 隻貓 (顏色當然自己跟自己一樣)。
- 但當你把 換回來並移走另一隻時,這「兩組」剩下的貓(各只有一隻)之間,完全沒有交集 (Overlap) 的貓可以作為顏色相同的橋樑。
- 推論中斷,歸納失敗。
6. 鴿籠原理 (Pigeonhole Principle)
觀念與公式
直觀意義: 如果你有 10 隻鴿子,但只有 9 個籠子,晚上鴿子回籠時,絕對「至少有一個籠子會擠兩隻以上的鴿子」。
必背公式與定律:
- 廣義鴿籠原理 (Generalized Pigeonhole Principle): 若將 個物件放入 個箱子中,至少會有一個箱子包含 個(或以上)的物件。
實戰演練(題型大全)
【題型一:同月出生問題】(常考頻率:高)
題目: 證明在 80 位以上的學生中,至少有 7 人在同一個月份出生。
Step-by-step 解答:
- 將「學生」當作鴿子 (),將「月份」當作籠子 ()。
- 套用廣義鴿籠原理公式:。
- ,無條件進位得到 7。
- 因此至少有 7 人在同一個月出生,證明完畢。
【題型二:棋盤上的城堡問題】(常考頻率:中)
題目: 證明若將 33 個城堡 (Rooks) 放在標準 棋盤上,至少有 5 個城堡無法互相攻擊。
Step-by-step 解答:
- 城堡的攻擊模式為同行或同列。我們可以在棋盤上標記數字來建立「不互攻」的集合。
- 將棋盤劃分成對角線位移的標記區塊(例如對角線依序標上 1~8),同一數字的格子絕不會處於同行或同列。這產生了 8 個彼此獨立的箱子 ()。
- 共有 33 個城堡 ()。
- 根據鴿籠原理:。至少有 5 個城堡落在同一個標記區域,它們必定無法互相攻擊。
⚠️ 第一章考前避坑指南
- 命題邏輯的陷阱: 絕對不要把條件語句 和它的逆命題 (Converse) 搞混,兩者的真值完全不相等!
- 量詞的轄域 (Scope) 盲點: 使用全稱或存在量詞時,必須非常明確定義「論域 (Domain)」。同一個命題在整數論域為 True,在實數論域可能就是 False。
- 歸納法的虛假安全感: 不要因為 成立,且代了 發現好像對了,就直接下結論。歸納法的靈魂在於嚴謹推導 ,且必須注意前後集合重疊的盲點(如前述貓咪顏色的謬誤)。
- 證明的除零謬誤: 使用直接證明法操作等式時,要相消或除以代數,務必檢查該代數是否為 0,否則會推導出 的荒謬結論。
第二章:離散數學核心——計數法則、排列與組合
1. 加法與乘法原理 (Rule of Sum & Product)
觀念與公式: 計數的最底層邏輯在於事件是否獨立與互斥。這如同在 AtCoder 或 Codeforces 等平台上分析演算法時,並列的迴圈時間複雜度相加,而巢狀迴圈的時間複雜度則相乘。
- 加法原理 (Rule of Sum):處理「互斥事件」(OR 邏輯)。若事件 A 有 種方法,事件 B 有 種方法,兩者不能同時發生,則總方法數為 。
- 乘法原理 (Rule of Product):處理「連續或獨立事件」(AND 邏輯)。若事件 A 有 種方法,接著事件 B 有 種方法,則總方法數為 。
實戰演練(題型大全):
【題型一:因數個數計算】(常考頻率:高)
題目:請問 1400 共有多少個正因數?
Step-by-step 解答:
- 進行質因數分解:。
- 每個質因數的次方數加 1 後相乘(代表取 0 次到最大次方的選擇): 個因數。
【題型二:多類別物件選擇】(常考頻率:中)
題目:有 5 本中文書、7 本英文書、10 本法文書,要從中挑選兩本「不同語言」的書,有幾種選法?
Step-by-step 解答:
- 分為三種互斥情況:中英、中法、英法。
- 應用乘法與加法原理: 種。
2. 排斥原理與樹狀圖 (Inclusion-Exclusion & Tree Diagrams)
觀念與公式:
- 排斥原理 (Principle of Inclusion-Exclusion):當計算兩組事件的方法數時,為避免重複計算交集的部分,必須將其扣除。公式為 。
- 樹狀圖 (Tree Diagrams):適合用來窮舉並視覺化有條件限制的連續選擇,類似演算法中的深度優先搜尋 (DFS) 遍歷狀態樹。
實戰演練(題型大全):
【題型一:字串條件聯集】(常考頻率:極高)
題目:長度為 8 的位元字串中,有多少個是「以 1 開頭」或「以 00 結尾」?
Step-by-step 解答:
- 以 1 開頭的字串數:剩下的 7 個位元可任意填,共 種。
- 以 00 結尾的字串數:前面的 6 個位元可任意填,共 種。
- 同時以 1 開頭且以 00 結尾的字串數:中間 5 個位元可任意填,共 種。
- 總數 種。
【題型二:反向扣除法】(常考頻率:高)
題目:350 位求職者中,220 位主修 CS,147 位主修商業,51 位雙主修 CS 與商業。請問有多少位「既沒有主修 CS 也沒有主修商業」?
Step-by-step 解答:
- 先算出有主修其中至少一項的人數:。
- 總人數扣除上述人數: 位。
3. 排列與組合 (Permutations and Combinations)
觀念與公式:
- 排列 (Permutation):從 個相異物件中選出 個並考慮順序。公式:。
- 組合 (Combination):從 個相異物件中選出 個,不考慮順序。公式:。
- 核心關聯:。
實戰演練(題型大全):
【題型一:不可區分物件排列(同物排列)】(常考頻率:極高)
題目:重新排列單字 “SUCCESS” 的字母,能產生多少種不同的字串?
Step-by-step 解答:
- “SUCCESS” 共 7 個字母,若全相異則有 種排列。
- 處理不可區分的物件:其中有 2 個 ‘C’ 和 3 個 ‘S’ 是不可區分的。
- 根據公式 ,答案為 種。
4. 重複組合與隔板法 (Combinations with Repetitions)
觀念與公式: 當從 種不同的物件中選出 個,且不考慮順序、每種物件有無限供應時,此即為重複組合。
- 隔板法 (Stars and Bars):等價於從 個位置中選出 個位置放球,即 。
實戰演練(題型大全):
【題型一:方程式非負整數解】(常考頻率:極高)
題目:方程式 中,若 皆為非負整數,共有幾組解?
Step-by-step 解答:
- 將 11 視為 顆相同的球,變數 視為 個不同的箱子。
- 代入隔板法公式 組解。
5. 經典恆等式與二項式定理 (Identities and Binomial Theorem)
觀念與公式:
- Pascal 恆等式:。
- 二項式定理:。
- Vandermonde 恆等式:。
實戰演練(題型大全):
【題型一:利用 Vandermonde 簡化級數】(常考頻率:高)
題目:化簡 。
Step-by-step 解答:
- 將平方拆解,並利用組合對稱性:。
- 對照 Vandermonde 恆等式,令 、,即可將原式化簡為 。
⚠️ 第二章考前避坑指南
- 「排列」與「組合」的誤用:看見題目先問自己「順序互換是否代表不同結果?」,若不影響絕對是組合 ()。
- 同物排列忘記除掉階乘:計算密碼或字串時,若出現相同的字元,最後總排列數務必除以重複字元個數的階乘。
- 「至少」題型未用反向扣除:題目若出現「至少包含一個」這類字眼,正面窮舉極易遺漏情況,請立刻切換為「全部情況 完全沒有的情況」。
第三章:離散數學底層邏輯——集合、函數與關係
1. 集合論、勢與排容原理 (Sets, Cardinality & Inclusion-Exclusion)
觀念與公式: 集合(Set)是無序的物件集合,在資訊工程中,無論是資料庫查詢還是演算法的狀態空間,皆建立在集合操作之上。
- 冪集 (Power Set): 集合 的所有子集所構成的集合 。若 ,則 。
- 排容原理推廣: 用於精準計算聯集大小。奇數個集合的交集為正號,偶數個集合的交集為負號。
實戰演練(題型大全):
【題型一:排容原理應用】
題目: 請問在 1 到 250 之間的整數中,有多少個數字可以被 2, 3, 5, 或 7 整除?
Step-by-step 解答:
- 定義 分別為 1 到 250 之間能被 2, 3, 5, 7 整除的集合。
- 計算單一集合大小:,,,。
- 計算兩兩交集(取最小公倍數):,依序計算出所有 種組合。
- 計算三個交集:,依序計算出所有 種組合。
- 計算四個交集:。
- 套用公式:。
2. 函數映射與高斯符號 (Functions, Floor & Ceiling)
觀念與公式:
-
核心映射關係:
-
Injective (單射): 。
-
Surjective (滿射): 對應域等於值域 (Range)。
-
Bijective (雙射): 同時滿足單射與滿射。
-
高斯符號運算定律 (已知 為整數):
-
-
-
實戰演練(題型大全):
【題型一:高斯符號的代數證明】
題目: 證明 對所有實數 皆成立。
Step-by-step 解答:
- 令小數部分 。
- 左式 (LHS) 。
- Case 1: 。左式 。右式 。左式 = 右式。
- Case 2: 。左式 。右式 。左式 = 右式。
3. 二元關係與遞移閉包 (Binary Relations & Closures)
觀念與公式: 二元關係直接對應到有向圖的結構。
-
四大核心性質: 反身性 (Reflexive)、對稱性 (Symmetric)、反對稱性 (Antisymmetric)、遞移性 (Transitive)。 在離散數學中,二元關係(Binary Relation)如果定義在一個集合 上,我們可以用有向圖(Directed Graph)來完美視覺化:
-
集合中的元素就是圖上的頂點(Vertices)。
-
如果元素 和 有關係(即 ),就在圖上畫一條從 指向 的有向邊(Edge)。
1. 反身性 (Reflexive)
- 數學定義: 對於集合中的每一個元素 , 都必須在關係中。
- 圖形特徵: 圖上的每一個頂點,都必須有一條指向自己的「自環」(Loop)。只要有一個頂點漏掉,就不是反身。
- 生活實例: 「等於()」、「大於等於()」、「實數 滿足 」。
- 例子: 每一個數字都等於自己(),所以「等於」具備反身性。
2. 對稱性 (Symmetric)
- 數學定義: 如果 在關係中,那麼顛倒過來的 也必須在關係中。
- 圖形特徵: 圖上只要有從 到 的單向箭頭,就必定同時存在一條從 到 的回頭箭頭。換句話說,所有頂點之間的連線要嘛不連,要連就一定是「雙向道」。
- 生活實例: 「兄弟姊妹關係」、「同學關係」、「距離小於 5 公里」。
- 例子: 如果甲是乙的同學,乙就一定是甲的同學。
3. 反對稱性 (Antisymmetric)
- 數學定義: 如果 在關係中,且 也在關係中,那麼 和 必須是同一個元素(即 )。
- 白話文: 絕對不允許出現不同頂點之間的「雙向道」。
- 圖形特徵: 任意兩個不同的頂點之間,最多只能有「單向道」,或者完全沒連線。唯一的雙向道只能發生在頂點自己指自己的「自環」上。
- 生活實例: 「小於等於()」、「包含於()」。
- 例子: 如果數字 且 ,這兩個數字唯一的可能就是 。
4. 遞移性 (Transitive)
- 數學定義: 如果 在關係中,且 也在關係中,那麼起點到終點的 也必須在關係中。
- 圖形特徵: 如果圖上有一條路徑可以從 走到 ,再從 走到 ,那麼圖上就必須存在一條「捷徑」直接從 指向 。
- 生活實例: 「大於()」、「等於()」、「祖先關係」。
- 例子: 如果張三比李四高(),李四又比王五高(),那張三一定比王五高()。
這四個性質是後續衍生出兩個離散數學超級大考點的基石:
- 等價關係 (Equivalence Relation): 同時具備 反身、對稱、遞移(就像「等於」)。
- 偏序關係 (Partial Order Relation): 同時具備 反身、反對稱、遞移(就像「小於等於」)。
- 遞移閉包演算法: 包含原關係的「最小」遞移關係。在競賽中常使用 Floyd-Warshall 演算法,時間複雜度為 。
實戰演練(題型大全):
【題型一:遞移閉包的構造】
題目: 尋找關係 的遞移閉包 (Transitive Closure)。
Step-by-step 解答:
- 建立初始有向圖與矩陣 。
- 計算 (走兩步可達的點對):因為 與 ,新增 。因為 與 ,新增 。因為 與 ,新增 等等。
- 計算 直到沒有新邊加入為止。
- 最終檢查圖中任何一條長度大於 1 的路徑,確保起終點間皆有直接連線,即為遞移閉包矩陣。
4. 等價關係、偏序集與格 (Equivalence Relations, Posets & Lattices)
觀念與公式:
- 等價關係: 同時具備反身性、對稱性、遞移性。它會將集合切割成數個互不相交的「等價類」。
- 偏序集 (Poset): 同時具備反身性、反對稱性、遞移性。
- Hasse Diagram (哈斯圖): 去除自環、省略遞移邊,統一朝上簡化的圖形。
- 格 (Lattice): 在偏序集中,若任意兩元素都有唯一的「最小上界 (LUB)」與「最大下界 (GLB)」,則該偏序集稱為格。
實戰演練(題型大全):
【題型一:Hasse Diagram 與格的判斷】
題目: 給定偏序集 ,其中 代表整除關係。請建構 Hasse Diagram 並判斷它是否為 Lattice。
Step-by-step 解答:
- 建構哈斯圖: 最底層放置 。上一層放置 。再上一層放置 。最上層放置 。依照整除關係連線並隱藏遞移邊。
- 尋找極端值: 極大值 (Maximal) 為頂端沒有對外連線的節點:。極小值 (Minimal) 為底端:。
- Lattice 判斷: 考慮點 與 。它們的 LUB 應該是 24,但在集合 中不存在共同的上界,因此該偏序集不是格 (Lattice)。
⚠️ 第三章考前避坑指南
- 空集的陷阱: 永遠成立,但 不一定成立。務必分清「子集」與「元素」的符號差異。
- 反對稱 不對稱: Antisymmetric 絕對不是 Symmetric 的相反詞!一個關係可以同時是對稱且反對稱的。
- 等價類互斥定律: 任意兩個等價類要嘛完全相等,要嘛交集為空,絕對不可能出現「部分重疊」的狀況。
第四章:圖論 (Graph Theory)
1. 圖的基礎定義與術語 (Graph Basics & Terminology)
觀念與公式
直觀意義:圖 (Graph) 是用來描述物件之間「關聯性」的數學結構。想像節點 (Vertices) 是城市,邊 (Edges) 是連接城市的公路。若公路是單行道,則是「有向圖 (Directed Graph)」;若雙向皆可通行,則是「無向圖 (Undirected Graph)」。
-
圖的正式定義:,其中 是非空頂點集合, 是邊集合。
-
簡單圖 (Simple Graph):沒有自我環 (Self-loop,即起點與終點相同的邊),且兩節點間最多只有一條邊的圖。
-
分支度 (Degree): 代表連接到頂點 的邊數。注意:一個自我環 (Loop) 對該頂點的 會貢獻 2 次。
-
有向圖分支度:分為入分支度 (箭頭指向 ) 與出分支度 (箭頭離開 )。
實戰演練(題型大全)
基礎考題 1:圖的最大邊數極限 假設有一個具備 個頂點的簡單圖 。請問在 (1) 是無向圖 (2) 是有向圖的情況下,最多可以包含幾條邊?
【Step-by-step 解析】
- (1) 無向簡單圖:每兩個不同的頂點之間最多只能存在一條邊,且沒有自我環。這是高中排列組合的經典問題:從 個頂點中任選 2 個頂點連線,共有 種可能。
- (2) 有向簡單圖:每兩個頂點 之間,可以有 以及 兩條邊。因此邊數是無向圖的兩倍。
2. 握手定理 (Handshaking Theorem)
觀念與公式
直觀意義:一場派對中,每發生一次「握手」(一條邊),必然會有「兩個人」(兩個頂點) 參與。因此,所有人握手的總次數,一定是實際發生握手事件數量的兩倍。
- 無向圖握手定理:
(其中 為總邊數。每條邊必貢獻 2 個分支度)
- 有向圖握手定理:一條有向邊必然有一個起點和一個終點,故總入分支度必定等於總出分支度,且等於總邊數 。
- 必背推論 (Corollary):任何無向圖中,「奇數分支度的頂點」之總數量必定是偶數。這在證明題中極度常考!
實戰演練(題型大全)
經典證明題:奇數點數量的限制 證明:「在任何無向圖中,奇數分支度 (odd degree) 的頂點個數必定為偶數。」
【Step-by-step 解析】
- 將所有頂點集合 拆分為兩個子集:偶數分支度頂點集合 與奇數分支度頂點集合 。
- 根據握手定理:
- 觀察等式:左式 是一個偶數;右式第一項 因為每個項都是偶數,加總必為偶數。
- 因此,右式第二項 也必須是偶數。
- 由於 中每個頂點的分支度都是奇數,要讓一堆奇數相加成為偶數,這些奇數的「個數」必須是偶數。故得證。
3. 特殊簡單圖與二分圖 (Special Simple Graphs & Bipartite Graphs)
觀念與公式
熟悉以下幾種標準積木,它們是建構複雜題目的基礎:
- 完全圖 (Complete Graph, ): 個頂點,任兩點間皆有連線。
- 環狀圖 (Cycle, , ): 個頂點排成一個圈。
- 輪狀圖 (Wheel, , ):在 中間加上一個「軸心」頂點,並與外圈 個點全部連線。總頂點數為 。
- 維方塊圖 (n-cube, ):擁有 個頂點。可想成二進位字串,若兩個頂點的字串只有「1個 bit」不同,則存在一條邊。
- 二分圖 (Bipartite Graph):頂點可完美劃分為兩個互不相交的集合 與 ,使得圖中所有的邊都只跨越這兩個集合之間(集合內部絕對沒有邊)。
- 完全二分圖 ():集合 有 個頂點,集合 有 個頂點,兩集合間「所有可能的連線」都存在。
實戰演練(題型大全)
常考判斷題:二分圖的著色判別法 說明如何演算法化地檢查一個連通圖是否為二分圖?
【Step-by-step 解析】
-
定理:一個圖是二分圖 可以使用「2 種顏色」對所有頂點進行著色,且相鄰頂點顏色不同。
-
檢驗演算法 (BFS/DFS 著色法):
- 挑選任意起始點 ,塗上「白色」。
- 將 的所有鄰居塗成「黑色」。
- 將所有「黑色」鄰居的鄰居塗成「白色」,依此類推,直到所有相連點都塗色。
- 驗收:檢查圖中是否有任何邊的兩個端點是「同色」。若有同色邊,則回報 NO (非二分圖);若無,回報 YES (是二分圖)。 (補充:圖中若存在「奇數長度的環 (Odd Cycle)」,則絕對不是二分圖,必定著色失敗)
4. 尤拉路徑與迴路 (Euler Paths & Circuits)
觀念與公式
直觀意義:「一筆畫問題」。想像你在玩連連看,你要走過所有的邊,且每條邊只能走過一次。
-
尤拉路徑 (Euler Path):經過所有邊恰好一次的路徑。
-
尤拉迴路 (Euler Circuit):經過所有邊恰好一次,且「起點等於終點」的路徑。
-
存在性充要條件 (若 為連通圖):
-
尤拉迴路 圖中每個頂點的分支度皆為偶數 (even degree)。
-
尤拉路徑 (但非迴路) 圖中恰好有 2 個頂點的分支度為奇數 (這兩點即為起點與終點)。
實戰演練(題型大全)
觀念證明題:尤拉迴路定理的必要性證明 證明:若連通圖 具有尤拉迴路,則所有頂點的分支度必為偶數。
【Step-by-step 解析】
-
假設圖 存在一條尤拉迴路。
-
當我們沿著這條尤拉迴路走訪邊時,對於任意一個頂點 ,我們每一次「進入」該頂點,必然會立刻接著「離開」該頂點。
-
也就是說,每經過一次頂點 ,都會消耗掉相連於 的 條邊 (一進一出)。
-
因為尤拉迴路會精準涵蓋圖上的「每一條邊」恰好一次,且最終回到起點,所以對任何頂點 而言,總進入次數必等於總離開次數。
-
因此,頂點 身上連接著的總邊數 (即分支度) 必然是 的倍數。得證所有頂點的分支度皆為偶數。
5. 漢密爾頓路徑與迴路 (Hamilton Paths & Circuits)
觀念與公式
直觀意義:「推銷員問題」。推銷員必須拜訪每個城市,但他不在乎是否走過每一條公路。條件是:每個「頂點」必須恰好走過一次。
-
Hamilton Path / Circuit:恰好走訪每個頂點一次的路徑/迴路。
-
難度陷阱:不像尤拉路徑有簡單的充要條件判斷,漢密爾頓迴路問題是 NP-Complete,目前不存在多項式時間的高效演算法。
-
充分條件 (Sufficient Conditions):如果圖的「邊夠密集」,就能保證有漢密爾頓迴路。
-
Dirac’s Theorem:若每個頂點的 ,必有漢密爾頓迴路。
-
Ore’s Theorem:對任意「不相鄰」的兩頂點 ,只要 ,必有漢密爾頓迴路。
-
Bondy-Chvátal Theorem:圖 擁有漢密爾頓迴路 的 Hamilton Closure 擁有漢密爾頓迴路。(Hamilton Closure 的作法:若兩不相鄰點度數和 ,則補上一條邊,遞迴進行直到不能補為止。)
實戰演練(題型大全)
操作題:Hamilton Closure 求法 試描述尋找 Hamilton Closure 的演算法,並解釋如何藉此判斷迴路存在性。
【Step-by-step 解析】
-
掃描圖中所有「尚未有邊相連 (non-adjacent)」的點對 。
-
檢查它們的分支度之和:如果 (其中 為總點數),則在此兩點間強制「加上一條邊」。
-
由於加上新邊會導致 和 的度數增加,這可能觸發其他原本度數不夠的點對達標。因此,必須遞迴且反覆執行步驟 1 與 2,直到沒有任何一對不相鄰點滿足該條件為止。
-
最終產生出來的圖即為 Hamilton Closure。
-
結論推演:如果最終得到的 Closure 是一個完全圖 (當 時完全圖必有漢密爾頓迴路),我們就能保證原本的圖 也必然有漢密爾頓迴路。
6. 平面圖與尤拉公式 (Planar Graphs & Euler’s Formula)
觀念與公式
直觀意義:電路板佈線問題。一堆節點要在二維平面上連線,能不能做到「任何兩條線都不會交叉」?如果可以,這張圖就是平面圖 (Planar Graph)。
- 尤拉平面公式 (Euler’s Planar Formula): 對於任何連通平面圖,令 為節點數, 為邊數, 為平面被切割出的區域數 (Regions,務必包含最外面那圈無限大的區域 Infinite Region):
- 平面圖的極限邊數 (必要條件): 若 ,每一個區域 (包含無限區域) 至少由 3 條邊圍成。推導得出極大邊數不等式:
(注意:若圖是二分圖,則沒有奇數環,區域最少由 4 條邊圍成,公式縮緊為 )
實戰演練(題型大全)
經典證明題 1:證明 與 不是平面圖 這兩張圖是平面圖的兩大「地雷」,請用尤拉不等式嚴格證明它們無法畫在平面上。
【Step-by-step 解析】
- 證明 (5個頂點的完全圖) 非平面圖:
-
的節點數 。因為是完全圖,邊數 。
-
代入極限邊數不等式檢驗:。
-
發現 ,矛盾!故 絕對不可能是平面圖。
- 證明 (兩個集合各3點的完全二分圖) 非平面圖:
-
的節點數 ,邊數 。
-
第一眼檢查 , 似乎通過了?不,我們有更緊的不等式!
-
因為 是二分圖,內部絕對不可能存在長度為 3 的三角形環。所以如果它是平面圖,它切割出的每一個區域 ,至少都要由 4 條邊包圍。
-
邊與區域的關係式為:。
-
但尤拉公式告訴我們 。
-
發現公式要求 ,但邊數限制 ,矛盾!故 非平面圖。
經典證明題 2:柏拉圖立體 (Platonic Solids) 的數量極限 為什麼正多面體 (所有面都是全等正多邊形、所有頂點連接相同邊數) 在三維宇宙中「恰好只有 5 種」?
【Step-by-step 解析】
-
將多面體壓扁成 2D 視為平面圖。令每個面由 條邊組成,每個頂點連接 條邊。立體圖要求 且 。
-
計算總邊數:每個面有 條邊,共 個面,每條邊被兩個面共用 。同理,頂點數 。
-
代入尤拉公式 :
同除以 :
-
因為 ,所以右邊大於 。這代表 。
-
已知 。如果兩者都 ,則 ,不等式無法成立!這意味著 之中必然至少有一個等於 3。
-
窮舉可能解:
-
若 (面是正三角形): 可以是 (分別對應正四面體、正八面體、正二十面體)。
-
若 (每個頂點連三條邊): 可以是 (分別對應正四面體、正六面體/立方體、正十二面體)。
- 結論:宇宙中僅存在這 5 組整數解,對應恰好 5 種柏拉圖立體!
7. 庫拉托夫斯基定理與著色問題 (Kuratowski’s Theorem & Coloring)
觀念與公式
直觀意義:如何從一張極度複雜的圖中,一眼看穿它「註定會發生線條交叉」(即非平面圖)?
-
庫拉托夫斯基定理 (Kuratowski’s Theorem):一個圖是「非平面圖」 它裡面隱藏了 (包含子圖同構於) 或 的結構。 (同構 Homeomorphic 定義:兩張圖可藉由反覆「在一條邊中間插入一個新節點」或反向消除節點而變得完全一樣)。
-
圖著色 (Graph Coloring):給予相鄰頂點不同顏色的過程。
-
五色定理 (Five Color Theorem):任何平面圖,絕對可以用「最多 5 種顏色」完成合法塗色。 (著名的四色定理 Appel-Haken 證明極其複雜,需要電腦驗證近兩千種 Case,故考試頂多考五色定理的建構)。
-
對偶圖 (Dual Graph):針對地圖塗色問題,可以將地圖的「每一個區域 (Region)」轉化為一個「頂點 (Vertex)」。若兩個區域相鄰,則在兩頂點間連一條邊。地圖的合法塗色,等價於對偶圖的合法頂點著色。
實戰演練(題型大全)
證明題:五色定理 (Five Color Theorem) 證明策略 證明所有平面圖都能以 5 色合法著色。
【Step-by-step 解析】
-
數學歸納法:假設頂點數為 的所有平面圖都能 5 色著色。現在要證明 個頂點的圖也可以。
-
由前述公式 推導總分支度 。這表示平均分支度嚴格小於 6。換句話說,圖中必然存在至少一個頂點 ,其分支度 。
-
暫時將頂點 從圖中拔除。剩下的圖有 個頂點,依據歸納法假設,可以合法塗上 5 種顏色。
-
現在把 放回來。我們觀察 的鄰居顏色:
-
情況一:若 的鄰居使用的顏色總數 色。那麼 5 種顏色中必有剩下第 5 種沒被用到的顏色,直接塗給 即可,收工!
-
情況二:若 剛好有 5 個鄰居,且分別塗滿了紅、藍、黃、綠、橘 5 種不同的顏色。
- Kempe Chain 切換法 (Switching Path) 解決情況二:
-
我們試著將其中一個鄰居 (例如黃色鄰居) 強制換成另一個顏色 (例如藍色)。
-
為了保持圖的合法性,如果黃鄰居變藍,那原本連著它的藍點就要變黃,引發「藍黃交替」的連鎖反應路徑 (Kempe Chain)。
-
如果這條「藍黃交替路徑」沒有連到 另一側原本的藍色鄰居,我們就可以成功完成這串顏色的對調,把原本的黃鄰居變成藍色,此時 旁邊就空出了黃色可以塗,收工!
-
萬一「藍黃路徑」不幸連通了 (形成一堵牆) 怎麼辦?因為平面圖的邊「不可交叉」性質,這道藍黃牆會把內外的綠色和橘色鄰居物理性隔絕。
-
此時我們改對綠色與橘色鄰居進行「綠橘交替」連鎖反應。因為路徑被藍黃牆擋住,綠橘路徑絕對不可能連通,所以綠橘交替必定能成功完成切換。
-
切換後, 旁空出了綠色或橘色,著色成功!得證。
⚠️ 考前避坑指南 (Exam Pitfall Guide)
-
Self-loop 的度數計算極易錯:當你手算總分支度或判定尤拉迴路時,如果圖中有一條自我環 (Loop),該頂點的 Degree 要 ,千萬不要只加 1。
-
握手定理適用對象:無論無向圖還是有向圖,定理等式兩側的意涵不同。證明題中極愛考「奇數度頂點數量必為偶數」,這是從 移項得來的觀念,必考倒扣。
-
尤拉 vs 漢密爾頓 的判定邏輯差異:
-
尤拉迴路:看「邊」(Edges)。充要條件為「全為偶數度」。條件是「若且唯若 (iff)」,看到奇數點直接判死刑。
-
漢密爾頓迴路:看「頂點」(Vertices)。Dirac 和 Ore 定理只給了「充分條件 (Sufficient)」。如果題目給的圖不滿足這兩個定理(例如每個點度數都小於 ),不代表它沒有漢密爾頓迴路!(例如一個正方形 ,不滿足充分條件,但明明就有漢密爾頓迴路) 選擇題極容易在這邊埋陷阱,反推必錯。
-
尤拉公式中的 Region 計算:在代入 運算或是看圖數區域時,永遠記得包含最外側的無限區域 (Infinite Region),漏算 就會少 1 導致公式不平。
-
平面圖的不等式誤用: (或二分圖的 ) 只是平面圖的「必要條件 (Necessary)」。
- 若 ,則必定「非平面圖」。
- 若 ,不能保證它是平面圖!如果要證明它是,請乖乖畫出來;如果要證明不是,請找庫拉托夫斯基的子圖 或 。
第五章:樹 (Trees)
1. 樹的基礎性質與節點計算 (Properties of Trees)
觀念與公式
樹 (Tree) 的直觀意義就是一個「沒有迴圈的連通網路」——想像家族族譜或是水系分佈,任何兩點之間必然只有唯一一條簡單路徑可達。若圖中包含多個不相連的樹,則稱為森林 (Forest)。
對於將每個分支嚴格限制數量的 m 元樹 (m-ary tree),特別是當每個內部節點都恰好有 個子節點時(稱為 Full m-ary tree),我們可以利用以下必背公式快速秒殺節點計算題:
- 邊數公式:任何擁有 個節點的樹,必定剛好有 條邊。
- 總節點公式:具備 個內部節點的 Full m-ary tree,總節點數為 。
- 葉節點公式:具備 個內部節點的 Full m-ary tree,葉節點數量為 。
- 樹高與葉節點極限:高度為 的 m-ary tree 最多擁有 個葉節點。
- 平衡樹高度公式:若一棵 Full m-ary tree 是平衡的(所有葉節點都在 或 層)且有 個葉節點,其樹高 。
實戰演練(題型大全)
【題型 1:連鎖信件計算問題】
- 常考頻率:⭐⭐⭐⭐
- 重要程度:高(常作為基礎送分題,考驗對葉節點與內部節點的代數轉換)
- 題目:Peter 發起了一封連鎖信。每個收到信的人被要求轉寄給其他 4 個人。有些人照做了,有些人沒有。現在已知有 100 個人收到了信但「沒有」轉寄出去。假設沒有人收到超過一封信,請問總共有多少人轉寄了這封信?
- Step-by-step 解答:
- 將問題轉化為樹的結構:寄信人是內部節點 (),收到信但不轉寄的人是葉節點 ()。
- 由於每個人規定要轉寄給 4 個人,這是一棵 Full 4-ary tree ()。
- 已知葉節點數 。
- 代入葉節點公式:。
- 。
- ,解得內部節點 。
- 答案:共有 33 個人轉寄了信件。
2. 決策樹 (Decision Trees) 與複雜度下界
觀念與公式
決策樹將「解決問題的連續決策過程」具象化。每一個內部節點代表一次「判斷或決策」,而它的子節點代表該決策的「可能結果」。最底層的葉節點就是最終的解答。
- 排序比較下界公式:在最壞的情況下,使用比較法對 個相異數字進行排序,至少需要 次比較。
實戰演練(題型大全)
【題型 1:假幣秤重問題】
- 常考頻率:⭐⭐⭐
- 重要程度:中(經典邏輯題,考驗決策樹構建)
- 題目:有 6 枚重量相同的真幣,以及 1 枚重量較輕的假幣。如果這 7 枚硬幣混在一起,如何使用天平在「兩次」秤重內找出假幣?
- Step-by-step 解答:
- 將 7 枚硬幣編號為 1 到 7。
- 第一次決策 (Root):將 {1, 2, 3} 放在左秤,{4, 5, 6} 放在右秤。
- 結果分支 A (左 < 右):代表假幣在 {1, 2, 3} 中。
- 第二次決策:秤 {1} 與 {2}。若 1 輕,假幣為 1;若 2 輕,假幣為 2;若相等,假幣為未秤的 3。
- 結果分支 B (左 = 右):代表天平上的都是真幣,假幣是未放上天平的 7。
- 結果分支 C (左 > 右):代表假幣在 {4, 5, 6} 中。
- 第二次決策:秤 {4} 與 {5}。若 4 輕,假幣為 4;若 5 輕,假幣為 5;若相等,假幣為未秤的 6。
【題型 2:排序比較次數分析】
- 常考頻率:⭐⭐⭐⭐
- 重要程度:高(連結資料結構中 Sorting 複雜度的底層證明)
- 題目:欲排序 3 個與 4 個相異數字,分別保證充分的最少比較次數為何?
- Step-by-step 解答:
- 利用下界公式評估 3 個數字: 次。
- 利用下界公式評估 4 個數字: 次。
- 4 個數字的具體排法 (A, B, C, D):
- Step 1:用 3 次比較將 A, B, C 排序好 (假設結果為 A < B < C)。
- Step 2:將 D 與中間的 B 進行比較 (第 4 次)。
- Step 3:根據 Step 2 的結果,將 D 拿去與 A 或 C 比較 (第 5 次),即可確定 D 的最終位置。
3. 最佳前綴碼與霍夫曼樹 (Optimal Prefix Code)
觀念與公式
為了節省儲存空間,我們希望出現頻率高的字元使用較短的編碼,頻率低的字元使用較長的編碼(變長編碼)。為了避免解碼時產生歧義(例如編碼 0 和 01 同時存在會造成混淆),我們規定「任何字元的編碼都不能是其他字元編碼的前綴」,這就是 Prefix Code。
- 霍夫曼樹兩大黃金定律:
- 在最佳前綴碼樹中,每一個內部節點必定有「兩個」子節點。
- 出現頻率最低的兩個字元,必定是樹中最深處的兄弟葉節點 (Sibling leaves farthest from the root)。
實戰演練(題型大全)
【題型 1:建構 Optimal Prefix Code Tree】
- 常考頻率:⭐⭐⭐⭐⭐
- 重要程度:極高(必考大題,嚴格要求演算法執行步驟正確)
- 題目:已知字元的相對頻率為 A: 40, B: 20, C: 15, D: 50, E: 25,請建構對應的最佳前綴碼樹。
- Step-by-step 解答:
- 列出目前所有節點的頻率:{A:40, B:20, C:15, D:50, E:25}。
- 找出頻率最低的兩個節點:B(20) 與 C(15)。將它們合併為一個父節點,頻率為 35。
- 更新節點池:{A:40, D:50, E:25, BC:35}。
- 找出頻率最低的兩個節點:E(25) 與 BC(35)。將它們合併為一個父節點,頻率為 60。
- 更新節點池:{A:40, D:50, EBC:60}。
- 找出頻率最低的兩個節點:A(40) 與 D(50)。將它們合併為一個父節點,頻率為 90。
- 更新節點池:{EBC:60, AD:90}。
- 將最後兩個節點合併,形成 Root,總頻率為 150。左子樹為 AD(90),右子樹為 EBC(60)。
4. 生成樹與 Prüfer Code (Spanning Trees & Prüfer Codes)
觀念與公式
生成樹 (Spanning Tree) 是一個保留原圖所有節點、但刪除多餘邊直到剛好形成「樹」的子圖。證明圖是否連通的等價條件,就是看它是否存在生成樹。
Prüfer Code 則是一種神奇的數學映射,它能將任何一棵帶有編號的生成樹,唯一對應到一串長度為 的數字序列。
- 公式 1:凱萊公式 (Cayley’s formula) 指出,包含 個節點的完全圖 ,總共可以產生 種不同的生成樹。
- 公式 2:對應 個節點的 Prüfer code 序列,其長度必定剛好是 。
實戰演練(題型大全)
【題型 1:由 Tree 產生 Prüfer Code】
- 常考頻率:⭐⭐⭐⭐
- 重要程度:高(手動模擬題型,需極度細心)
- 題目:給定一棵樹,邊連接為 (1,2), (2,4), (3,4), (2,5),請寫出其 Prüfer Code。
- Step-by-step 解答:
- 觀察目前所有的葉節點為:1, 3, 5。
- 回合 1:找出編號最小的葉節點「1」。記錄它的唯一鄰居「2」。將節點 1 移除。序列目前為:
2。 - 觀察剩餘樹的葉節點為:3, 5。
- 回合 2:找出編號最小的葉節點「3」。記錄它的唯一鄰居「4」。將節點 3 移除。序列目前為:
2, 4。 - 觀察剩餘樹的葉節點為:4, 5。
- 回合 3:找出編號最小的葉節點「4」。記錄它的唯一鄰居「2」。將節點 4 移除。序列目前為:
2, 4, 2。 - 由於樹中只剩下 2 個節點 (2, 5),演算法停止。
- 答案:Prüfer Code 為
2, 4, 2。
【題型 2:由 Prüfer Code 還原 Tree】
- 常考頻率:⭐⭐⭐⭐
- 重要程度:高(逆向工程,失分率極高的題型)
- 題目:給定 Prüfer Code 為
2, 4, 2,已知 ,請還原其生成樹的連接邊。 - Step-by-step 解答:
- 準備所有節點列表:{1, 2, 3, 4, 5}。
- 回合 1:目前序列為
2, 4, 2。找出「未出現在序列中」且「未被連線」的最小節點,即為「1」。將 1 連接到序列的第一個數字「2」。將 1 標記為已連線,並劃掉序列第一個 2。 - 回合 2:目前序列為
4, 2。未被連線且未出現在序列的最節點為「3」。將 3 連接到序列第一個數字「4」。將 3 標記為已連線,劃掉序列第一個 4。 - 回合 3:目前序列為
2。未被連線且未出現在序列的最小節點為「4」。將 4 連接到序列第一個數字「2」。將 4 標記為已連線,劃掉序列第一個 2。 - 序列空了。將最後剩下的兩個未標記節點「2」和「5」直接相連。
- 答案:連線邊為 (1,2), (3,4), (4,2), (2,5)。
⚠️ 考前避坑指南
- 不要混淆 Tree 與 Binary Tree 的公式:在計算 m-ary tree 的節點數時,切記 不一定是 2。遇到 時,一定要先確認題目規定的 是多少。
- 建構 Huffman Tree 絕對不能排錯順序:每次合併完產生「新的內部節點頻率」後,必須重新將其放回候選池中參與下一次的「取最小兩個」的比較。很多學生會忘記把剛合併的數字與原本剩餘的節點重新排序,導致樹的結構完全錯誤。
- Prüfer Code 的致命盲點:
- 產生 Code 時:每次刪除的是當前編號最小的葉節點,不是隨便挑一個葉節點。
- 還原 Tree 時:尋找配對節點的條件是「未出現在『當前剩餘』序列中」的最小可用數字。如果某個數字前面被劃掉了,但在剩餘序列中已不存在,它就有資格被選為葉節點。
- 停止條件:當節點數剩下 2 個時就必須停止,切勿將最後兩個節點也寫進 Code 裡!Code 的長度永遠死守 。
文章分享
如果這篇文章對你有幫助,歡迎分享給更多人!