[{"content":"我從以前到現在都不太擅長二分搜相關的題目。\n有人可能會想：\n「二分搜不就是一直往中間找嗎？有什麼難的？」\n實際開始寫題目後，才會發現二分搜的題目不知道要搜尋什麼，甚至看不出來題目是二分搜。\n大部分二分搜的題目，很多時候根本沒有實際的陣列可以搜尋。\n而是要用到 Greedy Algorithm 先把 check() 寫出來，再對超大範圍的答案做搜尋。\n這篇主要是整理我自己一路以來對二分搜尋的綜整理解。\n簡單粗暴的理解二分搜尋 這邊就不對簡單的二分搜尋基本概念作講解了，直接進入正文。\n對陣列進行二分搜尋 一般提到二分搜，都是像這樣去陣列裡面找：\n但大部分會出現二分搜的題目，通常都不是在「已經給定的陣列」裡面搜尋。\n而是直接給你一個巨大的答案範圍，然後詢問類似這樣的問題：\n最小的最大值 至少需要多少 最大可以到多少 這種需要在大範圍答案中，找出符合條件的極值的問題。\n不太可能真的去創建及遍歷一個大小可能為 $10^9$ 的陣列，一般會直接用「對答案二分搜」來解答。\n對答案進行二分搜尋 我們可以用非常非常簡單的問題來舉例：\n在 1 ~ 100 這個範圍內，尋找小於 45 的最大數字。\n將條件寫成 check() 函式 我們可以將 檢查數字是否 \u0026lt; 45 寫成一個名為 check 的 bool 函式：\nbool check(int val){ return val \u0026lt; 45; } 只要 check() 回傳 ture 就代表 數字 \u0026lt; 45。\n假設透過 check() 將整個範圍的數字進行判斷，會出現像是這樣的圖：\n這時候會發現整個陣列，被切成了 符合條件 與 不符合條件 兩個區域。\n這就符合了二分搜所需的單調性(Monotonicity)，因此可以直接對這個範圍進行二分搜。\n初始化左右邊界與中間值 首先設定名為 L 與 R 作為邊界值，並分別給予 1 和 100 的初始值\nint L = 1, R = 100; 設定二分搜的中間值 Mid，並初始化為 L 與 R 的中間值。\nint Mid = L + (R - L) / 2; 💡 提示 盡量不要直接寫 (L + R) / 2。當 L 與 R 很大時，可能會造成溢位。\n模擬二分搜尋的過程 將 Mid 傳入 check()，試著模擬二分搜的過程：\ncheck(Mid) = false。代表 Mid 太靠右，將 R = Mid 以此收窄右邊範圍。 check(Mid) = true。代表 Mid 太靠左，將 L = Mid 以此收窄左邊範圍。 check(Mid) = true。繼續收窄範圍。 收斂到答案 一直循環往復直到 L + 1 == R，邊界 L 與 R 完全收窄：\n此時：\nL 就是 符合條件的最大值 R 就是 不符合條件的最小值 因此答案就是目前的 L，也就是 44。\n我們可以將上述的過程撰寫成程式碼：\npair\u0026lt;int, int\u0026gt; binarySearch(int L, int R){ while (L + 1 \u0026lt; R) { int Mid = L + (R - L) / 2; if (check(Mid)) L = Mid; else R = Mid; } return {L, R}; } 額外擴展邊界？ 不過這個程式碼還有一點問題。\n一開始定義：\nL 一開始一定要是 true R 一開始一定要是 false 當全部數字都符合條件或是全都不符合條件時，會導致最後算出的 L 和 R 是錯誤的。\n因此可以在二分搜一開始直接擴展邊界一格：\n--L, ++R; 就可以避開這個問題。\n二分搜尋模板 若將 binarySearch() 加上 C++ 的泛型，並將 check() 改成使用 Lambda 撰寫並傳入。\n則可以寫出十分簡單易記的二分搜萬用模板：\ntemplate \u0026lt;typename T, typename FuncT\u0026gt; pair\u0026lt;T, T\u0026gt; binarySearch(T L, T R, FuncT check){ --L, ++R; while (L + 1 \u0026lt; R) { T Mid = L + (R - L) / 2; if (check(Mid)) L = Mid; else R = Mid; } //L:符合條件的最大值 R:不符合條件的最小值 return {L, R}; } 第一次寫程式相關的教學文，若有沒講清楚或是需修改的地方可以用剛剛加入的評論區~\n","date":"2026-05-18T17:50:12+08:00","image":"/post/2.-%E7%B0%A1%E5%96%AE%E7%B2%97%E6%9A%B4%E7%9A%84%E7%90%86%E8%A7%A3%E4%BA%8C%E5%88%86%E6%90%9C%E5%B0%8B/table-1.png","permalink":"/post/2.-%E7%B0%A1%E5%96%AE%E7%B2%97%E6%9A%B4%E7%9A%84%E7%90%86%E8%A7%A3%E4%BA%8C%E5%88%86%E6%90%9C%E5%B0%8B/","title":"簡單粗暴的理解二分搜尋"},{"content":"最近統一投信推出了一檔名為「主動統一升級50」的新主動式 ETF 00403A，引發市場高度關注。\n原因不難理解。\n先前同公司推出的 00981A 在過去績效極好，因此許多投資人對新產品抱持高度期待。\n00403A 在上市首日（2026/5/12）便爆出超過 419 萬張成交量，甚至收盤出現高達 5.47% 的溢價。\n接著，各大社群有人呼籲其他人要注意該檔 ETF 要注意溢價，但卻遭到了許多類似這樣的言論回懟：\n「一張才 10 塊多而已，你在等什麼。」\n「在觀望的人明天就過 $11 了，不敢進場的人才是 87。」\n「長期投資沒差吧。」\n雖然這也與目前台股過熱有關，我也才發現很多人其實不知道「ETF 溢價」到底是什麼。\n表面上的市價，與表面下的真實淨值 ETF 是什麼？ ETF 的英文為 Exchange-traded Fund，意旨能在交易所買賣的基金。\nETF 的本質就是基金，基金會將投資者的錢拿去投資各種公司的股票，可以去持有像是台積電、聯發科、鴻海…等公司。\nETF 為何有「溢價」？ 什麼是「淨值」和「市價」？ 在交易所，也就是每個人打開證券 APP 能看到的股票市場成交價格稱為「市價」。\n將 ETF 裡所有持股現在市價加總，能夠計算出 ETF 理論上應該值多少錢，這個就是 ETF 的「淨值」。\n在證券 APP 上看到的 ETF 價格，那不是「淨值」而是「市價」。\n因此 ETF 存在表面上你所看到的「市價」，和表面下不易計算的「淨值」。\n什麼是「溢價」與「折價」？ 當市價高於淨值時，稱為「溢價」。\n以 00403A 上市當日收盤來舉例：\nETF 淨值：10.24 元 市場成交價：10.8 元 你花了 10.8 元，只買到價值 10.24 元的東西。\n等同每股多花了 0.56 元，幅度等同 5.47%，現買現虧超過半根漲停板。\n「折價」則與溢價相反，是淨值高於市價，可以以低於實際價值的價格買到該 ETF。\n正常情況下，ETF 不應該長期偏離淨值太多。因為 ETF 有申購/贖回機制。\n什麼是申購/贖回機制？ ETF 之所以通常不會長期偏離淨值太多，是因為存在一套稱為「申購／贖回」的套利機制。\n當 ETF 出現溢價或折價時，市場上的法人便有機會進行套利。\n一樣以 00403A 上市當日收盤舉例：\nETF 淨值：10.24 元 市場成交價：10.8 元 此時法人可以：\n先到市場買進 ETF 成分股。\n將這一籃子股票交給投信申購換成 ETF。\n再把換到的 ETF 拿到市場上，以 10.8 元賣出。\n法人是用接近 10.24 元的成本換到 ETF，卻能以 10.8 元賣出，中間便存在套利空間。\n經過法人持續的賣掉更多 ETF 現貨，市價會不斷被砸下去。\n最後溢價通常就會逐漸縮小，最後回到接近淨值的位置。\n反過來說，若 ETF 出現折價，也會有另一套反向套利機制，使價格重新靠近淨值。\n結論 隔天 00403A 的表現也驗證了市場機制仍舊正常地在運作，法人一天就把昨天的溢價全收復了。\n昨天高價追價買入的人都被法人和大戶狠狠地割了一把。\n為了避免像這次一樣，被法人當韭菜收割。\n投資者買入 ETF 前務必注意折溢價情況，通常在要買的 ETF 發行投信的網頁都找的到即時折溢價情況，\n一般來講，溢價在 1% 以內都是可以接受的（當然能買到折價的價格更好），超過就要注意不要追進去結果隔天被倒貨了。\n至於覺得股價才 10 元，所以沒甚麼差別的。通常不是根本沒買幾張，就是財商不好。\n把股票比喻成錢幣：同樣 100 元，可以換成 10 個十元，也可以換成 2 個五十元，總額並沒有改變。\n投資只需關心漲跌幅度，股價並不是重點。\n同樣的資金，買入低股價股票，股數較多，但資金總額還是不變，在溢價 5.47% 買入就是現虧 5.47%。\n也別騙自己是長期投資所以沒關係，能不要賠的錢就不要送給別人割。\n","date":"2026-05-14T14:07:43+08:00","image":"/post/1.-%E6%9C%80%E8%BF%91-00403a-%E7%88%86%E9%87%8F%E5%B8%B6%E5%87%BA%E7%9A%84-etf-%E6%BA%A2%E5%83%B9%E5%95%8F%E9%A1%8C/00403A.png","permalink":"/post/1.-%E6%9C%80%E8%BF%91-00403a-%E7%88%86%E9%87%8F%E5%B8%B6%E5%87%BA%E7%9A%84-etf-%E6%BA%A2%E5%83%B9%E5%95%8F%E9%A1%8C/","title":"最近 00403A 爆量帶出的 ETF 溢價問題"},{"content":"Hello World！\nprint(\u0026#34;Hello World！\u0026#34;) ","date":"2026-05-11T22:54:03+08:00","image":"/post/0.-hello-world/Hello%20World.png","permalink":"/post/0.-hello-world/","title":"Hello World"}]