發這個沒有別的意思
有不少轉行/自學/經驗少的旁友很好奇真正的面試題是什麼樣子的,也想檢驗下本身什麼水平
正好最近朋友給我看了這個真實的例子,就發來給你們看看
本題不涉及任何特定的算法,數學與專門的理論知識
考察的是基本的邏輯思惟,抽象思惟,基本的算法分析與動手能力


如圖有限狀態機
A,B,C三個狀態
從左邊start進入A開始運行,到達最右邊的end狀態結束
每一個狀態節點有若干條邊來標識狀態轉換的路徑
每一個邊上的符號表明一個機率p,表示到達這個節點後有p的機率走這條路線
機率值精確到2位小數
每一個狀態全部出去的路徑機率之和爲1
好比a1+a2+a3+a4=1
每到達一個狀態後輸出該狀態的字母
若是到達end則中止輸出
那麼根據這個規則,能夠隨機輸出一系列字符串,例如:
AABC
ABCCCAABC
等等

問題:
1. 寫一個程序實現上述字符串輸出
2. 給定一個字符串長度N,寫一個函數計算1中的算法最終輸出字符串長度爲N的機率。
3. 給出2中算法的複雜度,是否有優化方法。
4. 快下班的時候,boss:小李啊,客戶忽然有個需求,要經過讀取配置文件獲得狀態機信息,改下你的程序以支持用戶輸入的任意狀態機,改完了再走吧,打車公司報銷

要求:
手寫代碼
編碼限時15分鐘 (只要有核心功能便可,標準庫隨便用)
複雜度什麼的寫完代碼再慢慢聊ios