我正在處理一部分代碼,它本質上是試圖將遞歸的字符串列表簡化爲單個字符串。遞歸困境 - 減少輸入字符串
我有一個內部數據庫建立了不同長度的匹配字符串數組(比如說數組長度爲2-4)。
一個例子輸入字符串數組是:
{"The", "dog", "ran", "away"}
,併爲進一步例如,我的數據庫可以由字符串數組以這種方式:
(length 2) {{"The", "dog"},{"dog", "ran"}, {"ran", "away"}}
(length 3) {{"The", "dog", "ran"}.... and so on
那麼,什麼我試圖要做的是遞歸地將我的輸入字符串數組縮減爲單個標記。所以理想情況下,它會解析這樣的事情:
1) {"The", "dog", "ran", "away"}
Say that (seq1) = {"The", "dog"} and (seq2) = {"ran", "away"}
2) { (seq1), "ran", "away"}
3) { (seq1), (seq2)}
In my sequence database I know that, for instance, seq3 = {(seq1), (seq2)}
4) { (seq3) }
因此,當它歸結爲一個單一的標記,我很高興,功能將結束。
這裏是我當前的程序邏輯的輪廓:
public void Tokenize(Arraylist<T> string_array, int current_size)
{
// retrieve all known sequences of length [current_size] (from global list array)
loc_sequences_by_length = sequences_by_length[current_size-min_size]; // sequences of length 2 are stored in position 0 and so on
// escape cases
if (string_array.Count == 1)
{
// finished successfully
return;
}
else if (string_array.Count < current_size)
{
// checking sequences of greater length than input string, bail
return;
}
else
{
// split input string into chunks of size [current_size] and compare to local database
// of known sequences
// (splitting code works fine)
foreach (comparison)
{
if (match_found)
{
// update input string and recall function to find other matches
string_array[found_array_position] = new_sequence;
string_array.Removerange[found_array_position+1, new_sequence.Length-1];
Tokenize(string_array, current_size)
}
}
}
// ran through unsuccessfully, increment length and try again for new sequence group
current_size++;
if (current_size > MAX_SIZE)
return;
else
Tokenize(string_array, current_size);
}
我認爲這是足夠簡單,但已經得到了一些奇怪的結果。 一般來說,它似乎工作,但進一步審查我的輸出數據時,我看到一些問題。主要是,它似乎工作到某個點......在那個時候,我的'curr_size'計數器重置爲最小值。
所以它被稱爲2的大小,然後3,然後4,然後重置爲2. 我的假設是,它會運行到我的預定最大大小,然後完全保釋。
我試圖儘可能簡化我的代碼,所以在轉錄時可能會有一些簡單的語法錯誤。如果有任何其他細節可以幫助鷹眼SO用戶,請讓我知道,我會編輯。
在此先感謝
是不是第3步('{{ 「的」, 「狗」},{ 「跑」, 「離開」}}')已經只有一組? – 2009-12-09 00:14:27
我會編輯以更好地反映發生了什麼 – espais 2009-12-09 00:18:47
您的意思是4){{{「The」},{「dog」}},{{「ran」},{「away」}}}? – 2009-12-09 00:20:26