<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"><channel><title>MagicLen</title><link>https://magiclen.org/category/algorithm/feed</link><description>多元化原創文章，內容包羅萬象，有程式語言、網站應用、軟體介紹、硬體介紹、作業系統、旅行遊記、專題採訪、益智問題、文學創作，以及作者們的知識分享和作品分享。</description><language>zh-TW</language><lastBuildDate>Sat, 18 Apr 2026 02:07:44 +0000</lastBuildDate><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>8</sy:updateFrequency><sy:updateBase>1970-01-01T00:00+00:00</sy:updateBase><item><title>如何寫程式計算時間和日期的差距？</title><link>https://magiclen.org/date-differencer</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2023/01/arrow-2085192_1920-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2023/01/arrow-2085192_1920-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2023/01/arrow-2085192_1920-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2023/01/arrow-2085192_1920-660x486.jpg 3x" alt="">
有時候我們會需要寫程式去計算兩個時間點的差距，以求得年齡、經過了多少的時間，或是否還在某個期限之內等等的資訊。日(day)與時、分、秒的差距很好算，因為它們是固定的時間(不考慮閏秒)。但年、月就不一樣了，一個月可能有28至31天，一年可能有365或366天，我們無法直接將兩個時間點(的時間戳記)相減之後去除上一個固定的單位(例如拿相差的秒數去除以2592000秒)來算出隔了多少年、月，硬是要這麼算...]]></description><category>研究分享</category><category>Rust</category><category>演算法</category><category>JavaScript</category><category>JavaScript</category><category>Rust</category><category>TypeScript</category><category>爛Code</category><category>date-differencer</category><guid>https://magiclen.org/date-differencer</guid><pubDate>Tue, 24 Jan 2023 12:00:00 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>如何寫程式畫出正六邊形的蜂巢狀網格？</title><link>https://magiclen.org/regular-hexagon-grid</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2022/06/hex-g13f0488b9_1920-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2022/06/hex-g13f0488b9_1920-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2022/06/hex-g13f0488b9_1920-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2022/06/hex-g13f0488b9_1920-660x486.jpg 3x" alt="">
所謂的密鋪(tessellation)是用一種或多種平面形狀去填滿一個更大的平面。用正六邊形(regular hexagon)來密鋪成網格(grid)，會比用矩形密鋪還來得更複雜，造成更藝術的視覺效果。那麼要如何寫程式來畫出這個複雜的正六邊形網格呢？]]></description><category>研究分享</category><category>演算法</category><category>JavaScript</category><guid>https://magiclen.org/regular-hexagon-grid</guid><pubDate>Tue, 23 Aug 2022 12:00:00 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>如何寫程式畫出正多邊形？</title><link>https://magiclen.org/regular-polygon</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2022/06/pentacontagon-220x162.png" srcset="https://magiclen.org/wp-content/uploads/2022/06/pentacontagon-220x162.png 1x, https://magiclen.org/wp-content/uploads/2022/06/pentacontagon-440x324.png 2x, https://magiclen.org/wp-content/uploads/2022/06/pentacontagon-660x486.png 3x" alt="">
N邊形，有N個頂點、N個邊。每個邊都是由兩個頂點連線組成，因此只要找到多邊形的各頂點座標，就可以輕易地連線畫出多邊形了！而所謂的正多邊形，它的邊都是等長的，且任意相鄰兩邊之間所形成的夾角也都是相等的。]]></description><category>研究分享</category><category>程式設計</category><category>演算法</category><category>JavaScript</category><guid>https://magiclen.org/regular-polygon</guid><pubDate>Thu, 18 Aug 2022 12:00:00 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>如何判斷兩個浮點數是否相等？是否能整除？相除後餘數是多少？</title><link>https://magiclen.org/float-precision</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2022/06/geometry-1044090_1920-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2022/06/geometry-1044090_1920-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2022/06/geometry-1044090_1920-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2022/06/geometry-1044090_1920-660x486.jpg 3x" alt="">
使用電腦去進行浮點數運算的時候，在某些條件下會出現顯而易見的誤差，而這樣的誤差，就會導致與浮點數有關的計算或是邏輯判斷出現問題。]]></description><category>研究分享</category><category>Java</category><category>Rust</category><category>演算法</category><category>JavaScript</category><category>Java</category><category>JavaScript</category><category>Rust</category><category>TypeScript</category><guid>https://magiclen.org/float-precision</guid><pubDate>Thu, 21 Jul 2022 12:00:00 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>用動態規劃解決問題：零壹背包問題(0/1 Knapsack Problem)</title><link>https://magiclen.org/dynamic-programming-0-1-knapsack-problem</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-660x486.jpg 3x" alt="">
一個背著背包的小偷闖空門偷東西，他必須趁屋主回來之前把有價值的物品塞進包包內帶走。考慮到小偷自身的行動力，背包能裝的物品總重量有限，小偷要如何選擇物品才能獲得最高的總價值？]]></description><category>研究分享</category><category>Java</category><category>Rust</category><category>演算法</category><category>Go</category><category>JavaScript</category><category>Java</category><category>JavaScript</category><category>Rust</category><category>TypeScript</category><category>動態規劃</category><category>Go</category><guid>https://magiclen.org/dynamic-programming-0-1-knapsack-problem</guid><pubDate>Tue, 4 Aug 2020 12:00:41 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>用動態規劃解決問題：找零錢問題(Coin Change Problem)</title><link>https://magiclen.org/dynamic-programming-coin-change</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-660x486.jpg 3x" alt="">
許多人認為身上如果帶太多的零錢會讓行動變得不方便，因此會希望商店店員在找零錢的時候能夠以最少的硬幣數來找，而不是全部都用1元塞給我們。]]></description><category>研究分享</category><category>Java</category><category>Rust</category><category>演算法</category><category>Go</category><category>JavaScript</category><category>Java</category><category>JavaScript</category><category>Rust</category><category>TypeScript</category><category>動態規劃</category><category>Go</category><guid>https://magiclen.org/dynamic-programming-coin-change</guid><pubDate>Tue, 28 Jul 2020 12:00:30 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>用動態規劃解決問題：基本觀念(有重疊子問題的問題)</title><link>https://magiclen.org/dynamic-programming-basic</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2020/04/technology-1283624_1920-660x486.jpg 3x" alt="">
動態規劃(Dynamic Programming，簡稱DP)是一種解決問題的技巧，主要被用來優化那些「記不住自己過去曾解出來的答案所以只好重複再解」的演算法，讓它們可以「記憶」已經找出來的答案，從而不斷利用，以大大降低時間複雜度(從指數級降到線性)。]]></description><category>研究分享</category><category>Java</category><category>Rust</category><category>演算法</category><category>Go</category><category>JavaScript</category><category>Java</category><category>JavaScript</category><category>Rust</category><category>TypeScript</category><category>費氏數列</category><category>動態規劃</category><category>Go</category><guid>https://magiclen.org/dynamic-programming-basic</guid><pubDate>Tue, 21 Jul 2020 12:00:16 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>如何用程式進行質因數分解和尋找最大公因數與最小公倍數？</title><link>https://magiclen.org/prime-factorization-gcd-lcm</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2018/10/pay-819587_1920-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2018/10/pay-819587_1920-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2018/10/pay-819587_1920-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2018/10/pay-819587_1920-660x486.jpg 3x" alt="">
若正整數a除以正整數b可以整除，則稱b為a的因數(Factor)，a為b的倍數(Multiple)，1是所有正整數最小的因數，任意正整數最大的因數就是該正整數本身。若a同時是x和y的因數，則稱a是x和y的公因數(Common Divisor)，如果a是x和y的公因數中最大的一個，則稱a是x和y的最大公因數(Greatest Common Divisor，簡稱GCD)。若a同時是x和y的倍數，則稱a...]]></description><category>研究分享</category><category>Java</category><category>Rust</category><category>數學邏輯</category><category>演算法</category><category>Go</category><category>JavaScript</category><category>Java</category><category>JavaScript</category><category>Rust</category><category>TypeScript</category><category>質因數分解</category><category>最大公因數</category><category>最小公倍數</category><category>輾轉相除法</category><category>Go</category><guid>https://magiclen.org/prime-factorization-gcd-lcm</guid><pubDate>Thu, 9 Jul 2020 12:00:35 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>電腦是怎麼進行四則運算的？前序式、中序式、後序式又是什麼？</title><link>https://magiclen.org/arithmetic</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2020/04/addition-black-and-white-black-and-white-chalk-374918-220x162.jpg" srcset="https://magiclen.org/wp-content/uploads/2020/04/addition-black-and-white-black-and-white-chalk-374918-220x162.jpg 1x, https://magiclen.org/wp-content/uploads/2020/04/addition-black-and-white-black-and-white-chalk-374918-440x324.jpg 2x, https://magiclen.org/wp-content/uploads/2020/04/addition-black-and-white-black-and-white-chalk-374918-660x486.jpg 3x" alt="">
我們從小學習算術的時候便知道「四則(加、減、乘、除)運算」的規則，也就是「先乘除、後加減，以及括號先算」。那麼如果我們要撰寫一個可以支援算式輸入且能夠按照四則運算規則求出結果的程式，該怎麼做呢？]]></description><category>研究分享</category><category>Java</category><category>Rust</category><category>演算法</category><category>Go</category><category>JavaScript</category><category>Java</category><category>JavaScript</category><category>Rust</category><category>TypeScript</category><category>四則運算</category><category>後序式</category><category>深度優先搜尋</category><category>Go</category><guid>https://magiclen.org/arithmetic</guid><pubDate>Thu, 18 Jun 2020 12:00:21 +0800</pubDate><dc:creator>Magic Len</dc:creator></item><item><title>費氏搜尋(Fibonacci Search)演算法，運用費氏數列的搜尋演算法</title><link>https://magiclen.org/fibonacci-search</link><description><![CDATA[    <img src="https://magiclen.org/wp-content/uploads/2016/04/Searchicons-search-blogs-512-220x162.png" srcset="https://magiclen.org/wp-content/uploads/2016/04/Searchicons-search-blogs-512-220x162.png 1x, https://magiclen.org/wp-content/uploads/2016/04/Searchicons-search-blogs-512-440x324.png 2x, https://magiclen.org/wp-content/uploads/2016/04/Searchicons-search-blogs-512-660x486.png 3x" alt="">
費氏搜尋(Fibonacci Search)演算法有點像是二元搜尋(Binary Search)演算法，同樣是在一個已排序好的陣列中搜尋元素，但是它在移動陣列索引值時是去參考費氏數列(Fibonacci Sequence)，而不是像二元搜尋法那樣總是去取索引的中間值。也由於費氏搜尋法在移動陣列索引值時只需要進行加減運算，不需乘、除法，因此它適合被用在不擅長處理乘、除法的CPU上。]]></description><category>研究分享</category><category>Java</category><category>Rust</category><category>演算法</category><category>Go</category><category>JavaScript</category><category>Java</category><category>JavaScript</category><category>Rust</category><category>搜尋演算法</category><category>二元搜尋</category><category>TypeScript</category><category>費氏數列</category><category>費氏搜尋</category><category>Go</category><guid>https://magiclen.org/fibonacci-search</guid><pubDate>Thu, 28 May 2020 12:00:15 +0800</pubDate><dc:creator>Magic Len</dc:creator></item></channel></rss>