最近系上的OJ不幸陣亡,打算自己東敲西打搞出一個新的批改系統,適逢這次的作業是個書籤管理網,需要登入介面及支援線上修改,不妨就拿來小試身手吧 ~
插入排序法
插入排序(insertion sort)是一種排序演算法,它將一個數列分成已排序與未排序兩個部分,透過不斷將未排序數列插入至已排序數列的正確位置達成,嗯…這個定義唸起來實在有些饒口,不如讓我們看個實例:
假設我們要由小到大排序數列:
1 | 25 49 22 33 47 |
短路求值
1 | /* |
古典密碼學
古典密碼學已經被電腦打爆了,但這跟它重不重要一點關係都沒有。
── 我的資安導師總是這樣嘮叨著……
最近重新改寫以前的Blog,終於理解這句話的意涵。舉凡近代加密演算法,多為古典密碼學手段的組合,只不過以前人力與能力都不及。
比方說你不會想把16個字母放進一個矩陣中,每個查表代換10次,再每行平移幾個單位,然後各別乘上一個矩陣,最後再和別的矩陣做XOR邏輯判斷。
Welcome to modern cryptography
這也太繁瑣了,正常人才不會想圈圈畫畫這些詭異的流程。不過,若將這些細項拆開來看,平移對應到移項式密碼,代換跟替換式密碼有關,矩陣運算則是來自希爾密碼,XOR就比較特別了些,但兩無關序列間的運算,可讓人追溯至維吉尼亞密碼的金鑰概念,這些都屬於古典加密的範疇。所以若想踏入近代密碼的殿堂,古典密碼當為一個必經的前哨站,助於釐清算法本身的原理與優劣勢。
前置處理器
前置處理器 = 進行「前置處理」的文字編輯器。
或許我們得先解決什麼是「前置處理」。
從說文解字的角度出發,它做的是某件工作的事前處理,在C和C++中,我們指的是進行編譯前的處理工作,大致上可分為:
- 引入標頭檔(Header file)
- 進行文字的取代
- 巨集、常數的定義……
- 條件式編譯
具體而言,在程式中前有 #
的部分就涉及了前置處理,比如#define
、#Pragma
與#include
等等。
要注意,前置處理器並不屬於C編譯器的一部分,它也不了解C家族的語法,如果你用C的觀點來審視它可能會碰上大麻煩。