fbpx
AlgorithmJavascript工程思維

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
工程思維

現在有「文言文程式語言」,你還用Python嗎?

你知道打程式會用到什麼語言嗎?沒錯,是英文,因此不管你是用 Python、Ruby、Javascript,你都至少要看得懂return、if等等,但是,有位中國工程師 LingDong Huang 在 Github 上發表了一款自己開發的「文言文程式語言」,把for 迴圈、變數定義,全部修改成文言文!你發現了嗎?寫程式最一開始的定義環境在這裡變成了吾有一術。名之曰「快排」。欲行是術。必先得一列。曰「甲」。乃行是術日。之後工程師先將這個程式定義為「列」,同時也定義行列的名稱及變數。吾有三列。名之曰「首」。曰「頷」。曰「尾」。再來是 for迴圈、if、else。其中「凡」代表 for,「若」代表 if,「若非」代表 else if。變成下方這樣凡「甲餘」中之「丁」。若「丁」小於「甲一」者。充「首」以「丁」。若非。充「尾」以「丁」也。云云看到這裡你應該也找到了一個蠻可愛的變動 XD,平常使用英文打程式,我們會用大小括號來代表迴圈的運算範圍,但是在這款文言文程式語言中,用了「也」、「云云」去代替,超級有趣!只有這些基本的還不夠,通常你會想在程式上作註解,讓其他工程師也能夠順利完成編輯或是溝通,而在這個文言文程式語言也做得到!批曰。「「曼德博集。亦稱曼德布洛特複數集合。複平面上组成分形之點之集合也。」」在英文裡我們會使用斜線,在這裡,斜線則被批曰取代,感覺就像詩人看完另一位詩人的作品後留下了評論!文言文程式語言在一周前被 Barret 李靖 發佈到推特上,隨即引起網友熱烈討論,有網友表示:「要打出這個,必須要文理雙全才行呀!」,同時也有不少網友留言表示這樣的程式語言,肯定會讓肯定會讓國文不好的工程師頭痛,甚至有出現想讓孩子學會的相關留言,如果古文程式語言真的盛行,未來要當個工程師,可能還得常常翻閱古文 XD人們在說的語言常被當作溝通的最大管道,每個語言之間都存在著邏輯可被推理,其實程式語言也是!雖然複雜程度與表現都有所差異,但是都有跡可循,因此如果你已經成功精通了一個程式語言,不妨往下一個程式語言邁進!不過如果你想精通「文言文程式語言」,真的還是再好好考慮一下吧!
學程式助教
December 25, 2019
工程思維

從拉麵店的販賣機理解什麼是 API

API,全名叫做 Application Programming Interface,維基百科上的中文翻譯是:「應用程式介面」。這是一個你可能聽過很多次,但從來沒有理解過的東西,常常聽到工程師說著:「串 API」,但還是不知道 API 到底是什麼。 我原本以為在網路上有關 API 的參考資料已經有很多了,應該可以讓初學者理解什麼是 API。但根據我學生們的心得,好像還是有點困難,只好自己跳下來寫一篇,試著來挑戰這個主題,希望寫出一篇淺顯易懂的 API 介紹文。 如果你問我什麼是 API,我會跟你說:「API 就是拉麵店的販賣機」,所以在切入正題之前,我們要先來研究一下日本拉麵店會出現的販賣機。 (more…)
學程式助教
November 28, 2019
專案思維小白學程式工程思維程式新手

Messenger Chatbot開發規範

此文章的內容是有關Messenger Bot開發設定及規範,而本篇文章的專案是使用Botman+Laravel去製作Messenger Bot,如果想要了解製作流程的話,可以去參考另一篇文章Laravel + Botman 製作Messenger聊天機器人。這篇文章適合想嘗試製作Messenger Bot的朋友,本篇文章主要分為兩個重點: 建立Facebook Page(粉絲專頁) 建立Facebook App(應用程式) (more…)
學程式助教
November 26, 2019
Python初學程式工程思維技術問題

Pandas 第6講:Python資料處理套件Pandas 資料字串處理

