Uncategorized

JS 學資料結構與演算法 (排序篇) — 合併排序法 Merge Sort

合併排序法 Merge Sort合併排序法定義合併演算法與上一篇介紹的快速排序法一樣,都運用了 Devide and Conquer 的概念,基本上分為兩個步驟:分割與整合。首先利用遞迴把原先未排序的陣列平均分割成兩半,直到各邊都只剩下一個元素(上圖紫色方塊),接著排序後再一一整合起來,最後會合併成一個排序後的陣列(上圖綠色區塊)。分割 (紫色區塊)把大陣列分一半成為兩個小陣列把從上一步驟切好的兩個小陣列再各自分一半重複步驟 2 直到每個小陣列都只剩一個元素整合 (綠色區塊)排序兩個只剩一個元素的小陣列並將其合併把上一步驟排序好的小陣列合併並排序成一個陣列重複步驟二直到所有小陣列都合併成一個大陣列讀者比較有疑問的也許會是這個部分: Q: 跟 這兩個陣列是如何合併成最終的已排序陣列呢?A: 因為這兩個陣列在合併前就已經各自完成排序了,因此只要比較各自最左邊的元素的大小,將比較小的元素放進新陣列中,最後就能完成排序囉!其實從一開始只有一個元素要進行合併時就是運用這個方法喔(只有一個元素的陣列視為已排序)!時間複雜度最佳:O(n log n)最差:O(n log n)平均:O(n log n)時間複雜度的部分,我們依然可以分為 “分割” 與 “整合” 兩個步驟來看。分割:分割含有 n…
學程式助教
January 14, 2020
戰略紀錄

解鎖 AppStore 3種生產力工具常勝軍,你使用了嗎?

追求效率,提高效能的數位化時代 我們今天要來揭開新創環境與團隊中常使用也都是Appstore排行榜上面的常勝軍同學們哈哈哈 像我其實是重度懶癌、拖延症以及很難搞不清楚先後順序 是非常需要有工具來幫我管理我的時程以及事情 之前我看過一部日劇叫作「我要準時下班」,女主角有提過到一個觀念假設你每天花時間找文件,一年就有可能會浪費到150小時 150小時根本超好發揮的啊~為了要狠狠抓緊這150小時,來了解什麼樣的生產力工具能幫助你工作生活吧! Trello 對於排程你的工作、生活與假期總是亂糟糟,沒有一個好地方能幫你收納好你的行程嗎 Trello將待辦事項變成卡片的方式來呈現 你的每個待辦事項都能加以描述也能夠壓Deadline,一旦你的期限快到了Trello會進行提醒的動作唷 也能將你朋友加入至Trello板上面,跟你一起管理你們可能要共同處理的事情 像是旅遊,可以透過每張卡片的標題來進行有效率的溝通也可以朋友與夥伴間記住每個人的任務喔! 我自己是喜歡將卡片加上圖片會更清楚每張卡片是有什麼功能!               Quizlet 由於我近期正在學習Python,初心者真的都要收集與整理超多資訊的 為了練好功,有些好文章好概念都會想保存起來,我都會將筆記放在Quizlet中 也能省下很多時間在我的書籤中找到某個特定網站有我想要的概念 本身是Apple的用戶,但是備忘錄整個分類都超鬆散的~…
學程式助教
January 13, 2020
Uncategorized

Python 繼承(Inheritance)實用教學

今天要來介紹的Python繼承(Inheritance)在物件導向設計中非常的重要,使用得當可以提高我們程式碼的重用性(Reusable)及維護性。 繼承(Inheritance)顧名思義,就是會有父類別(或稱基底類別Base Class)及子類別(Sub Class)的階層關係。子類別會擁有父類別公開的屬性(Attribute)及方法(Method)。 所以Python繼承(Inheritance)的概念就是將各類別(Class)會共同使用的屬性(Attribute)或方法(Method)放在一個獨立的類別(Class)中,其它的類別(Class)透過繼承(Inheritance)的方式來擁有,降低程式碼的重複性。   Python繼承(Inheritance)的重要觀念如下: 如何使用Python繼承(Inheritance) 方法覆寫(Method Overriding) 多層繼承(Multi-Level Inheritance) 多重繼承(Multiple Inheritance) (more…)
學程式助教
January 12, 2020
Uncategorized

解析Python物件導向設計的3種類型方法(Instance,Class,Static Method)

一、實體方法(Instance Method) Python類別(Class)中沒有加任何裝飾詞(Decorator)的方法(Method),至少要有一個self參數,於方法(Method)被呼叫時指向物件(Object),其後可以依需求增加額外參數,如下範例: 實體方法(Instance Method)透過self參數可以自由的存取物件(Object)的屬性(Attribute)及其他方法(Method),藉此來改變物件(Object)的狀態,如下範例:   執行結果 從執行結果可以看到,我們印出self參數時,結果顯示為Cars類別的物件(Object),也就是說呼叫實體方法(Instance Method)時,Python編譯器會傳入物件(Object),使得self參數指向該物件(Object)。   另一方面,當透過類別(Class)呼叫實體方法(Instance Class)時,這會使得Python編譯器無法將self參數指向物件(Object),而發生TypeError的錯誤,如下範例: 執行結果 另外,在實體方法(Instance Method)中可以透過self.__class__屬性(Attribute)來改變類別(Class)的狀態,如下範例:   執行結果 範例中實體方法(Instance Method)即利用self.__class__屬性(Attribute)來改變door類別屬性(Class Attribute)。 二、 類別方法(Class Method) Python類別(Class)中有@classmethod裝飾詞(Decorator)的方法(Method),被呼叫時,相較於實體方法(Instance Method)的self參數指向物件(Object),類別方法(Class Method)為cls參數,指向類別(Class),如下範例:…
學程式助教
January 8, 2020
戰略紀錄

Apple Pay 前往菜市場 免零錢鈔票出門 一鍵支付完成

行動支付近期越來越普及,就算忘了帶錢包出門還是很安心呢! 目前南門市場、台北花市、新北果菜市場等大家熟知的傳統市場已經能使用Apple Pay進行行動支付了,而且不需要刷卡機,只要掃描QRCode 就能使用啦~ 走進南門市場 體驗行動支付 這次呢,科技要聞決定走進南門市場,體驗傳統市場導入新興支付科技 南門市場所使用的行動支付為QR Code條碼進行,他會直接跳轉到結帳的網頁 進入南門市場的門口就可以發現有大大的招牌寫著『免付現』,店家的門上也會有明顯的招牌可供我們掃描唷 在結帳櫃檯或是顯眼處就會掛上店家的支付條碼,消費者只要打開手機的QRcode掃瞄器(iPhone使用者只要打開相機) 掃描多元支付條碼後,就會進入至結帳付款頁面,輸入付款金額、選擇要支付的方式 (可以選擇Apple Pay、Google Pay或是信用卡刷卡),按下完成付款就能結帳。)                   那今天的目標,學程式助教們決定蔬菜來補充一下體力,不然天天打程式還是得需要營養均衡…
學程式助教
January 7, 2020
戰略紀錄

用 Chatbot 打造超有趣線上 RPG :把同事變成 NPC !

完整架完95個模組,尿都變紅色的。 哈囉大家~新年快樂?? 在被期末考荼毒的同時我又來寫寫工具文了! 每次寫文章都會先列出架構,但還是會花費我蠻多時間,大約1至1.5小時,眼看期末要讀不完了我還在這裡寫案例 ㄏㄏ。 這次主題是《用 Chatbot 打造超有趣線上 RPG :把同事變成 NPC !》 最初分享《老闆惹怒工程師可以激起多大的社群效應:Chatbot 新手基礎操作案例》時,雖然自己分享了失敗的案例,但是出於分享的心情還是感到很興奮。 後來又發佈了《【教學】老闆惹怒工程師可以激起多大的社群效應: Chatbot 新手基礎操作案例》,因為我發現前一篇在操作面實在描述太少,原本是抱著「如果有新手想操作類似案例,操作面可以去看 BotBonnie 的教學」的心情,但是如果這樣依步驟拆解,讓人看案例的同時或是閱讀後可以上手,好像也是深層分享的一種方式。 教學版本的老闆惹怒工程師我還沒有上傳到Medium跟Blink,過幾天考完試再發佈。 By the way,BotBonnie什麼時候要找我當代言 ? 那我們開始來聊聊這次的案例吧!…
學程式助教
January 6, 2020
戰略紀錄

Python財金應用:Black-Scholes選擇權訂價模型(1)

經典的量化金融案例,也是每天在交易室會碰到無數次的內容,推導Black-Scholes formula就不是本篇的重點,有興趣我會在文章最底下附上推薦書單。 選擇權(Options)就是在未來某個時點可用某個價格買進或賣出標的資產的權利,投資人可以買進當作避險或樂透賭博,選擇權槓桿倍數相當大,如果將Gamma效果考慮進去,槓桿可以至百倍,而行情看錯則頂多失去權利金而已,Black-Scholes就是利用未來標的資產進入價內的機率去計算出選擇權權利金的。 有了這個評價公式後,我們可以衡量在設定波動度下的選擇權理論價值,也可以利用市場報價來反推選擇權的波動率,一般稱為隱含波動率(Implied Volatility)。 上圖就是選擇權的報價畫面,可以看到某個日期到期的選擇權鏈(Options Chain)的各履約價報價,並從中反推各種參數。 用Python撰寫Black-Scholes評價公式其實很輕鬆,按照公式的寫法轉換為套件的函數而已,同步還可學會函數的應用。 以上就是一個簡單的選擇權評價範例,給定五個參數數值後,就直接開始計算d1與d2,大家可以對照一下公式,就會發現其實很簡單,下面將每個區塊拆解並解釋。 1. 引入套件(numpy, scipy) 由於Black-Scholes需要用到指數(Exponential)與常態累積分配(Normal distribution c.d.f.)的科學運算 現有預設的Python是沒有這類函數的,則需要引用大量擁有科學運算函數的numpy與scipy。 2. 給定Black-Scholes參數 先行預設標的資產價格(S)、履約價格(K)、無風險利率(r)、具到期日(t)與波動率(Sigma),在整數位後幾乎都有加上小數點,就是為了將變數設定為浮點位,以確保運算正確。 (Python不用另行宣告變數型態) 3. 計算d1與d2 有利用的函數為numpy的log與sqrt,詳細可對照封面照的公式,要小心括號的擺放。 4. 計算Call的理論價格…
學程式助教
January 5, 2020
Uncategorized

