一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对
一个文件,内含一千万行字符串,每个字符串在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以内,要求找出所有相反的串对相关推荐
- Java黑皮书课后题第7章:7.14(计算gcd)编写方法,返回个数不确定的整数的最大公约数。编写一个测试程序,提示用户输入5个数字,调用该方法找出这些数的最大公约数,并显示这个最大公约数
7.14(计算gcd)编写方法,返回个数不确定的整数的最大公约数.编写一个测试程序,提示用户输入5个数字,调用该方法找出这些数的最大公约数,并显示这个最大公约数 题目 题目描述 破题 代码 运行实例 ...
- 牛客网:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
题目描述 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 ...
- python中打开文件时只允许写入的模式是_在open函数中访问模式参数使用()表示打开一个文件只用于写入。(4.0分)_学小易找答案...
[单选题]溢流坝属于( ) [单选题]在重力坝的底部沿坝轴线方向设置大尺寸的空腔,即为( ) [单选题]模式()的用途是打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾.(4.0分) ...
- 基础算法:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
这里要注意的是当数字足够大的时候,我们要使用long long形式的类型,用来记录那个最大值 最大值共有四种情况: 三个正数:数字本身越大则乘积越大 两个负数一个正数:负负得正,所以两个负数最小,之积 ...
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大 java实现
实现该算法主要思想是, 1.两个负数与与一个正数相乘 2.全为最大正数相乘得到最大值 下面用算法实现,时间复杂度为O(n),下面用java实现,不过有一些为0的情况排除下可以,还有一些整形过大可以变为 ...
- 【智力题】有 1000 瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的 药物,最少需要多少只小白鼠?
答案是10只 本题采用了二进制的思想 小白鼠的生与死可以看作二进制的0和1. 用10只小白鼠,也就是10个二进制位,最多可以表示1024个数. 编号环节 先给药水从001到1000编号,每个药水编号转 ...
- python怎样导出py文件_导出python模块(到字符串或py文件)
摘要: 我想要一个'module'类型的变量并导出它.在 我使用import从.py文件导入python模块并对其进行更改.我需要将模块导出回一个文件,或者获取完整模块的字符串表示形式,然后将其写入磁 ...
- linux shell 文件空,linux shell编程 如何判断一个文件是否为空
shell 判断文件/目录是否为空 jfkidear144932015-01-15 shell中如何判断一个变量是否为空 l_nan365492014-07-14 在shell中如何判断一个变量是否为 ...
- sql 算出下级销售总和_找出总和字符串
sql 算出下级销售总和 Description: 描述: This is a standard interview problem to check that the given string is ...
最新文章
- 通过JDBC进行简单的增删改查(以MySQL为例)
- 神策数据张涛:AARRR 模型面临的新挑战
- PHP学习笔记:php二手交易市场系统
- 深入研究.NET Core的本地化机制
- Ubuntu安装sysv-rc-conf配置开机启动服务
- 问题六十一:三次b样条(b-spline)曲线的控制点和曲线形状的对应——以回旋体的“基本曲线”为例
- linux挂载硬盘_玩客云刷机系统之挂载U盘/硬盘增加储存空间
- [Hadoop]Sqoop 1.4.2中文文档(二)之数据导出
- HTML实现简易音乐网站
- 电脑更新后,设备管理器未知USB设备,并且蓝牙无法使用
- 八十九、Java内置函数(常用函数)
- 系统监视器(Sysmon)工具的使用
- 【板栗糖GIS】如何给文件夹批量重命名
- 2016年4月21日 21:18:25 我的第一篇博客~
- 什么蓝牙耳机打游戏好?打游戏好用的无线蓝牙耳机
- Access-VBA
- 12306抢票系统的NB解析
- spring boot网上购物系统毕业设计源码311236
- xp任务栏不显示任务 vbs脚本
- 为什么我们要掌握Linux系统编程?
热门文章
- 为什么有时打不开爬取到的图片
- 直播预告 | AAAI 2022论文解读:基于生成模型的语音/歌声合成与歌声美化
- 搞科研,从好好读论文开始:沈向洋带你读论文了
- 如何获取高精度CV模型?快来试试百度EasyDL超大规模视觉预训练模型
- 超细节!从源代码剖析Self-Attention知识点
- 什么是事务、事务的四个特性ACID、不考虑隔离性会导致的三个问题、四种隔离级别
- 乘法逆元总结 3种基本方法
- java中文 x_java环境url中文参数乱码处理
- python初学火车座位判断_Python学习第三课 判断(if)语句
- SpringAOP中通过JoinPoint获取值,并且实现redis注解