---
title: python讀書會(九)
tags: python讀書會
notes: 爬蟲、神經網路、DL、ML、unicode、蠕蟲、木馬、python套件介紹...
---
{%hackmd @themes/orangeheart %}
## 9.0 沒有回顧
:::success
沒有回顧喔~我們python部分幾乎是上完了啦,接下來是一堆python周邊功能套件,或是其他電腦科學的東東,簡稱"煉蠱"。
:::
## 9.1 資料結構(Data structure)
電腦之所以可以進行許多功能,是因為裡面有許多不同型態的資料與指令,所以如果我們想更加深入了解電腦程式的運作,需要學習資料結構以及演算法(Data structure and Algorithm),知道不同型態資料應該如何儲存及排列,還有電腦如何提取資料。
以下是不同型態的資料結構:


### :rabbit:演算法基本操作
對於大量資料,我們主要可以進行以下動作:
**搜索 Searching:** 我們可以搜索數據結構中的任何元素。
**排序 Sorting:** 我們可以按升序或降序對數據結構的元素進行排序。
**插入 Insertion:** 我們還可以在數據結構中插入新元素。
**更新 Updation:** 我們還可以更新元素,即我們可以用另一個元素替換元素。
**刪除 Deletion:** 我們還可以執行刪除操作,從數據結構中刪除元素。
可以想像打撲克牌時,拿到一堆無序排列的卡牌,你會如何去整理、洗牌、還有出牌和抽牌。

### :rabbit:演算方法
**暴力演算法 Brute force algorithm**
即窮舉法,搜索所有可能性以提供所需的解決方案。這樣的算法有兩種類型:
* 優化:找到問題的所有解,然後取出最佳解,或者如果已知最佳解的值,則終止。
* 犧牲:一旦找到解決方案,它就會停止。
**分治法 Divide and conquer**
它允許您以逐步變化的方式設計算法。它分解算法以不同的方法解決問題。它允許您將問題分解為不同的方法,並為有效輸入生成有效輸出。這個有效的輸出被傳遞給其他一些函數。
**貪婪演算法 Greedy algorithm**
是一種在每次迭代中都做出最優選擇,希望得到最優解的算法範式。它易於實施並且執行時間更快。在極少數情況下它會提供最佳解決方案。
**動態規劃 Dynamic programming**
它通過存儲中間結果來提高算法的效率。它遵循五個不同的步驟來找到問題的最佳解決方案:
1. 分解問題後,它會從這些子問題中找到最優解。
2. 存儲子問題的結果稱為記憶。
3. 重複使用結果,這樣就不會為相同的子問題重新計算它。
**分支定界法 Branch and Bound Algorithm**
分支定界算法只能應用於整數規劃問題。這種方法將所有可行解集分成更小的子集。進一步評估這些子集以找到最佳解決方案。
**隨機化演算法 Randomized Algorithm**
具有一些定義的輸入集和所需輸出並遵循一些描述的步驟的算法被稱為確定性算法。當在隨機算法中引入隨機變量時會發生什麼?在隨機算法中,算法引入了一些隨機位,並將其添加到輸入中以產生本質上隨機的輸出。隨機算法比確定性算法更簡單有效。
**回溯法 Backtracking**
回溯是一種算法技術,它遞歸地解決問題,如果解決方案不滿足問題的約束條件,則刪除該解決方案。
### :rabbit:演算法複雜度
* **時間複雜度**
是表示時間複雜度的漸近表示法。時間複雜度主要是通過計算完成執行的步數來計算的。
大O (big O)表示法,O(N)表示法,表示時間複雜度上限。
大Ω表示法,表示時間複雜度下限。
大θ表示法,表示時間複雜度平均以及其波動情況。
- [ ] Pseudocode
```=
sum=0;
for i=1 to n
sum=sum+i;
return sum;
```
* **空間複雜度**
算法的空間複雜度是解決問題並產生輸出所需的空間量。與時間複雜度類似,空間複雜度也用大O表示法表示。
1. 程式指令
2. 常量
3. 變量
4. 函數調用、break、continue
5. 輔助空間
### :rabbit:Searching Algorithm
* Linear Search Algorithm:$O(N)$

