一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对,如abc和cba。

当时怎么想的忘记了,现在重新思考一下,文件的大小上限是10G,不可能在内存操作了。考虑设计一种hash使得如果两个字符串维相反串能得出相同的hash值,然后用该hash将文件中的字符串散列到不同的文件中,再在各文件中进行匹配。比如这样的hash函数对字符串上所有字符的ascii求和,因为长度在1K以内,因此范围在int之内。更进一步,可以在上面那个hash后面再加一个字符串长度,可以得到更好的散列效果。(例如,a2b1c5,统计按照每个字母出现的次数进行一步的hash)

在各个单独文件中匹配时,如果采用的是第二种hash函数,那么该文件中的所有字符串都有相同的长度。如果hash效果好,那么这个文件应该小到可以在内存中进行操作了。将文件拷贝为两份,分别按照不同规则hash:第一份按前k位哈希,第二份将字符串的头尾进行颠倒后按前k位哈希(只是对于排序算法颠倒,不必实际颠倒)。这里的按前k位哈希只需要前k位相同能得到相同结果就好,比如第i位的ascii乘以2^i。两份拷贝中hash值相同的就很可能是要求的相反串对了,再进行实际匹配,工作量应该就可以接受了。

第二步,将第一份字符串放入hash_set中,然后将第二份的字符串以颠倒的字符串求hash_set,查看是否在hash_set中,注意字符串中字母完全相同的情况

一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对相关推荐

  1. Java黑皮书课后题第7章:7.14(计算gcd)编写方法,返回个数不确定的整数的最大公约数。编写一个测试程序,提示用户输入5个数字,调用该方法找出这些数的最大公约数,并显示这个最大公约数

    7.14(计算gcd)编写方法,返回个数不确定的整数的最大公约数.编写一个测试程序,提示用户输入5个数字,调用该方法找出这些数的最大公约数,并显示这个最大公约数 题目 题目描述 破题 代码 运行实例 ...

  2. 牛客网:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

    题目描述 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 ...

  3. python中打开文件时只允许写入的模式是_在open函数中访问模式参数使用()表示打开一个文件只用于写入。(4.0分)_学小易找答案...

    [单选题]溢流坝属于( ) [单选题]在重力坝的底部沿坝轴线方向设置大尺寸的空腔,即为( ) [单选题]模式()的用途是打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾.(4.0分) ...

  4. 基础算法:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

    这里要注意的是当数字足够大的时候,我们要使用long long形式的类型,用来记录那个最大值 最大值共有四种情况: 三个正数:数字本身越大则乘积越大 两个负数一个正数:负负得正,所以两个负数最小,之积 ...

  5. 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大 java实现

    实现该算法主要思想是, 1.两个负数与与一个正数相乘 2.全为最大正数相乘得到最大值 下面用算法实现,时间复杂度为O(n),下面用java实现,不过有一些为0的情况排除下可以,还有一些整形过大可以变为 ...

  6. 【智力题】有 1000 瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的 药物,最少需要多少只小白鼠?

    答案是10只 本题采用了二进制的思想 小白鼠的生与死可以看作二进制的0和1. 用10只小白鼠,也就是10个二进制位,最多可以表示1024个数. 编号环节 先给药水从001到1000编号,每个药水编号转 ...

  7. python怎样导出py文件_导出python模块(到字符串或py文件)

    摘要: 我想要一个'module'类型的变量并导出它.在 我使用import从.py文件导入python模块并对其进行更改.我需要将模块导出回一个文件,或者获取完整模块的字符串表示形式,然后将其写入磁 ...

  8. linux shell 文件空,linux shell编程 如何判断一个文件是否为空

    shell 判断文件/目录是否为空 jfkidear144932015-01-15 shell中如何判断一个变量是否为空 l_nan365492014-07-14 在shell中如何判断一个变量是否为 ...

  9. sql 算出下级销售总和_找出总和字符串

    sql 算出下级销售总和 Description: 描述: This is a standard interview problem to check that the given string is ...

最新文章

  1. 通过JDBC进行简单的增删改查(以MySQL为例)
  2. 神策数据张涛:AARRR 模型面临的新挑战
  3. PHP学习笔记:php二手交易市场系统
  4. 深入研究.NET Core的本地化机制
  5. Ubuntu安装sysv-rc-conf配置开机启动服务
  6. 问题六十一:三次b样条(b-spline)曲线的控制点和曲线形状的对应——以回旋体的“基本曲线”为例
  7. linux挂载硬盘_玩客云刷机系统之挂载U盘/硬盘增加储存空间
  8. [Hadoop]Sqoop 1.4.2中文文档(二)之数据导出
  9. HTML实现简易音乐网站
  10. 电脑更新后,设备管理器未知USB设备,并且蓝牙无法使用
  11. 八十九、Java内置函数(常用函数)
  12. 系统监视器(Sysmon)工具的使用
  13. 【板栗糖GIS】如何给文件夹批量重命名
  14. 2016年4月21日 21:18:25 我的第一篇博客~
  15. 什么蓝牙耳机打游戏好?打游戏好用的无线蓝牙耳机
  16. Access-VBA
  17. 12306抢票系统的NB解析
  18. spring boot网上购物系统毕业设计源码311236
  19. xp任务栏不显示任务 vbs脚本
  20. 为什么我们要掌握Linux系统编程?

热门文章

  1. 为什么有时打不开爬取到的图片
  2. 直播预告 | AAAI 2022论文解读:基于生成模型的语音/歌声合成与歌声美化
  3. 搞科研,从好好读论文开始:沈向洋带你读论文了
  4. 如何获取高精度CV模型?快来试试百度EasyDL超大规模视觉预训练模型
  5. 超细节!从源代码剖析Self-Attention知识点
  6. 什么是事务、事务的四个特性ACID、不考虑隔离性会导致的三个问题、四种隔离级别
  7. 乘法逆元总结 3种基本方法
  8. java中文 x_java环境url中文参数乱码处理
  9. python初学火车座位判断_Python学习第三课 判断(if)语句
  10. SpringAOP中通过JoinPoint获取值,并且实现redis注解