2012-11-18 42 views
1

我豆蔻問題理解概念上隨機寫程序的結構(即需要輸入一個文本文件的形式),並使用馬爾可夫算法來創建一個有點理智的輸出。馬爾可夫算法隨機寫入

所以我使用的數據結構是使用範圍從0到10的情況。在case 0:我在數字字母/符號或數字出現的數字,並根據我的新文本模擬輸入。我已經通過使用一個Map類型來實現這一點,該類型在輸入文本中保存每個唯一的字母,並在文本中包含多少個字母。所以我可以簡單地詢問特定字母的數組大小,並像這樣簡單地創建輸出文本。

但現在我需要創建案例1/2/3等等......案例1還擁有什麼字母最有可能出現在任何字母之後。我是否需要爲這些情況創建10個單獨的數組,還是有更簡單的方法?

回答

1

有很多方法可以對此進行建模。一種方法就像您所描述的那樣,使用多維數組,其中每個索引是鏈中的以下字符,最終結果是計數。

# Two character sample: 
int counts[][] = new int[26][26] 
# ... initialize all entries to zero 

# 'a' => 0, 'b' => 1, ... 'z' => 25 
# For example for the string 'apple' 
# Note: I'm only writing this like this to show what the result is, it should be in a 
#  loop or function ... 
counts['a'-'a']['p'-'a']++ 
counts['p'-'a']['p'-'a']++ 
counts['p'-'a']['l'-'a']++ 
counts['l'-'a']['l'-'e']++ 

然後隨機生成名稱您也要算總結果的數目爲給定的字符(例如:2分的結果對於前面例子中的「p」),並選擇一個加權隨機數爲可能的結果的一個。

對於較小的尺寸(比如最多4個字符)應該可以正常工作。對於任何更大的事情,您可能會開始遇到內存問題,因爲(假設您使用A-Z)26^N個條目用於N長度鏈。

我寫了類似於幾年前的東西。我想我使用維基百科的隨機頁面來爲種子數據生成權重。