跳轉到內容

A-level 數學/OCR/D1/演算法

來自華夏公益教科書,開放的書本,開放的世界

演算法

[編輯 | 編輯原始碼]

以下是 D1 演算法內容的框架,內容來自 AQA、OCR、OCR MEI 和 Edexcel 的規範。並非所有規範都包含以下所有內容。

演算法簡介

[編輯 | 編輯原始碼]

什麼是演算法?

[編輯 | 編輯原始碼]

演算法是一組精確的指令,遵循這些指令可以解決問題。它們可以以各種形式呈現,例如文字、圖片、流程圖。食譜、編織圖案、設定 VCR 或組裝桌子的說明都是我們在日常生活中可能遇到的演算法的例子。

為什麼使用演算法?

[編輯 | 編輯原始碼]

演算法的主要優勢是我們可以使用計算方法來解決問題。一個人很容易將數字 2、5、3、1 和 4 按升序排列,但要對一個包含 1000 個隨機數字的列表進行排序,則需要花費長得多的時間。此外,擁有一個演算法意味著其他人可以實現與您相同的結果,而無需弄清楚如何實現它。具體來說,擁有一個演算法可能允許計算機執行這些操作。

流程圖

[編輯 | 編輯原始碼]
Basic Flow Diagram
基本流程圖

您可能需要能夠遵循或建立流程圖,以演示演算法。有三種基本形狀使用

  • 橢圓形,用於開始和停止以及輸入和輸出。
  • 矩形,用於計算和指令。
  • 菱形,用於是/否問題。

排序演算法

[編輯 | 編輯原始碼]

一個例子

[編輯 | 編輯原始碼]

給定一副 52 張牌,要根據花色進行排序;它們在當前牌序中的位置用數字表示

  1. 第 1 張牌是什麼花色?它是紅心。
  2. 第 2 張牌是什麼花色?它是黑桃。我們想要一個黑桃在紅心之前的牌組。因此,我們將這兩張牌交換,然後退一步。如果我們已經處於開頭,則忽略退一步的需要。
  3. 現在的第 1 張牌是什麼花色?它是黑桃。
  4. 現在的第 2 張牌是什麼花色?它是紅心。這兩張牌的順序正確,因此我們不交換它們,而是轉到牌組中的下一張牌。
  5. 第 3 張牌是什麼花色?它是紅心。它與前一張牌相同,因此我們繼續到牌組中的下一張牌。

........... 依此類推,直到我們到達倒數第二張牌。我們進行比較,必要時交換,然後停止排序。

  • 接下來,我們將紅心(或我們想要的任何其他花色)從 52 張牌的牌組中分離出來,現在只剩下 13 張牌的牌組,然後根據 2、3、... J、Q、K、A 對這個較小的牌組進行排序,並對其他 3 種花色也是如此,一次一種。
  • 之後,我們幾乎完成了,將 4 組各 13 張牌合併成一個包含 52 張牌的大牌組,然後停止。

氣泡排序

[編輯 | 編輯原始碼]

對於一組數字,將第一個數字與其右側的數字進行比較。

13, 2, 4, 3, 82

13>2,因此它向右移動。

2, 13, 4, 3, 82

13>4,因此它向右移動。

2, 4, 13, 3, 82

13>3,因此它向右移動。

2, 4, 3, 13, 82

13<82,因此它保持不動。

在第一遍結束時:2, 4, 3, 13, 82
在第二遍結束時:2, 4, 3, 13, 82
在第三遍結束時:2, 3, 4, 13 82

這組數字只需要 2 遍,但在更大的資料集上,它會變得相當大。假設集合中的專案是唯一的,則最大遍數等於集合的大小。

穿梭排序

[編輯 | 編輯原始碼]

從一組數字中,選擇前兩個數字並將其劃線。這兩組數字是在第一遍中排序的。
在第二遍中,要排序的數字範圍增加一個,因此比較前三個數字並將它們按順序排序。
依此類推,直到所有數字都被包含在範圍內並排序。
第一遍 - 23, 2, 4, 8, 9 - 23>2,因此 2 被排序到左側。
第二遍 - 2, 23, 4, 8, 9 - 23>4,因此 4 被排序到左側。
第三遍 - 2, 4, 23, 8, 9 - 數字已排序
第四遍 - 2, 4, 8, 23, 9 - 數字已排序
最終的數字集 = 2, 4, 8, 9, 23 - 數字已排序

快速排序

[編輯 | 編輯原始碼]

使用中點作為樞軸(或問題中要求您使用的任何值),對每個子列表執行穿梭排序。繼續,直到除一個之外的所有項都用作樞軸。

插入排序

[編輯 | 編輯原始碼]

希爾排序

[編輯 | 編輯原始碼]
  • 將數字集分成 n/2 個子列表。
  • 對子列表進行穿梭排序。
  • 重新組合資料範圍,並將其拆分成之前子列表數量的一半。
  • 再次對資料範圍進行穿梭排序。
  • 重複此過程,直到子列表的數量為 2。

另請參閱

[編輯 | 編輯原始碼]

維基百科:排序演算法

打包演算法

[編輯 | 編輯原始碼]

滿箱演算法

[編輯 | 編輯原始碼]

“滿箱”演算法是一種將可以填滿“箱子”的物體組合在一起,以儘可能少的箱子來裝載所有物體。剩下的物體再裝入其他箱子。以下示例可以很好地說明這一點(注意:這不是考試題,也不代表實際試卷上的複雜程度)。

問)一家電腦軟體公司需要將軟體釋出到容量為 200 kB 的軟盤上。檔案的大小分別為 25 kB、90 kB、30 kB、120 kB、190 kB、10 kB、70 kB、40 kB、100 kB、140 kB 和 80 kB。需要多少張軟盤?使用“滿箱”演算法來得到一個解決方案。

答)首先,沿著列表查詢加起來等於 200 的值。沒有特定的方法(每個人似乎都用不同的方法),但我發現找到加起來等於完整 10 的組合會有所幫助,等等。用這些組合填充“箱子”。

箱子 | 檔案


A | 120, 80


B | 190, 10


C | 70, 40, 90


這留下了 25、30、100 和 140。使用剩餘的值儘可能地接近滿箱是有意義的。

(140 + 25 + 30) = 195 <- 所以將這些值放到下一個箱子中,剩下 100 放入最後一個箱子中。

解決方案

箱子 | 檔案


A | 120, 80


B | 190, 10


C | 70, 40, 90


D | 140, 25, 30


E | 100


需要 5 張軟盤才能容納所有檔案。

首次適應

[編輯 | 編輯原始碼]

依次將每個物體放入第一個可以容納它的可用空間。

首次適應遞減

[編輯 | 編輯原始碼]

使用其中一種排序演算法按大小遞減順序重新排序箱子,然後將首次適應演算法應用於重新排序的列表。

搜尋演算法

[編輯 | 編輯原始碼]
[編輯 | 編輯原始碼]

另請參閱

[編輯 | 編輯原始碼]

維基百科:演算法

華夏公益教科書