まず最初に、私は Python を初めて使用するので、ひどいことをしている場合は、この投稿の前に申し訳ありません。私はこの問題を割り当てられました:
次の問題に対する動的プログラミングのソリューションを考案したいと考えています: すべてのスペースが削除された一連の単語である可能性のある文字列があり、もしあれば、スペースを挿入する方法を見つけたいと考えています。有効な英単語を区切ります。たとえば、theyoutheevent は、「the you the vent」、「the Youth event」、または「they out he vent」からのものである可能性があります。入力がイーグルハスランドの場合、そのような方法はありません。あなたの仕事は、次の 2 つの方法で動的計画法のソリューションを実装することです。
- 反復ボトムアップ バージョン
- 再帰的記憶版
元の一連の単語には他の句読点 (ピリオドなど)、大文字、固有名詞が含まれていないと仮定します。すべての単語は、提供される辞書ファイルで利用できます。
だから私は2つの主な問題を抱えています:
- これは O(N^2) で実行でき、実行する必要があることを知っていますが、私のものはそうではないと思います
- ルックアップ テーブルは、時間の複雑さを軽減できると思われるすべての単語を追加していません。
私が欲しいもの:
- あらゆる種類の入力 (より良い方法、コードの間違い、ルックアップ テーブルを機能させる方法、ブール値のテーブルを使用して一連の有効な単語を作成する方法)
- 再帰バージョンに取り組む方法についていくつかのアイデアがありますが、反復ソリューションを解決できるようになったら、そこから再帰バージョンを設計できると思います。
誰かがこれを与えてくれた時間や努力にいつも感謝しています。
これが私の試みです:
#dictionary function returns True if word is found in dictionary false otherwise
def dictW(s):
diction = open("diction10k.txt",'r')
for x in diction:
x = x.strip("\n \r")
if s == x:
return True
return False
def iterativeSplit(s):
n = len(s)
i = j = k = 0
A = [-1] * n
word = [""] * n
booly = False
for i in range(0, n):
for j in range(0, i+1):
prefix = s[j:i+1]
for k in range(0, n):
if word[k] == prefix:
#booly = True
A[k] = 1
#print "Array below at index k %d and word = %s"%(k,word[k])
#print A
# print prefix, A[i]
if(((A[i] == -1) or (A[i] == 0))):
if (dictW(prefix)):
A[i] = 1
word[i] = prefix
#print word[i], i
else:
A[i] = 0
for i in range(0, n):
print A[i]