演算法
# DP跟divide and conquer差在哪
**分而治之法 (Divide and Conquer)** 如果問題很大,我們就把問題**分解成較小的子問題**,然後分別解決這些子問題。一旦所有的子問題都解決了,我們就把所有子問題的解決方案組合起來,找到大問題的解決方案。分治法的限制是子問題應該與原問題屬於同一類型。例如,如果主要問題是排序,那麼子問題也應該是排序。分治法的策略本質上是遞迴的。
動態規劃(**Dynamic Programming**) 則是將優化問題分解成更簡單的子問題,並**存儲**每個子問題的解決方案,以便每個子問題只需要解決一次。一旦所有的子問題都解決了,我
more...離散數學
# 背包問題
背包問題(Knapsack Problem)是一個經典的優化問題,屬於組合優化問題的一種,有一個固定容量的背包和一組具有不同價值和重量的物品,我們需要在限制背包容量的條件下,選擇最佳的物品組合,使得**總價值最大化**,可以使用**動態規劃**、**貪婪算法**來找到最佳解。
背包問題可以分為兩種主要的變體:
1. 0/1 背包問題(0/1 Knapsack Problem):每個物品要麼全部放入背包,要麼完全不放入背包,**無法將物品分割**為部分放入。
2. 分數背包問題(Fractional Knapsack Problem):每個物品**可以按比例分割**,可以將物
more...線性代數
# 求法向量
要求一個平面或線的法向量,可以使用幾何或向量運算的方法。法向量是與該平面或線垂直的向量。
以下是一個簡單的範例來說明如何求一個平面的法向量:
考慮一個平面的一般方程式:ax + by + cz + d = 0
根據這個方程式,我們可以觀察到,係數 a、b 和 c 對應於平面的法向量的 x、y 和 z 分量。
因此,平面的法向量是 N = (a, b, c)。
這樣,我們就找到了平面的法向量。
# 線性獨立
在線性代數中,線性獨立是指一組向量或一組函數的集合,其中沒有一個向量或函數可以表示為其他向量或函數的線性組合。
- 換句話說,如果一組向量或函數中的每個成員都
more...作業系統
# Race Condition 是什麼?
**競爭條件 (Race Condition)** 兩個或兩個以上的進程或線程在更改 **共享資源(Share Resource)** 時會發生的情況。
例如,假設我們有兩個Process A 和 B,都想要訪問同一個共享變量。
如果 A 和 B 都嘗試在同一時間讀取和修改這個變量,那麼就**可能**會產生競爭條件。
如果沒有提供**互斥存取**,我們**無法確定** A 和 B 的執行順序,所以最終的結果可能會有所**不同**。
解決方式:
- 鎖(Locks)
- 原子變量(Atomic Variables)
# 同步 (Synchro
more...機率與統計
# 互斥和獨立事件
**互斥事件**指的是兩個或多個事件不可能同時發生的情況。
如果事件 A 發生,那麼事件 B 就不可能發生,且反之亦然。
數學上,兩個互斥事件 A 和 B 的概率滿足 P(A ∩ B) = 0,**即它們的交集為空集**。
例如,擲一個骰子,事件 A 是出現奇數點數,事件 B 是出現偶數點數。
由於奇數和偶數是互斥的,因此在一次擲骰子的結果中,不能同時出現奇數和偶數。
因此,事件 A 和事件 B 是互斥事件。
---
**獨立事件**指的是兩個或多個事件的發生與其他事件的發生無關。
如果事件 A 發生與否**不會影響**事件 B 發生的概率。
數學上,獨立事件 A
more...程式題目
# call by value (傳值)
- 在Call-by-Value中,函式的參數是被傳遞值的**副本**。
- 在函式內部,對參數的修改不會影響到原始的變數。
:::info
### call by address (傳位置)
- 傳了實際的記憶體位置進去function
- 也是`call by value`的變形,但傳遞的是**記憶體地址**。
- 在函式內部,通過指標可以修改原始變數的值。
:::
# call by reference (傳參考)
- 在Call-by-Reference中,函式的參數接受原始變數的參考(或記憶體位置)。
- 在函式內部,對參數的修
more...