* Binary Search Algorithm:$O(logN)$

### :rabbit:Sorting Algorithm
* Bubble sort Algorithm:$O(N^2)$

* Bucket Sort Algorithm:$O(N^2)$ (better than bubble)

* Comb Sort Algorithm:$O(N^2)$ (better than before two)

{%youtube ob49RukGnAw %}
我不會說我平常在偷懶的時候都一直看這種影片~
{%youtube kPRA0W1kECg %}
## 9.2 資訊安全(Information security)
### :globe_with_meridians:網路安全(Cyber Security)
網絡安全是旨在保護網絡、設備、程序和數據免受攻擊、盜竊、損壞、修改或未經授權訪問的技術、流程和實踐的主體。
#### **網絡安全目標:**
:heavy_check_mark:機密性 Confidentiality:加密、權限控制、驗證、授權、物理安全
:heavy_check_mark:完整性 Integrity:備份、校驗資料總和、數據校正碼
:heavy_check_mark:可用性 Availability:物理保護、計算容錯
#### **網路安全的常見威脅:**
<font color=#BF1005>**惡意軟件 Malware**</font>
是最常見的網絡攻擊工具。它被網絡罪犯或黑客用來破壞或破壞合法用戶的系統。以下是黑客創建的重要惡意軟件類型:
* [病毒 Virus](https://hackmd.io/@Poorbees-Squid/rJxtEl8wo)
* <font color=#EF7060>**間諜軟件 Spyware**</font>
* <font color=#EF7060>**勒索軟件 Ransomware**</font>
* <font color=#EF7060>**廣告軟件 Adware**</font>
<font color=#BF1005>**網絡釣魚 Phishing**</font>
通過電子郵件、電話或帶有鏈接的短信聯繫一個或多個目標,說服他們點擊該鏈接。此鏈接會將他們重定向到欺詐網站,以提供敏感數據,例如個人信息、銀行和信用卡信息、社會安全號碼、用戶名和密碼。單擊該鏈接還會在目標設備上安裝惡意軟件,使黑客能夠遠程控制設備。
<font color=#BF1005>**MITM**</font>
其中網絡罪犯攔截兩個人之間的對話或數據傳輸。一旦網絡犯罪分子將自己置於兩方通信的中間,他們看起來就像真正的參與者,可以獲得敏感信息並返回不同的響應。此類攻擊的主要目的是獲取對我們的業務或客戶數據的訪問權限。
<font color=#BF1005>**DDoS**</font>
網絡犯罪分子通過使用互聯網流量向目標或其周圍基礎設施滿足合法請求來破壞目標服務器、服務或網絡的正常流量。
<font color=#BF1005>**SQLI**</font>
當網絡犯罪分子使用惡意 SQL 腳本進行後端數據庫操作以訪問敏感信息時,就會發生這種攻擊。一旦攻擊成功,惡意行為者就可以查看、更改或刪除存儲在 SQL 數據庫中的敏感公司數據、用戶列表或私人客戶詳細信息。
<font color=#BF1005>**域名系統攻擊 DNS**</font>
網絡罪犯利用域名系統中的缺陷將站點用戶重定向到惡意網站(DNS 劫持)並從受影響的計算機竊取數據。這是一個嚴重的網絡安全風險,因為 DNS 系統是互聯網基礎設施的重要組成部分。
## 其他資源
:::spoiler 網路爬蟲參考資料(點我展開)
**[爬蟲1](https://github.com/shengqiangzhang/examples-of-web-crawlers)**
**[爬蟲2](https://github.com/buckyroberts/Spider)**
**[爬蟲3-中央氣象局](https://steam.oxxostudio.tw/category/python/spider/forecast.html)**
:::