この特定の問題には、おそらくハッシュ テーブルを選択します。O(1)
あなたのサイズのテーブルのルックアップを提供します。ただし、試してみることも良い選択です。
ただし、実装する最も簡単な方法は、単語をアルファベット順に配列に配置bsearch
し、C ライブラリから使用することです。処理する単語は 30 語程度しかないため、ハッシュやトライとほぼ同じ速さである必要があります。ハッシュ値を計算する必要がないため、実際にはハッシュ テーブルよりも高速であることが判明する場合があります。
Steve Jessop のアイデアは、文字列の端から端までを同じサイズの char 配列にレイアウトするという優れたアイデアです。
const char keywords[][MAX_KEYWORD_LEN+1] = {
"auto", "break", "case", /* ... */, "while"
};
#define NUM_KEYWORDS sizeof(keywords)/sizeof(keywords[0])
int keyword_cmp (const void *a, const void *b) {
return strcmp(a, b);
}
const char *kw = bsearch(word, keywords, NUM_KEYWORDS, sizeof(keywords[0]),
keyword_cmp);
int kw_index = (kw ? (const char (*)[MAX_KEYWORD_LEN+1])kw - keywords : -1);
まだお持ちでない場合は、Compilers: Principles, Techniques, and Toolsのコピーを取得することを検討してください。その表紙から、ドラゴンブックと呼ばれることがよくあります。