【原創】生活中的算法


今天微信朋友圈有人發了這樣一條消息,如下:

對於80%的人來說,玩兒這個游戲的方法就是拿眼睛瞅了,瞅到一個算一個,大部分人都能找到:章,兄,立,早。

細心一點的人能找到:克,十,兒,古。

處女座的應該還能再加上:一,音。

但是,如果你問一個人他找這些字的思路是什么,相信他會這樣回答你:這還需要思路嗎?看着有這個字就寫出來嘍。

普通人這么說當然無可厚非,但這種話不應該從一個研究過算法的人嘴里說出來,生活中我們做任何事情,都有應該有一個基本思路,小到整理試卷時候的高效排序方式(據我們老師講他嘗試過,最快的整理方式是歸並排序,大多數人應該是遵循插入排序的思想),大到出門旅游時的線路選擇(最短路徑,最經濟路徑),算法可以為我們解決生活中的許多問題。

自從有了女兒以來,我一直在觀察她從出生到目前(三歲零九個月)的語言形成和行為方式,我不知道有多少人這樣做過,如果觀察過的人應該可以理解我下面的話:很多時候,人和機器是沒有太大區別的,時至今日,我女兒說的每一句話,出現的每一種看似出乎意料的表情和動作,仔細分析后基本都可以在她過往的經歷中找到原型。

從研二開始,我對機器學習產生了很大的興趣,尤其是深度學習,我堅信在未來的30到50年,一定會有比肩人類的人工智能出現,擁有涌現、聯想、抽象的能力。

話題扯遠了......

下面我們嘗試用簡單的算法來解決這個小游戲吧:

首先這個問題和以往研究過的某一類問題很像,具有“聯想”和“抽象”能力的你一定發現了,沒錯,那就是字符串匹配算法。

在以往,我們研究過的大多數的匹配都是針對字符串,對於這樣“結構化漢字串”(請允許我這么稱呼它)而言,無非就是從最基本的筆畫開始,依次往后進行組合,然后與字典進行匹配,找到對應的字就輸出嘛,如此看來,這與字符串匹配沒有什么兩樣。

那就從“丶”筆畫開始嘍,字典里有的字:首先找到了立、繼續往下,找到音,繼續往下,找到章,再往下搜索完所有筆畫沒有匹配的漢字了

從“一”筆畫開始,找到一,然后沒有了

以此類推

我們的漢字匹配程序找到了什么字呢?

立,音,章,一,日,早,(二),干,十,古,克,口,兄,兒

還不錯嘛~遺憾就是這種算法會破壞字體的結構,比如找到的二,我們可以找到一定的規則來消除這樣的錯誤匹配。

另一個遺憾就是時間復雜度太高啦,找這么簡單的結構當然沒問題,但是如果有一個超級無聊大變態給你寫了一個巨長的字(假設由1億個基本漢字摞起來)讓你找,這個算法恐怕就有點力不從心了。

在字符串匹配領域最高效的當然首推我前文提到的moore教授的算法和KMP三位大神的算法了,可惜在此處有不適用的地方,需要我們進一步思考。

吃飯去也。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM