AP325

跨出精進演算法的第一步

洪翠憶

Index

AP325連結

AP325 Introduction

程設資結迷惘,算法遞迴如夢,冷月豈可葬編程,柳絮靜待東風。
鄭愁予:「我打江南走過,那等在季節裏的容顏如蓮花的開落,東風不來,三月的柳絮不飛,你的心如小小寂寞的城,...」直到遇上了程式,......。

– 吳邦一 教授

AP325簡略目錄

AP325簡略目錄

AP325簡略目錄

AP325簡略目錄

AP325簡略目錄

2-1班群可能會學到的部分

教材說明

  • AP325 → APCS 實作3級分 to 5級分
  • 實作考4題,每題100分
  • 實作題難度幾乎都是由簡單排到難
  • 三級分的程度大概是會做好前兩題,五級分只能錯半題,要達到四五級就是要答對第三第四題
  • 第三與第四題則涉及常見的資料結構與演算法
  • APCS的編譯環境: C++版本為 C++ 11、編譯器優化為 O2...
  • 針對考試與競賽的

競賽版

C++起手式

#include <bits/stdc++.h>
//萬用標頭檔
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	//優化cin/cout速度
	// code here
	return 0;
}
  • 𝐜𝐢𝐧/𝐜𝐨𝐮𝐭效率不佳,容易TLE(time limit exceed,執行超過時限),習慣用𝐬𝐜𝐚𝐧𝐟/𝐩𝐫𝐢𝐧𝐭𝐟的話就不會有這個問題

Big O

表示法:O(𝐟(𝐧))

  • n: 資料量
  • 意義:當資料量為 n 時,這個程式(演算法)的執行時間(執行指令數)不超過 f(n)的某個常數倍
  • 資料量大小:輸入的資料量,例如整數個數、字串長度等等
  • 常見的複雜度有:O(n)、O(n*log(n))、O(n^2)、O(2^n)...

原則

  • 根據定義,不計算常數倍數

    • 沒管O(2n)、O(4n)那些
    • 所以log(n)不必指明底是2或10
  • 兩函數相加時算比較大的那個

    • 若O(f(n)+g(n)),其中f(n)>g(n),則會表示成O(f(n))
  • 若O(𝐟(𝐧))執行𝐠(𝐧)次,則O(𝐟(𝐧)*𝐠(𝐧))

  • 一般的複雜度指的是worst-case複雜

    • 最難計算的資料所需的時間
    • 程式的複雜度通常會因為輸入資料不同而改變

舉例

char a[100];
std::cin >> a;
std::cout << a;

O(1)

int n;
char a[100];
std::cin >> n >> a;
for(int i = 0; i < n; i++)
	std::cout << a[i];

O(𝐧)

int a = 2, arr[5] = {2, 5, 7, 9, 25};
int s = 0, e = 4, i;
do{
    i = (e + s) / 2;
    if(arr[i] == a){
    	std::cout << "find it at " << i << ".\n";
        break;
    }else if(arr[i] > a)
    	e = i;
    else
    	s = i;
}while(e - s > 0);
std::cout << "end";

O(𝐥𝐨𝐠(𝐧))

需要留意的事

整數溢位(Overflow)

  • 成因

    • 變數若超過型態可表示範圍,就會發生溢位
    • 編譯器無法察覺
  • 解決方法

    • 一律用long long存整數(int只能存4 bytes,但long long可存8 bytes)
    • 取模數(modulus)

%

10

15

5

int用C語法轉型long long & 簡單講一下位元運算

long long a = 1 << 40;
//1和40會被當成int,所以在回傳到a時它還是個int,故溢位

long long a = (long long)1 << 40;
//C風格轉型
  • <<:左移運算子

  • >>:右移運算子

ex.

1      << 4 =    16

00001 << 4 = 10000

判斷式的短路求值(short-circuit evaluation) & 編譯器優化

while(i < 5 && a[i] != 0)
//&&若前面條件已不符合,則直接回傳false

for(int i = 0, len = a.size(); i < len; i++)
//這樣就不用每跑一次迴圈,取一次大小了

Kahoot!

Reference

Introduction of ap325

By justhentai

Introduction of ap325

  • 308