初學紀錄 - Tree
樹狀圖 學跟 Tree 有關的演算法之前要先認識 Graph 這結構 Graph 定義 abstract data type 包含 finite set (nodes 跟 points) 點跟點相連的線 edges Tree 定義 tree is a graph without a loop one and only one root 不能出現兩個 root 滿足上面兩點就是 tree 有用到 Tree 的應用: DOM(Document Object Model) 文件存放位置的資料(File System) Artificial Intelligence Tree Traversal有系統性地把在 Tree 裡面的 nodes 給找出來。 tree Traversal 最主要的兩種做法 Breadth-First Tree Traveral Depth-First Tree Traversal PreOrder InOrder PostOrder Breadth-First Tree Traveral(BFS)Breadt...
初學紀錄 - Stack and Queue and Hashtable
抽象的一種資料類型 可以用任何方式來做出 Stack 或是 Queue 可以用 array 或是 linked list 做出來 undo / redo button 會使用到 Stack 的資料結構 想像 Stack → 洋芋片罐 移除的話從最上面移除 想像 Queue → 排隊 Hash Function 密碼做加密 javascript 的 objectsa and arrays 已經被 hashed 過 理解: 把一個值換成另外一個值 Hash Function I :Division Method m= hashtable size n= # of elements to store into hashtable 公式 Index = Key mod m 衝突叫做 collison(有可能會發生) 優點是速度很快,跟 Multiplication Method 比起來 缺點 m 一定要 >= n 大小不能是 2 的 p 次方 Collision and Load...
拳擊整理先備知識
YT 找免費教學影片研究,整理些我覺得的重點,剩下的到拳館練習。 拳擊站架 右撇子 → 左手左腳在前,右手右腳在後 移動 保持拳擊架勢 重心穩定,間距與肩同寬 要往哪一邊移動就是那一邊腳先動 都是用前腳掌去接觸地板 正式開始打拳之前要知道的 拳擊打擊的接觸面 → 食指和中指的指節 要密免打擊的 → 小指指節 基礎六種拳路 刺拳 編號 1 拳擊最重要的拳 試探對手以及測量你的攻擊距離 口訣:直線出去、直接回來 出拳的同時要搭配吐氣(限制氣息的吐氣) 想要打得更遠可以搭配前腳踩進去 Cross 右直拳 編號 2 重拳,也是刺拳後面可以去接續的重拳 錯誤:上半身前傾,要注意上半身在打擊得時候要是直立的 左勾拳 編號 3 打完之後拳頭會在臉部的中間位置 手臂與地板平行,手軸的夾角 90 度 拇指朝上的打法比較不會造成肩膀的不舒服 分三種距離:遠、中、近 距離的控制在於揮出去手肘的角度,角度越大越遠 右勾拳 編號 4 力量大、動作比較大,容易被對手判斷 運動臀部旋轉將重心帶到前腳 60% 後腳 40% 跟左...
初學紀錄 - Linked List
跟 Array 非常類似,但有些不一樣 linear collection java 裡面如果寫 java 比較複雜,你要告訴 java 說這個 array 長度是多少 javascript 為什麼不需要設定 array 的長度有多少? Linkeded List 在記憶體裡面位置是不連續的 實際上只有兩個 property, head 跟 length 會透過連接 value 及 next(一個 node 裡面會包含這兩個) head 指向第一個 value 後,next 會指向下一個 value 最後一個 next 沒有值了就指向 null 多指一個後,length + 1 advantages array 的話在一開始就已經定義了長度 linked list 一開始不會設定長度多少,會從 0 開始 跟 array 相比 linked list 在做 insertion 跟 deletion 非常的快 刪掉某一個值或是新增某一個值的速度會被 array 快很多 對於 linked list 來說刪除跟新增就是指向給替換一下就好 刪除 ...
初學紀錄 - Binary Search
假如排序好的話,有一種比 linear search 這種從第一個找到最後一個更快速的演算法 只需要一直切分對半,透過這種方式更快拿到目標。 所謂的 binary 是二進制 要注意的點,linear search 可以用在各種 array, 而 Binary Search 只能用在 sorted array More efficient than linear search 8 → 4 → 2 → 1, at most 3 steps to find what we want 時間複雜度 Worst Case Performance:O(log n) 時間複雜度 Best Case Performance: O(1) 時間複雜度 Average performance:O(log n) 其實也不算完全初學,之前就有碰過類似概念,稍微做一下整理。 核心概念Binary Search 是一種 在已排序資料中快速尋找目標值 的演算法。 它的核心就是 每次比較中間值,並把搜尋範圍縮小一半: 從整個資料範圍開始。 找到中間元素,和目標比較: 如果相等 → 找到答...
初學紀錄 - Linear Search
紀錄過程Linear Search → 號稱最簡單的演算法 Pseudocode (P 不發音) 不是真正的程式碼,只是用來表達情境 parameter 參數 思考一下我還記得 For loop 跟 While loop 差別嗎? 想像中是表示從第一個開始尋找,找到最後一個,找到就回傳,如果真的沒找到全部跑完,那就回傳 -1。 作用在 Array 的時候。 那所謂最糟糕的情況就是就是要全部跑完都找不到,會在 Array 的最後一項。 如果總共有 n 項(index),就會從頭 0、1 找到 n-1,每個都找一次就像是 for i → i → … → i 所以最壞狀況 Worst Case Performance: O(n) 最好的情況就是馬上找到,就直接在第一項。 Best Case Performance: O(1) 所以平均下來,你要找到你要的 n 的話 Average performance: O(n/2) 做個整理, 我覺得這個相對單純簡單,所以沒有太大問題, 目前有一些疑惑是: 上面提到的都是時間複雜度的部分,那空間複雜度的部分沒什麼概念 會作用在哪裡?什...
初學紀錄 - Complexity and Big O notation
要看一個演算法好不好、運行快不快,就會需要用到 Big O notaion 運行得快不快 → 時間複雜度 消耗多少的電腦記憶體空間 → 空間複雜度 Big O notaion 是一個數學符號,可以拿來表示時間複雜度或是空間複雜度 如果兩種演算法都能做一樣的事情,只是做法不同而已的話,有差異的部分是時間、空間 比如加法到 n 有兩種方式,一種是 For 迴圈,一種是公式解 關於怎麼判斷演算法好壞,無非就是執行速度,或是占用記憶體多寡 一般沒有學過演算法的人很難看出來 大家在意的是時間跟空間 f(n) → f of n 來表示 時間複雜度可能會隨著 n 增加更多 可以理解成運行幾次 我想要透過研究及學習釐清的困惑點: 演算法這個詞是什麼意思? 為什麼要用 Big O? 了解 Complexlty 的幫助 演算法這個詞是什麼意思?定義:step-by-step procedure to solve a problem。 意思是說只要一步一步解決某一個問題,都可以稱作是演算法,而在這邊我會當作是作用於電腦的。 (設計給電腦執行的解法) 如果不...
為什麼我之前一段時間幾乎天天吃全家?
超商飲食日常:其實也沒那麼不健康以前我會覺得吃超商等於不健康,但後來仔細想想,在外食選擇裡,超商其實算是不錯的選擇。 這不僅僅是為了省錢,但其實說真的在台北的話超商真的蠻划算的,還會打折,變身成乞丐超人是台北打工人的必備生存技巧。 除了我很窮之外,也有一部分原因是超商的食物成分來源寫得很透明,今天我如果要精準的控制要吃多少大卡,多少蛋白質,其實吃超商很方便,另外要提到健康的話,超商也能吃的相對健康。 我的常見選擇我幾乎都是全家,個人覺得在超商裡面食物相對清淡,而且他離我家算比較近。 後來因為幾乎天天吃,所以就有下載全家 APP,直接用 APP 綁信用卡跟載具來支付,只要拿手機就能結帳很方便。 主餐(午餐、晚餐 )常點的就是這幾款餐盒: 健身G肉餐盒 烤蛋白餐盒 美式雞丁餐盒 火烤胸排蔬滿盒 鹽蔥雙牛蔬滿盒 如果沒有特價,我通常會選 美式雞丁餐盒,因為裡面的焗烤蛋超好吃。缺點是香菇真的很鹹,我有考慮直接把香菇 pass 掉。 有特價選特價的,直接打七折,等於如果要 99 元,打完折就只要 70,省爆。 依照情況會再搭配無糖豆漿來配。 早餐日常如果早上到公司,我會在路...
電腦螢幕知識,解析度與像素
直接進重點最近買螢幕才發現很多眉角要注意,如果什麼都不懂的情況下去挑螢幕,很容易因為一些誤區而購入了不適合自己的螢幕,其中我覺得解析度與像素這邊是影響價格最大的部分,也是很多人不了解的地方。 常見的解析度有: HD (1280 x 720) FHD(1920×1080) QHD(2560×1440) 4K UHD(3840×2160) 後面掛號起來數字 x 數字的那個數字就是像素,而解析度指的就是有多少個像素,像素可以想像成是一小塊一小塊的,如果仔細看自己的螢幕,會發現螢幕就是由這一小塊一小塊的像素組成的,下面參考資源第一篇裡面有提到一個很好的解釋「這就好比用磁磚一塊塊拼出馬賽克圖案,而畫裡的每一塊磁磚就是一個像素」。 越多的像素畫面就會越清晰,參考下圖: 左邊:像素數少,邊緣鋸齒明顯 中間:像素數中等,畫面較平滑 右邊:像素密集,細節清晰、邊緣平滑 同樣的寬度裡面塞了越多像素就代表像素越小,越小畫面越精細。 拿 HD (1280 x 720) 來舉例, 代表的是橫排有 1280 個像素,直排有 720 個像素,這也是很常見 720P 的含義,HD 指的是 High...
AI 未來的交通規則?淺談 Massively Multitask Language Model Control Protocol(MCP)
目前大型語言模型 ( LLM ) 選擇非常多,不只是最為人所知的 ChatGPT,還有像是 Claude 、Gemini、Mistral、Meta AI 等等。 一般狀況下使用的情境都能用自然語言溝通就好,像是問一些知識,請 LLM 生一些文案,翻譯或是改寫東西,或是當成計算機都可以,模型會直接回覆,也只需要依靠模型本身知識就好了。 但如果今天的情境需要用到對接外部服務,比如說你想要看某一個網站內登入之後的資料,你直接貼那個網址給 LLM 看並請他幫忙整理,是沒有辦法可以直接做到的。 這時候比較好的做法就會利用到 MCP。 MCP 的核心概念MCP 全名是 Model Context Protocol。 是一個協議而不是工具或是 API gateway,在 2024 年 11 月時由 美國公司 Anthropic 所推出,一套定義了標準化方式讓 AI 可以對接不同工具。 Anthropic 這家公司就是現在鼎鼎大名的 Claude 開發商,現階段 OpenAI 及 Google DeepMind 都已經採用 MCP 來作為連結模型跟數據源的標準方式。 來源在此:https://e...
