誰もトップ-kクエリ問題の解決法を持っていますか? 問題は私が無限の数のストリームを持っていることで、私はストリームのトップkアイテムを与える解決策を考え出す必要があります。トップ-Kクエリソリューション
これはインタビューの質問です。私はC++のソリューションを探しています。
これはどのように問題を解決するのですか。しかし、ここで私はあなたがストリームから取得した各番号についてはstd::set<int> top
stream/file
#include <iostream>
#include <fstream>
#include <string>
#include <map>
typedef std::map<std::string, int> freq_table_t;
typedef std::multimap<std::size_t, freq_table_t::const_iterator> top_n_t;
size_t n = 5;
int main (int argc, char **argv) {
std::ifstream ifs(argv[1]);
if (ifs.peek() == EOF)
return 1;
std::string line;
freq_table_t freq_table;
while(ifs.good()&& std::getline(ifs,line)) {
if (freq_table.insert(std::make_pair(line, 1)).second == false)
freq_table[line]++;
}
ifs.close();
top_n_t top5;
for (freq_table_t::const_iterator it = freq_table.begin(); it != freq_table.end(); ++it) {
if (top5.size() < n || it->second > top5.begin()->first)
top5.insert(std::make_pair(it->second, it));
if (top5.size() == n + 1)
top5.erase(top5.begin());
}
for (top_n_t::reverse_iterator ritr = top5.rbegin(); ritr != top5.rend(); ++ritr)
std::cout << ritr->second->first << std::endl;
return 0;
}
インタビューが終了しました。私は答えられず、Googleの回答も見つからなかったので、私に解決策を説明できる誰かを捜しています –
私はこれが完全に不公正な質問だとは思わない、今インタビューを受けています。私はこれを宿題のように扱い、答えをOPに導くだけではなく、彼に答えを与えます。プラス私はこれについて自分自身が好奇心が強い。 –
質問をする質問はここで禁止されていません。あなたが解決策について感じていることについての質問に入力を加えてください。投票を再開する。 –