<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Project on Young 的 Blog</title><link>http://blog.youn.gg/tags/project/</link><description>Recent content in Project on Young 的 Blog</description><generator>Hugo</generator><language>zh-tw</language><lastBuildDate>Tue, 19 Dec 2023 23:40:00 +0000</lastBuildDate><atom:link href="http://blog.youn.gg/tags/project/index.xml" rel="self" type="application/rss+xml"/><item><title>啟發式最佳化演算法帶給我的成長</title><link>http://blog.youn.gg/posts/project/qts/</link><pubDate>Tue, 19 Dec 2023 23:40:00 +0000</pubDate><guid>http://blog.youn.gg/posts/project/qts/</guid><description>&lt;p&gt;:::warning
這篇文涉及到的觀念比較複雜，建議沒有經驗的讀者可以使用維基百科輔助理解這篇文的內容。
:::&lt;/p&gt;
&lt;p&gt;:::warning
筆者對於 P 與 NP 問題的詳細定義可能存在些許誤解或理解不夠全面，因此如果文中出現錯誤麻煩告知，會儘快修正。
:::&lt;/p&gt;
&lt;h2 id="起因"&gt;起因&lt;/h2&gt;
&lt;p&gt;上了大學之後因為對自己的專業技能抱有期待能夠發揮在一些地方，
因此我很主動在詢問學校的資源，
教授剛好藉機向我介紹實驗室這個地方，
於是在我好奇心的驅使下在大一還是個新生時就進入了學校實驗室，
後來從教授口中得知實驗室有在做最佳化演算法的實驗，
目的是改善現有的演算法，
並且從演算法的角度出發去找到更高效率的演算法，
實驗室已經有實現出 Python 版本，
而我負責改寫為 C++ 並且提升效能。
也算是幫忙寫 code 順便賺點零用錢。&lt;/p&gt;
&lt;h2 id="pnp-問題與時間複雜度"&gt;P=NP 問題與時間複雜度&lt;/h2&gt;
&lt;p&gt;關於最佳化演算法的出現首先要提起 P=NP 問題，
這是著名的千禧年難題之一，
在介紹這個問題前，
我先簡單解釋什麼是「時間複雜度」，
時間複雜度用於表示一個演算法需要花多少時間解決問題，
通常人們習慣用大O表示法來表達時間複雜度，
並以 n 作為問題大小，
例如遍歷一個陣列的時間複雜度為 O(n)，
表示使用問題大小的時間(操作次數)可以解決此問題。&lt;/p&gt;
&lt;h3 id="p-與-np"&gt;P 與 NP&lt;/h3&gt;
&lt;p&gt;P 代表的是多項式時間，
也就是在次方項為常數的時間複雜度，
因為次方向如果為 n 的話會導致花費的時間隨著問題大小成指數成長，
也就是 NP，
因此問題只要變大很快就會變得無法計算，
因此需要隨著問題大小讓時間線性成長的演算法來解決 NP 問題。&lt;/p&gt;
&lt;h2 id="啟發式與最佳化演算法"&gt;啟發式與最佳化演算法&lt;/h2&gt;
&lt;p&gt;啟發式演算法是藉由學習或模仿自然界已有的可行方案例如蟻群、狼群尋找食物的方式之類的行為來設計一套演算法，
也有藉由退火啟發的演算法，
都是想要藉由演化或其他自然界的力量來處理問題。&lt;/p&gt;
&lt;p&gt;最佳化演算法是專為一系列的 NP 問題而誕生。&lt;/p&gt;
&lt;h3 id="區域最佳解與全域最佳解"&gt;區域最佳解與全域最佳解&lt;/h3&gt;
&lt;p&gt;一個大的 NP 問題中在我們使用最佳化演算法時會遇到一個重要的問題，
要如何調配區域搜尋和全域搜尋的比例，
若區域搜尋過多會停留在區域最佳解，
過少則會導致解往更好方向的收斂速度過慢，
從而浪費時間。&lt;/p&gt;</description></item><item><title>專題作品：yush</title><link>http://blog.youn.gg/posts/project/yush/</link><pubDate>Thu, 12 Oct 2023 00:08:30 +0000</pubDate><guid>http://blog.youn.gg/posts/project/yush/</guid><description>&lt;p&gt;高中三年級的專題我做出了 &lt;code&gt;yush&lt;/code&gt;，
算是一個輕量化的 &lt;code&gt;shell&lt;/code&gt;，
可以執行在不同平台上，
並且擁有基本的指令功能，
同時這專題也是我這學期學校成績拿最高的一個科目，
以下附上 &lt;code&gt;Github&lt;/code&gt; 連結：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Young-TW/yush"&gt;yush&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::tip
以下是我張貼在社群媒體上的原文。
:::&lt;/p&gt;
&lt;p&gt;（已編輯）
我用 C++ 寫了一個 shell，並且我打算稱它為 yush。&lt;/p&gt;
&lt;p&gt;yush 目前是一個成長中的 shell 專案，作為我個人第一個較大的 C++ 專案，原本設計是跨平台，但因涉及底層許多操作邏輯不同因此暫時取消了 Windows 的支援，僅保留了 Unix-like 的 MacOS 和 Linux。
另外，yush 其實還沒完成，程式還欠缺部分功能，如果有人參與開發或是告訴我哪裡能改進我會很感謝你們的。
詳細內容請看 Github 連結：https://github.com/Young-TW/yush&lt;/p&gt;</description></item><item><title>個人作品：Game of life</title><link>http://blog.youn.gg/posts/project/game_of_life/</link><pubDate>Sat, 11 Feb 2023 00:06:00 +0000</pubDate><guid>http://blog.youn.gg/posts/project/game_of_life/</guid><description>&lt;p&gt;前幾天看到了以前看過的一個酷東西叫做康威生命遊戲，
一時興起的我打算用 &lt;code&gt;C++&lt;/code&gt; 重現這個遊戲，
於是我花了兩天時間去寫這個遊戲，
可能是有了 &lt;code&gt;yush&lt;/code&gt; 的開發經驗，
讓我一路上輕輕鬆鬆就實現了這個遊戲，
但目前還沒有真正的圖形，
只有文字的輸出，
之後可能會再加入 &lt;code&gt;OpenGL&lt;/code&gt; 來做彩現，
以下附上 &lt;code&gt;Github&lt;/code&gt; 連結：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Young-TW/game-of-life"&gt;game of life&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>