文章

人工智能有何用?

AI 在哪方面的應用 可享優勢?  例如:從X 光片 偵測 早期 腫瘤; 從外太空的電磁波搜尋特定信號 Detection among Massive Data      從海量資料中 偵測 特定組合 這當中,有四個可能性: 真陽性 True Positive - desired result 真陰性 True Negative 假陽性 False Positive 假陰性 False Negative 如果過份倚賴人工智能,對AI的運算結果不作覆核確認,那 假陽性 及 假陰性 便會被忽略。 有人提出過,若AI 準確率能達到  某百份比 之後,作為一種科技應用的代價,錯誤的部份可被犠牲⋯⋯ 但,如果是人命呢? 無人回應,因為大家心知肚明。 AI 模型不容易被修改,因為牽涉太多數據,要重建模型需時,成本效益低,在商言商,無人會做。 聽過有一真實個案,研究人員調查不準確的結果,已經找到問題所在,但結論是 "不予修改"!

逆向思維 reverse operation

We have input x and output y with the relationship: 假設有一未知函數 F (i.e. 電子線路),輸入X 後會得到 輸出Y:      x --> [ f(x) ] --> y Given y, if we want to find x, we need   f^-1(y)  so that 如果有逆函數 F^-1 ,就可以從目標輸出 Y 找到需要的 輸入 X:      y --> [ f^-1(y) ] --> x Another approach:      for each xi among all possible x's, check          if  f(xi)  equals to y, then answer is xi, and return;          otherwise, next xi. ADC uses the same approach (internally has a DAC) 另一途徑,是輪流測試不同的輸入,直至得到目標輸出。例如有些類比信號的量化(ADC)便是用這方法。          逐一測試  由 0 至 255 (8-bit) 輸入到內置DAC ,得出的類比電壓 與 目標電壓 作比較。當比較差是零或少於所需誤差值,該測試輸入值便是答案。

魔方研究

圖片
  射鵰英雄傳 瑛姑 在黑沼 隱居十餘年 計算魔方3x3 (洛書)。 3x3 有 (9!)=362,880個組合,其中有4(旋轉)x4(鏡射)=16 個解答。 當中要符合'米'字計算結果相同,中心必須為5。 成 8! 組合。 然後有四對數必須在'米'字相對:1-9, 2-8, 3-7, etc. (續 ⋯⋯ ) 講返瑛姑,362880 ÷ 365日 ÷ 10小時 ÷ 4個骨 ==> 不遇見黃蓉的話,最壞情況可望在24年10個月算出答案。 今時今日,一台舊電腦,walk through.. 2 秒 $ time node square.js [ 2, 7, 6, 9, 5, 1, 4, 3, 8 ] real 0m1.742s user 0m2.097s sys 0m0.173s (edited 2021) 興起一個想法:3x3x3 cube 有沒有solution? 遍歷是不太可能的了,以代入的方式減少計算量至可能範圍,可惜結果為不存在解答。 (edited 2024) 維基有人造出3x3x3 立方,但我不喜歡這個解答,必須穿過立方中心、或者8條邊上的和才等於42, 但六個面上的對角線和則各有不同。 https://en.wikipedia.org/wiki/Magic_cube 事實上,正如之前提到,我已確認不存在能符合任直線三點和的解。

用 遞迴 (Recursion) 由零實作 RegEx 解析器(遲來的README)

圖片
Recursion  在現實生活中很少見, 展示的例子一般有 斐波那契數列 ( Fibonacci sequence) 、堆棧(stack)的先入後出(first in last out)、遍歷上色問題(cell painting) 等。 2009年我用「 間接遞迴 ( Indirect Recursion)」(當時我稱之為「 多重遞迴  Double Recursion」) ,輔以 function pointers 實作了一個 正則表達式 (Regular Expression) 的 解析器 (parser)。Google 的結果告訴我,用這 方法 實作是首創。稍後有幾間公司連絡我,把我的算法整合到他們的內部程式庫,應用例子有 web-based coding sandbox 和 網頁的 script interpreter engine。 Recursion 的概念,簡單來說就是「自己叫自己」。結構包括兩部份:終結條件(terminating condition) 和 遞迴的表達式 (expression)。 簡單例子如下: 上面僅用兩行程式碼,便能計算 (1 * 2 * 3 * ... * n-1 * n) 的結果: > mul(1) 1 > mul(2) 2 > mul(3) 6 > mul(4) 24 > mul(5) 120 遞迴的好處 是 程式碼很簡練(compact),編譯後的二元碼很小,例如我的 regex engine 只有 5 KB,Lite version 更少於 2KB。普通一部家用電腦的記憶體,可平衡執行成千上萬個實體。 遞迴的缺點是難以預測需要多少記憶體、難偵錯、稍一不慎便會墮入無限迴旋(infinite loop)。現實世界的其中一個解決辦法,是 Circuit Breaker。 「間接遞迴」(或「多重遞迴」) 的 概念為:           A(x) --> B(y) --> ... --> A(z)  用在正則表達式 ,使用時機在於括弧,例如:           pattern = "abc(def(gh){2,4})+i...