以下のコードは、ハッシュ テーブル (リンクされたリストの束) で見つけられる最高頻度を 10 回出力します。ハッシュ テーブルに上位 10 個の頻度を出力するコードが必要です。これを行う方法がわかりません(コード例は素晴らしいでしょう、プレーンな英語のロジック/疑似コードも同様に素晴らしいです)。
- ハッシュテーブル「hashtable」を指す「tmp」という一時的なハッシュリストを作成します
- その後、while ループがリストを調べて、int 'tmp->freq' である最高周波数を探します。
- ループは、ハッシュ テーブルのリンク リストの最後に到達するまで、変数 'topfreq' を使用して検出した最高頻度を複製するこのプロセスを続行します。
私の「ノード」は、変数「freq」(int) と「word」(128 文字) で構成される構造体です。ループで他に検索するものがなくなると、これら 2 つの値が画面に表示されます。
問題は、私が見つけたばかりの数から次に低い数を見つける方法を考え出すことに頭を悩ませることができないことです (そして、これには同じ freq 値を持つ別のノードが含まれる可能性があるため、単語がも同じではありません)。
void toptenwords()
{
int topfreq = 0;
int minfreq = 0;
char topword[SIZEOFWORD];
for(int p = 0; p < 10; p++) // We need the top 10 frequencies... so we do this 10 times
{
for(int m = 0; m < HASHTABLESIZE; m++) // Go through the entire hast table
{
node* tmp;
tmp = hashtable[m];
while(tmp != NULL) // Walk through the entire linked list
{
if(tmp->freq > topfreq) // If the freqency on hand is larger that the one found, store...
{
topfreq = tmp->freq;
strcpy(topword, tmp->word);
}
tmp = tmp->next;
}
}
cout << topfreq << "\t" << topword << endl;
}
}
ありとあらゆる助けをいただければ幸いです:)