2

ボーグル ゲームを解くプログラムに取り組んでおり、プログラム全体を 0.1 秒未満で実行する必要があります。標準入力によって辞書をコードに挿入します (これは、最大時間の半分である 0.05 秒続きます)。次の関数を使用して単語を辞書に追加します。単語はそれぞれ 0.1 秒続きます。

void Node::addWord(const char* word){
  const char idx = *word - 'a';
  if(!mChildren[idx]) mChildren[idx] = new Node(*word);
  if(strlen(word) > 1) mChildren[idx]->addWord(word + 1);
  else mChildren[idx]->setMarker(true);
}

void Trie::addDictionary(const vector<string>* aux){
  auto length = aux->size();
  Node* current = root;
  for (size_t i = 0; i < length; i++) {
    int len = aux->at(i).length();
    if (len >= 3 && len <= DIM*DIM + 1) {
        current->addWord(aux->at(i).c_str());
    }
  }
}

この場合、DIM = 4 (Boggle の NxN ボードの次元) で、aux は標準入力からのすべてのデータがダンプされるベクトルです。3 文字以上の単語のみが必要なため、len >= 3 の条件を課します。

これらの関数の速度を改善するためのアイデアはありますか?

4

1 に答える 1