如何寫程式計算時間和日期的差距? 2023 年 1 月 24 日 Magic Len 研究分享、 Rust、 演算法、 JavaScript 有時候我們會需要寫程式去計算兩個時間點的差距,以求得年齡、經過了多少的時間,或是否還在某個期限之內等等的資訊。日(day)與時、分、秒的差距很好算,因為它們是固定的時間(不考慮閏秒)。但年、月就不一樣了,一個月可能有28至31天,一年可能有365或366天,我們無法直接將兩個時間點(的時間戳記)相減之後去除上一個固定的單位(例如拿相差的秒數去除以2592000秒)來算出隔了多少年、月,硬是要這麼算... 繼續閱讀
如何寫程式畫出正六邊形的蜂巢狀網格? 2022 年 8 月 23 日 Magic Len 研究分享、 演算法 所謂的密鋪(tessellation)是用一種或多種平面形狀去填滿一個更大的平面。用正六邊形(regular hexagon)來密鋪成網格(grid),會比用矩形密鋪還來得更複雜,造成更藝術的視覺效果。那麼要如何寫程式來畫出這個複雜的正六邊形網格呢? 繼續閱讀
如何寫程式畫出正多邊形? 2022 年 8 月 18 日 Magic Len 程式設計、 研究分享、 演算法 N邊形,有N個頂點、N個邊。每個邊都是由兩個頂點連線組成,因此只要找到多邊形的各頂點座標,就可以輕易地連線畫出多邊形了!而所謂的正多邊形,它的邊都是等長的,且任意相鄰兩邊之間所形成的夾角也都是相等的。 繼續閱讀
如何判斷兩個浮點數是否相等?是否能整除?相除後餘數是多少? 2022 年 7 月 21 日 Magic Len 研究分享、 Java、 Rust、 演算法、 JavaScript 使用電腦去進行浮點數運算的時候,在某些條件下會出現顯而易見的誤差,而這樣的誤差,就會導致與浮點數有關的計算或是邏輯判斷出現問題。 繼續閱讀
用動態規劃解決問題:零壹背包問題(0/1 Knapsack Problem) 2020 年 8 月 4 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 一個背著背包的小偷闖空門偷東西,他必須趁屋主回來之前把有價值的物品塞進包包內帶走。考慮到小偷自身的行動力,背包能裝的物品總重量有限,小偷要如何選擇物品才能獲得最高的總價值? 繼續閱讀
用動態規劃解決問題:找零錢問題(Coin Change Problem) 2020 年 7 月 28 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 許多人認為身上如果帶太多的零錢會讓行動變得不方便,因此會希望商店店員在找零錢的時候能夠以最少的硬幣數來找,而不是全部都用1元塞給我們。 繼續閱讀
用動態規劃解決問題:基本觀念(有重疊子問題的問題) 2020 年 7 月 21 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 動態規劃(Dynamic Programming,簡稱DP)是一種解決問題的技巧,主要被用來優化那些「記不住自己過去曾解出來的答案所以只好重複再解」的演算法,讓它們可以「記憶」已經找出來的答案,從而不斷利用,以大大降低時間複雜度(從指數級降到線性)。 繼續閱讀
如何用程式進行質因數分解和尋找最大公因數與最小公倍數? 2020 年 7 月 9 日 Magic Len 研究分享、 Go、 Java、 數學邏輯、 Rust、 演算法、 JavaScript 若正整數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... 繼續閱讀
電腦是怎麼進行四則運算的?前序式、中序式、後序式又是什麼? 2020 年 6 月 18 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 我們從小學習算術的時候便知道「四則(加、減、乘、除)運算」的規則,也就是「先乘除、後加減,以及括號先算」。那麼如果我們要撰寫一個可以支援算式輸入且能夠按照四則運算規則求出結果的程式,該怎麼做呢? 繼續閱讀
費氏搜尋(Fibonacci Search)演算法,運用費氏數列的搜尋演算法 2020 年 5 月 28 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 費氏搜尋(Fibonacci Search)演算法有點像是二元搜尋(Binary Search)演算法,同樣是在一個已排序好的陣列中搜尋元素,但是它在移動陣列索引值時是去參考費氏數列(Fibonacci Sequence),而不是像二元搜尋法那樣總是去取索引的中間值。也由於費氏搜尋法在移動陣列索引值時只需要進行加減運算,不需乘、除法,因此它適合被用在不擅長處理乘、除法的CPU上。 繼續閱讀