`
ssxxjjii
  • 浏览: 950713 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转载大数据排序 很好的思想

 
阅读更多

算法的力量:位运算在排序与搜索中的应用

楔子: 问题:假设一个文件中有9亿条不重复的9位整数,现在要求对这个文件进行排序。

一般解题思路: 1、将数据导入到内存中 2、将数据进行排序 (比如插入排序、快速排序) 3、将排序好的数据存入文件

难题: 一个整数为4个字节即使使用数组也需要900,000,000 * 4byte = 3.4G内存对于32位系统,访问2G以上的内存非常困难,而且一般设备也没有这么多的物理内存将数据完全导入到内存中的做法不现实。

其他解决办法: 1、导入数据库运算 2、分段排序运算 3、使用bit位运算

解决方案一:数据库排序 将文本文件导入到数据库,让数据库进行索引排序操作后提取数据到文件

优点:操作简单缺点:运算速度慢,而且需要数据库设备。

解决方案二:分段排序 操作方式:规定一个内存大小,比如200M,200M可以记录52428800条记录,我们可以每次提取5000万条记录到文件进行排序,要装满9位整数需要20次,所以一共要进行20次排序,需要对文件进行20次读操作

缺点: 编码复杂,速度也慢(至少20次搜索)

关键步骤:先将整个9位整数进行分段,亿条数据进行分成20段,每段5000万条,在文件中依次搜索0~5000万,50000001~1亿…… 将排序的结果存入文件

解决方案三:bit位操作 思考下面的问题: 一个最大的9位整数为999999999 这9亿条数据是不重复的,可不可以把这些数据组成一个队列或数组,让它有0~999999999(10亿个)元素数组下标表示数值,节点中用0表示这个数 没有,1表示有这个数,判断0或1只用一个bit存储就够了

声明一个可以包含9位整数的bit数组(10亿),一共需要10亿/8=120M内存,把内存中的数据全部初始化 为0 ,读取文件中的数据,并将数据放入内存。比如读到一个数据为341245909这个数据,那就先在内存中找到341245909这个bit,并将bit值 置为1 ,遍历整个bit数组,将bit为1的数组下标存入文件

关键代码 检查是某一个char里面(first)的第second位中存储的数据是否为1

bool CompareBit (unsigned char first, int second)

 {

const static int mark_buf[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};

if (second > 8) return false;

return (first & mark_buf[second]) == mark_buf[second];

 }

将某一个char(Desc)中的第source位置为1

bool WriteToBit (unsigned char *Desc, int source)

{

const static int mark_buf[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};

if (source > 8) return false;

Desc[0] |= mark_buf[source];

return true;

}

案例 在某个项目中,我们需要对2亿条手机号码删除重复记录(过滤号码黑名单同样有效)

工作难点就在于如何处理这2亿条电话号码,直接用哈希表存放手机号码不大现实,即使经过优化,用一个unsigned int存放一条记录,那也得需要2亿*4=8亿byte,远超过32位系统的寻址能力

解决方案: 将电话号码由12位单个数字组成的字符串转换为一个unsigned int型数据(这个完全可能,手机号码由前三位数字和后面八位数字组成,后面八位需要占到1~1000万的空间,而前面用0~100的数字存储已经足够) ,为简单起见,默认为0~4G的数字都有可能分布号码,为此我们分配4G/32=512M的内存,将这2亿个号码整理成unsigned int类型后按上述办法存放在这块内存中(比如13512345678我们整理后为112345678,我们找到内存中112345678bit的下标, 并将此bit值设为1) ,遍历整个bit数组,记录下所有的号码,这些号码即是不重复的手机号码

总结 建立一个足够大的bit数组当作hash表,以bit数组的下标来表示一个整数,以bit位中的0或1来表示这个整数是否在这个数组中存在,适用于无重复 原始数据的搜索,原来每个整数需要4byte空间变为1bit,空间压缩率为32倍,扩展后可实现其他类型(包括重复数据)的搜索

注意 由于操作系统和编程语言本身的限制,有可能内存足够,但无法分配一块连续大内存的情况,这样的话可以申请多块稍微小一点的内存,然后用链表或其他的方式连接起来使用

发现这个思想用来排重比较好,是一个不错的想法.

分享到:
评论

相关推荐

    大数据背景下高校思想政治教育面临的问题与创新.pdf

    现代教育强调个性化教育,通过大数据,教师能够更好地理解学生的需求,改变教学模式,实现个性化、科学化的教育和管理。 6. 培育教师综合素养:大数据时代要求思想政治教育工作者不仅要有扎实的专业知识,还要具备...

    大数据支撑下高校思想政治教育的精准化变革研究.pdf

    大数据支撑下高校思想政治教育的精准化变革研究.pdf

    大数据学习资料全排序二次排序

    "大数据学习资料全排序二次排序"这个主题,显然关注的是如何有效地对大规模数据进行排序,尤其是涉及到二次排序的概念。二次排序通常是指在第一次排序的基础上,根据另一个或多个字段进行第二次排序,以满足更复杂的...

    大数据背景下高校思想政治教育精准化研究综述.pdf

    在大数据时代的背景下,高校思想政治教育的精准化研究逐渐成为一个重要议题。随着数据挖掘技术的发展和应用,如何有效地利用大数据进行高校思想政治教育的精准化,已成为学术界和教育工作者面临的重要课题。 首先,...

    浅谈大数据时代下高校思想政治教育创新研究.docx

    浅谈大数据时代下高校思想政治教育创新研究.docx

    大数据助力高校网络思想政治教育创新的路径研究.pdf

    大数据技术在当前时代背景下,已经成为促进高校网络思想政治教育工作创新发展的重要手段。在大数据技术的支持下,高校可以有效提高思政教育的质量,推动教育内容和形式的创新,实现个性化教学和精准化管理。 首先,...

    大数据时代的高校思想政治教育网格机制研究

    大数据时代对高校思想政治教育的环境和主体、客体都产生了深刻的影响,并发生了显著的变化。传统的思想政治教育理念、技术手段已逐渐跟不上大数据时代的发展形势。紧跟时代步伐、把握机遇、迎接挑战、再造高校思想...

    大数据时代高校思想政治教育探究.pdf

    随着信息技术的飞速发展,大数据时代的到来为高校思想政治教育带来了前所未有的机遇和挑战。大数据时代不仅促进了信息的海量增长,也深刻地改变了传统的数据处理和分析方式,这使得高校在实施思想政治教育的过程中...

    基于大数据技术的思想政治教育新思路.pdf

    通过大数据技术,教师能够更好地了解学生的想法,实施有效的监测和分析,为学生提供个性化的教育,推动其个性健康发展。 其次,大数据技术在高校思想政治教育中的优势主要体现在三个方面: 1. 丰富思想政治教育...

    基于大数据背景下高校思想政治教育课程新路径分析.docx

    基于大数据背景下高校思想政治教育课程新路径分析 一、大数据的内涵 大数据是指海量数据和大数据处理技术的有效结合,通过大数据处理技术对海量数据进行分析,可以获取具有较高价值的产品和服务。大数据的产生是...

    以大数据助力思想政治教育创新——第五届“大数据与思想政治教育创新”学术论坛综述.pdf

    例如,通过分析学生的网络行为数据,可以更好地理解学生的思想状态和需求,从而提供更为精准的教育服务。此外,区块链技术的引入,以其不可伪造、全程留痕、可追溯等特点,为构建诚信的数据环境提供了技术支持。 第...

    新时代大数据融入高校思想政治教育的路径研究.pdf

    通过全面整合和分析大数据资源,不仅可以推动思想政治教育模式的创新,还可以提升教育质量,更好地实现立德树人的根本任务,培养出适应时代发展的高素质人才。然而,这一过程中也需要高校、教育者和学生共同努力,...

    大数据思维下网络思想政治教育平台构建.docx

    为了更好地适应这一趋势,文章着重探讨了如何借助大数据技术来构建网络思想政治教育平台。文章首先强调了大数据思维在平台建设中的重要价值,并在此基础上提出了一系列具体的构建策略。 #### 关键词 - 大数据思维 ...

    大数据时代下企业思想政治工作机遇挑战及对策建议思考.doc

    大数据时代下企业思想政治工作机遇挑战及对策建议思考.doc大数据时代下企业思想政治工作机遇挑战及对策建议思考.doc大数据时代下企业思想政治工作机遇挑战及对策建议思考.doc大数据时代下企业思想政治工作机遇挑战及...

    大数据时代高校网络思想政治教育分析.pdf

    然而,现实中很多高校的思政教育仍停留在传统的灌输式教学模式,缺乏对学生思想动态的深入了解和对教育内容的创新设计,教育方式亟需更新。其二,大数据时代的信息传播速度快、范围广,网络思政教育的主客体关系趋向...

    大数据时代的网络思想政治教育.docx

    大数据时代的网络思想政治教育正在经历深刻的变革,随着信息技术的飞速发展,网络已成为人们获取信息、交流思想的主要途径,同时也成为了思想政治教育的新战场。大数据技术的应用为网络思想政治教育提供了丰富的资源...

    大数据时代对高校思想政治教育工作的影响.docx

    通过充分利用大数据资源,高校可以在提升思想政治教育效果的同时,更好地服务于学生的发展需求。然而,这一过程也需要教育工作者不断学习新技能、探索新模式,并在实践中不断完善工作方法,最终实现思想政治教育的...

    大数据时代下企业思想政治工作的开展.docx

    他们不仅需要掌握思想政治工作的理论与方法,还需要具备数据分析和解读的能力,以便更好地运用大数据工具。此外,数据安全和隐私保护也是企业需要关注的问题,如何在尊重员工隐私的同时,合理合法地利用数据进行思政...

    大数据时代高职院校思想政治教育创新实践分析.docx

    为了更好地利用大数据技术,高职院校应着重提升数据收集和分析的时效性。具体做法包括但不限于: - 定期收集学生的学习、生活等方面的数据,并及时更新数据库。 - 利用数据分析工具对收集到的数据进行快速处理,...

    大数据思维在高校思想政治教育中的融入研究.docx

    特别是对于高校思想政治教育而言,大数据思维不仅为其带来了改革的新视角,也为其注入了新的活力与方法。本文旨在深入探讨大数据思维在高校思想政治教育中的融入优势、潜在问题以及相应的解决方案。 大数据思维在...

Global site tag (gtag.js) - Google Analytics