请教优化算法问题:统计数组中成员出现的频率 数组原始状态是空的,然后成员1个个的被加入(成千上万的成员),现在要找出出现频率最高的30个成员,请问有什么好的算法吗?一个一个遍历是不是太慢了,需要快速的方法阿,请教高手.《数据结构》好像有这样的解决方法,请大家指点下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有一个数组,里面有成千上万的元素,像这样:array A={"red","blue","orange","blue"……}怎样快速的统计出这个数组中出现频率最高的30个元素呢?速度优先,不考虑空间开支,谢谢 std::map<std::string,int> count;for (int i=0;i<array.size();i++){ count[array[i]]++;}然后取count 前30个 我覺得樓上說得很清楚了,當然最後排序也可以省掉,因爲在輸入的同時進行統計也可以進行排序。比如最初你每個元素的數目分別是0,0,0,0一次輸入以後變成0,1,0,0這時直接在變化以後排一次序就可以不考慮空間 就可以做成一個map 就可以避免出現的元素種類太多的情況了 std::map<std::string,int> count;cin >> array[i];count[array[i]++];尽量要省略排序查找等也可以建堆, 关于单文档创建list control和button求大神笼罩 VS2005 你不能这么玩儿我吧 WinXP+VC6下安装新版Platform SDK之后编译出错```高分求解 各位帮帮忙,P2P播放软件开发 这段代码错在哪里?望大家能给我点帮助,不胜感激。 关于网络共享软件 比如ppp一点通 来者有分 关于键盘钩子的简单问题 中国做通用ERP的公司用的都是什么技术/平台? 有没有用用VC++/Windows的? 是C/S还是多层架构? 关于DAO数据库修改记录的问题 为什么会多出几个线程? 函数GetDateFormat怎么用得呀? 网格相关操作
for (int i=0;i<array.size();i++)
{
count[array[i]]++;
}
然后取count 前30个
0,0,0,0
一次輸入以後變成
0,1,0,0
這時直接在變化以後排一次序就可以
不考慮空間 就可以做成一個map 就可以避免出現的元素種類太多的情況了
cin >> array[i];
count[array[i]++];
尽量要省略排序查找等
也可以建堆,