Open Data: Google Play Store Apps 在前一篇文章中我們介紹了如何調整欄位名稱以及改變欄位的型別,接下來我們要進入下一個重點:開始著手進行資料處理與計算。在進行資料處理時,如果是使用Python原生的資料結構與函式進行處理,往往會需要使用多重迴圈,但使用 Pandas 套件時,我們可以使用名為 Vectorize Opration Technoloage的技術直接針對整個欄位的資料進行處理,這將會大大提升我們的作業效率。 使用資料表 (more…)
學程式助教
November 21, 2019
Python初學程式工程思維技術問題

Pandas 第5講:Python資料處理套件Pandas整理資料欄位與型別

Open Data: Google Play Store Apps 在前一篇文章中我們介紹了如何將資料進行分組以及利用特定條件篩選所需資料,這些技術都是檢視資料的範疇,接下來我們將進入資料清理的環節,畢竟在正常情況下,我們所得到的資料並非都非常完美,可能會因為收集方便或是人為疏失造成資料的儲存形式較不利於分析的情況,這時候我們就需要將資料先行整理成容易分析的結構或是型別,降低分析的時間成本,這也是資料清理的價值。 使用資料表 (more…)
學程式助教
November 21, 2019
Python初學程式工程思維技術問題

Pandas 第4講:Python資料處理套件Pandas條件篩選資料

Open Data: Mobile App Statistics (Apple iOS app store) 在上一篇文章中,我們介紹了如何檢視與定位資料,並且在文章最後提到「我們在提取 index 的時候,較常使用 mask 進行條件篩選」,這個條件篩選的方法是 pandas 套件中非常重要的功能,也是這篇文章的核心重點。 使用資料表 Notebook Content: 這次我們會使用apple(AppleStore.csv)的公開資料,其中紀錄了兩個app平台商店中所有app的分類、評分、下載量、名稱、大小⋯⋯等相關資料,假設我們是一間app開發公司的分析人員,我們想研究目前市場中哪些分類的評分以及下載量是比較高的。 資料條選件篩選: 首先我們先試著從資料中提取 price 欄位的前20筆資料,看一下app的價格有哪些: print(app.head(20))…
學程式助教
November 21, 2019
Python初學程式工程思維技術問題

Pandas 第3講:Python資料處理套件Pandas檢視與定位資料

Open Data: Mobile App Statistics (Apple iOS app store) 上一篇我們提到了pandas最重要的兩個資料物件(沒有看過的可以點這個連結),但我們光會存取資料是不夠的,假設我們今天要分析的資料有一萬多筆,且每筆資料都有一百多個欄位,要能直接從如此龐大的資料中分析趨勢或是關聯,基本上是不可能的,所以今天的重點就是介紹如何檢視與定位資料。 使用資料表 Notebook Content: 這次我們一樣會使用apple(AppleStore.csv)的公開資料,其中紀錄了兩個app平台商店中所有app的分類、評分、下載量、名稱、大小⋯⋯等相關資料,假設我們是一間app開發公司的分析人員,我們想研究目前市場中哪些分類的評分以及下載量是比較高的。 首先我們先試著利用 pd.read_csv() 讀取檔案: import pandas as pd app = pd.read_csv('AppleStore.csv') pd.read_csv()…
學程式助教
November 21, 2019
Python初學程式工程思維技術問題

Pandas 第2講:Python資料處理套件Pandas資料儲存物件

Open Data: Mobile App Statistics (Apple iOS app store) 當我們在使用python進行一些基本的資料處理時,很常使用python原生的物件,像是 list() , dict() 去存取及運用資料,但當我們的資料變得複雜的時候,這些原生物件反而顯得有些不便,像是二維陣列的元素計算就是較為複雜的資料形式,每一次的運算可能都要使用多個巢狀迴圈去處理,所以面對這種複雜且大量的資料,我們需要專門處理資料的套件幫我們節省一些作業時間,讓我們可以專心的研究資料內容。 使用資料表 (more…)
學程式助教
November 21, 2019