3

たとえば、有名なフィクション「老人と海」の内容である、10,000語を超える文字列があるとします。

たとえば、1,000語のペアを持つ辞書。

before,after
--------------
fish , net
black, white
good, bad
....
....
round,rect

だから私がやりたいのは、辞書によると、文字列内のすべての「魚」を「ネット」に、「黒」を「白」に置き換えることです...。

最も単純で直感的なアルゴリズムは次のとおりです。

foreach(line, dict)
   str.replace(line.before,line.after)

しかし、それはとても非効率的でした。

私が考えることができる1つの改善は、文字列を複数の小さな文字列に分離し、マルチスレッドを使用して各小さな文字列をそれぞれ処理し、結果を結合することです。

他に何かアイデアはありますか?

ところで、私はQTを使用しています

4

1 に答える 1

2

文字列ではなく、1万語のベクトルを使用する方がよいと思います。

ちょうどこのような:

QVector<QString> myLongString;

辞書はハッシュテーブルとして実装できます。

QHash<QString, QString> dict;

これにより、辞書の単語へのアクセス時間が一定になります。

QString replaceWith = dict.value("fish") // replaceWith == "net"

次に、ベクトルを反復処理して単語を置き換えることができます。

for (int i=0; i < myLongString.size(); ++i)
{
    QString word = myLongString[i];
    if dict.contains(word)
    {
        myLongString[i] = dict.value(word);
    }
}
于 2012-08-21T09:05:35.013 に答える