3個必須瞭解的Python屬性觀念

實體屬性(Instance Attribute) 類別屬性(Class Attribute) 屬性(Property) 一、實體屬性(Instance Attribute) 需伴隨物件(Object)的生成來建立,也就是透過點(.)的語法或在建構式(Constructor)中所生成的屬性(Attribute)。各物件(Object)的實體屬性(Instance Attribute)各自獨立,修改某一個物件(Object)的實體屬性(Instance Attribute)值時,不會影響到其他物件。如下範例: 執行結果 從範例中可以看到,我們透過點(.)的方式來建立物件(Object)的屬性(Attribute),mazda和toyota物件的color與seat為實體屬性(Instance Attribute),互相獨立且有各自的屬性值。接下來我們來看透過建構式(Constructor)所建立的屬性(Attribute): 執行結果 在第12行~第14行我們修改了mazda物件(Object)的color、seat及weight屬性(Attribute)值,並不會影響到其他物件toyota的屬性值,所以我們可以說color、seat和weight為實體屬性(Instance Attribute)。 二、類別屬性(Class Attribute) 定義在類別層級的屬性(Attribute),也就是在建構式(Constructor)之外的屬性(Attribute)。可以不需要建立物件(Object),直接透過類別名稱存取。各物件共享類別屬性(Class Attribute)值,也就是說當我們修改類別屬性(Class Attribute)值時,每一個透過此類別(Class)所建立的物件(Object),都會受到影響。如下範例: 執行結果 我們可以看到door屬性(Attribute)定義在建構式(Constructor)之外,所以為類別屬性(Class Attribute),並且在第18行透過類別名稱來修改其屬性值,之後所有物件(Object)如mazda及toyota物件(Object)的door屬性值皆改變了。 三、屬性(Property)…
學程式助教
January 4, 2020
Uncategorized

JS 學資料結構與演算法 (排序篇)— 快速排序法 Quick Sort

大家好我是老莫,也可以叫我 Kyle為什麼要寫這個主題?之前在尋找實習職缺的過程中,遇到幾次當面或者電話面試考資料結構與演算法等技術題,測驗結束才發現自己沒有透徹了解這些概念,有些概念懂了卻不知道怎麼用程式語言實作出來,想當然面試結果並不理想。因此我決定設定這樣的主題,並以自己最擅長的語言 JavaScript 將資料結構或演算法實作出來,除了能夠了解背後的概念外,也有能力可以透過程式語言實作出來,並利用這些概念去解決真實狀況遇到的技術問題。主題涵蓋的範圍?這次 “JS 學資料結構與演算法” 系列預計會包含以下範圍:排序 (sort)搜尋 (sesrch)動態程式規劃 (dynamic programming)Hash Table 雜湊表Linked List 鏈結串列Stack 堆疊Queue 佇列Tree 樹Graph 圖形Recursion 遞迴其中各類別可能又會往下細分子類別依次介紹(如排序下細分各種排序法),我想這會是一個漫長的主題,但相信踏實地走完這趟旅程一定會讓基礎更加扎實,也能幫助像我一樣對這些觀念一知半解的讀者能有更透徹的理解,如果對這個主題有興趣的朋友們記得追蹤我囉!*此後內容皆假設讀者了解基本演算法定義與時間複雜度概念快速排序法演算法定義:快速排序法採用 Devide and Conquer 的概念,將一個大問題拆分成數個較小的子問題,再將子問題的結果整合成原問題的答案。作法:選定一個基準值 (Pivot)將比基準值…
學程式助教
January 4, 2020
Uncategorized

淺談Python類別(Class)

Success: Updated custom field '_thumbnail_id'. Success: Set terms. Success: Updated custom field '_yoast_wpseo_title'. Success: Updated custom field '_yoast_wpseo_metadesc'. 在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python當然也不例外。 而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解,包含了: 類別(Class) 物件(Object) 屬性(Attribute) 建構式(Constructor)…
學程式助教
January 2, 2020