有1千万条有重复的短信,以文本文件的形式保存,一行一条,也有重复,用5分钟时间找出重复出现最多的前10条短信。

1,哈希表法

  分成若干组,进行扫描。相同记录只加1次,重复次数加1,之后进行第二次扫描,得出重复次数的前十名。

2,从小到大排序(我觉得最好不用这种方法,准确性不高)

3,内存映射(建议)

  对每条短信的第i个字母按ASCII码进行分组,也就是创建树。i是树的深度,也是短信的第i个字母。

时间: 2024-10-03 14:56:04

有1千万条有重复的短信,以文本文件的形式保存,一行一条,也有重复,用5分钟时间找出重复出现最多的前10条短信。的相关文章

从一千万条短信中找出重复次数最多的前10条

题目:      有1千万条短信,有重复,以文本文件的形式保存,一行一条.请用5分钟时间,找出重复出现最多的前10条. struct TNode { BYTE* pText; //直接指向文件映射的内存地址 DWORD dwCount; //计算器,记录此节点的相同短信数 TNode* ChildNodes[256]; //子节点数据,由于一个字母的ASCII值不可能超过256,所以子节点也不可能超过256 TNode() { //初始化成员 } ~TNode() { //释放资源 } }; /

解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据

我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据.好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的动态,而不关心几个月甚至几年前消息,所以后端返回给客户端的数据是不会一次性传递全部内容的(不仅耗费流量,而且还给服务器带来巨大压力). 举个例就说MySQL,它已经给我们提供了相应的语句来支持这一功能,那就是limit关键字.比如我要拉取一个消息表中用户id为1的前10条最新数据,SQL语句如下: s

Oracle前10条记录

在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10 下面是关于rownum的介绍 ================================ Rownum和row_number() over()的使用 ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编号,始终从1开始,常见的用途就是用来分页输出. 比如 SELECT * FROM torderdetail a WHERE ROWNUM <=

oracle 选取出现次数最多的前5条数据

SELECT * FROM ( SELECT PROJECT_LISTING.MATERIAL, COUNT (*) AS "出现次数" FROM PROJECT_LISTING WHERE PROJECT_LISTING.MATERIAL IS NOT NULL GROUP BY PROJECT_LISTING.MATERIAL ORDER BY COUNT (*) DESC ) WHERE ROWNUM <= 5 ORDER BY COUNT (*) DESC 是关键排序 C

MySQL,Oracle,SQL Server——选取前10条——语法差异

前言 今天,用select top 10 * from table;在mysql上报错. 原因 实现选取前10条,不同数据库存在差异. 描述 MySQL select * from table1 limit 10 #具体语法: select * from table1 limit m,n; #从m开始选取n条. SQL Server select top 10 * from table Oracle select * from table where rownum<=10

Oracle中查询前10条记录

在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10     ----说明:rownum只能用于<或<=运算,如果要用>运算符就要用到嵌套查询. 下面是关于rownum的介绍 ================================ Rownum和row_number().over()的使用 ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编号,始终从1开始,常见的用途就是用来分

9.7数学与概率(四)——在二维平面上,有一些点,请找出经过点数最多的那条线

/** * 功能:在二维平面上,有一些点,请找出经过点数最多的那条线. /** * 思路:在任意两点之间画一条无线长的直线,用散列表追踪那条直线出现的次数最多.时间复杂度O(N*N) * 注意: * 1)用斜率和y轴截距来确定是否是同一条直线. * 2)浮点数不一定能用二进制数准确表示,因此检查两个浮点数的差值是否在某个极小值(epsilon)内. * 3)对于散列表而言,斜率相等,未必散列值相同.因此,将斜率减去一个极小值,并以得到的结果flooredSlope作为散列键. * 4)取得所有可

Oracle查询前10条记录及分页查询(第5条到第10记录)

如果你想了解Oracle查询前10条记录的相关实际应用方案的话,你就可以点击以下的文章对其在实际相关操作中的正确用法,有一个更加完善的认识,希望你在浏览完以下的文章会以下就是正文的详细内容的介绍. 在Oracle怎样查询表中的top10条记录呢? select *   from test   where rownum <=10   下面是关于rownum的介绍 Rownum和row_number() over()的使用 ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编

php while循环 指定显示内容 例如不想显示前10条和后10条

<?php //查询信息总的条数 $db_num = query_num("表","where 1=1"); //每页显示的条数 $page_size=200; //总条目数 $nums=$db_num; //每次显示的页数 $sub_pages=5; if(!$pageCurrent) $pageCurrent=1; $page_num=$pageCurrent-1; $page_num=$page_num*$page_size; $list_sql = m