大数据的相关技术(Technology)

本文主要展示解决海量数据问题的时候使用的技术,注意这是从技术角度进行分析,只是一种思想并不代表业界的技术策略。

常用到的算法策略.

  1. 分治:多层划分、MapReduce
  2. 排序:快速排序、桶排序、堆排序
  3. 数据结构:堆、位图、布隆过滤器、倒排索引、二叉树、Trie树、B树,红黑树
  4. Hash映射:hashMap、simhash、局部敏感哈希

排序

排序:
  将一组无序的集合,根据某个给定的条件,将其变成有序的方法就是排序。从这个我给出的不严谨的定义中排序是方法,目的是让原来无序的集合满足条件有序。
  这里我们基于海量数据的考虑重新思考排序,不会详述每一种排序方法的原理,主要面向的是如何在海量数据情况下使用排序方法。

常用的排序方法:
  插入排序,选择排序,冒泡排序,希尔排序,快速排序,归并排序,堆排序,桶排序,计数排序,基数排序。
下面给出几种排序算法的简单介绍图。
     Screenshot-from-2018-11-05-14-04-03

既然有这么多的排序方法,我们可以直接读取数据到内存中直接调用语言中封装好的排序方法即可。但是数据量很大,不能将数据同时读入内存。
这就出现了所有的外排序,我们可以用归并排序的思想来解决这个问题,也可以基于数据范围用"计数排序"的思想来解决。
排序真的很重要吗?我一直相信一句话:没有排序解决不了的问题。这里给出几个需求,例如:

  • 取最大的k个数,直接降序排序取前k个即可;
  • 推荐、搜索业务,我们也可以直接排序(精度不高)
  • 二分查找之前也要求数据有序

堆排序

在top k中我们用到了一个数据结构堆(有最大堆和最小堆),这里就先介绍一下这个数据结构的性质,基于最大
堆进行介绍。堆是一个完全二叉树,对于任意的节点,我们可以使用数据来表示最大堆,设置下标从0开始, 满足以下性质:

  • root > left && root > right. (左右节点存在)
  • 根节点:root_index; 左孩子节点:left_index; 右孩子节点:right_index
  • left_index = root_index * 2 + 1
  • right_index = root_index * 2 + 2
  • root_index = (*_index - 1) / 2

在堆的数据结构进行增删改查的过程中,我们始终维护堆的数据结构,定义MaxheapFy(int *A, int i)表示维护第i个节点满足最大堆的性质,注意这里没有考虑到泛型编程,正常应该提供一个比较方法的函数,让使用者自己设置比较方式。

从下面的伪代码中,我们可以知道对于一个大小为n的堆,维护一次堆的性质,最坏时间为O(logn),但是必须保证在改变之前,他是满足堆的性质的。

void MaxheapFy(int *A,int i) {
    // i 要在A的范围之内,
    assert(i >= 0);
    assert(i < n) // 堆的大小
    l = LEFT(i), r = RIGHT(i); // 得到左右子节点,如果存在
    now = i;

    // 找到左右孩子的最大值
    if(l<=heapsize&&A[l]>A[now]){
        now=l;//交换A[l]和A[i],并递归维护下一个当前结点now
    }
    if(r<=heapsize&&A[r]>A[now]){
        now=r;//交换A[l]和A[i],并递归维护下一个当前结点now
    }

    if(now != i) { // 交换,递归维护
        swap(A[i], A[now]);
        MaxheapFy(A, now);
    }
}

基于上面的这个维护的性质,我们可以直接对于长度为n的数组建立最大堆,我们知道当只有一个元素的时候,一定满足最大堆的性质,基于这个性质,我们对于长度为n的数组A,从 n / 2向前维护每一个节点的性质,就可以得到最大堆.从下面给出的最大堆的构建代码,我们可以分析建堆的时间复杂度是O(nlogn).因为每次维护是O(logn),维护n次,(这里计算时间复杂度的时候,忽略常数系数)。

void BuildMaxHeap(int *A,int n){//A[1..n]
    heapsize=n;//全局变量,表示最大堆的大小
    for(int i=n/2;i>=1;i--){//从n/2..1维护堆中每个节点的最大堆性质:结点的值大于起孩子的值
        MaxheapFY(A,i);
    }
}

建成最大堆之后,从最大堆的性质我们知道,A[0]一定是最大值,如果要堆A升序排序,就可以swap(A[0], A[n-1]);继续维护A[0],直到堆中只是一个元素,这就完成了堆排序。从这个思路出发,对于top k问题,我们为什么要维护一个最小堆呢,因为我们要过滤所有的数据,保证每次弹出一个最小值,之后剩下的k个一定是top k的最大值,但是这k个不一定有序,如果需要我们可以堆这k进行任何排序,因为我们通过过滤,数据已经很少了,时间复杂度就是从n个中过滤出来k个。首先任选k个构建最小堆, 时间复杂度O(klogk), 用最小堆过滤n-k个数字,每次维护堆的性质,时间O((n-k)logk).总的时间复杂度O(klogk + (n-k)logk)。(注意当k多大时,我们不在使用堆的数据结构,这里留给读者计算)。

void HeapSort(int *A,int n){
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
科技资讯 2016 NO.25 SCIENCE & TECHNOLOGY INFORMATION 信 息 技 术 11 科技资讯 SCIENCE & TECHNOLOGY INFORMATION 大数据[1]一定是人类进入DT时代的关键技术,也将是人类实 现人工智能的关键技术。 自大数据概念[1]提出以来,大数据的重要 性和大数据的开发与使用已经得到各国政府、 各界人士的高度重 视[2-3]。 大数据研究也方兴未艾、 如火如荼地开展起来。 如何开发好 和利用好大数据是摆在所有人面前的一个非常急迫和现实的问 题,笔者在医科院信息所工作中有一些思考,也发表过一些论文 阐述自己的观点,其中 《互联网医学的未来:数据医学》 指出的是 医学大数据应用的未来及方向, 《大数据及其应用前景研究》 论述 的是大数据的二元概念及更适合的应用方向;笔者认为大数据是 个二元概念,一个是大量的数据,一个是大数据技术,文中除了特 别强调外,写到的大数据都是包含以上二元概念。 1 大数据开发应用需要一项新技术 目前大数据应用还处在启蒙和探索阶段,能够成功落地的项 目不多。 大数据是一种以数据为资源的高科技,数据在大数据中 的地位相当重要,其一,拥有资源数据本身就是不容易做到的事 情;其二,拥有资源数据还要有使用数据的想法、 数据目标和数据 技术。 能够拥有以上所述中的一点已经很难了,大数据项目落地 则需要拥有以上两点,这可能也是大数据项目目前落地少的原 因。 需要第一点大数据资源数据的各单位有其各自的解决办法, 这里不讨论获得数据的方法,只谈谈第二点中大数据准确应用的 一些方法。 大数据是人类发展的第五个阶段,第一个阶段:农耕时代;第 二个阶段:工业时代;第三个阶段:电汽时代;第四个阶段:IT时 代;第五个阶段:DT时代;第六个阶段:AI时代-人工智能。 梳理一 下人类发展的进程可以看出,人类的发展是由人力的简单粗放开 始,逐渐发展为机器代替体力,精细的电汽文明逐渐代替简单粗 放工作,解放了人类的双手,随后计算机的发展代替了人脑部分 功能,人类进入了IT时代。 简单看以上人类发展进程:人类科技的 发展是由简单粗放到精细准确,由机器代替人工的进程。 进入DT 时代的大数据技术应该是更精确、 更高级的技术,数字是最精准 的表达方式,数字集合出来的数据也应该是最精准的表达方式, 事实上不是这样简单。 由大量数字或是数据进行运算,可以得到精确结果的方法是 统计学,应该叫做大统计比较好,不是大数据。 2 大数据精准使用需要"数据标识" 2.1 "数据标识" 的原理和方法 人类科技发展是向着更精准、 更智能化的方向发展,DT时代 的大数据是可以满足人类更精准和更智能化的需求。 前面提到目 前大数据落地项目少,尤其能够产生价值的项目少,归纳为不能 很好地使用大数据是相当重要的原因,大数据是数据在模型中准 确应用的科学技术。 好的模型制作相当重要,但数据的理解也非 常重要。 理解好大数据中的数据才能很好地使用数据,才能做好 大数据。 在 《大数据及其应用前景研究》 中笔者写到过数据的理解 是每个人的知识水平决定的。 理解好大数据的数据还要掌握如何 使用数据的技术,这种使用数据的技术是需要把数据精准地放入 大数据模型上在计算机中运行,输入精准数据才能有精准运算结 作者简介:徐立水(1965—),男,汉,北京人,本科,住院医师,CEO,研究方向:大数据研究。 殷亮(1992—),男,汉,吉林磐石人,本科,研究方向:大数据研究。 DOI:10.16661/j.cnki.1672-3791.2016.25.011 大数据技术之一"数据标识" 徐立水1,2 殷亮1 (1.北京医信天下数据技术有限公司 北京 100021;2.中国医学科学院医学信息研究所 北京 100020) 摘 要:DT时代,最重要的是 "大数据" 。 目前,大数据开发和应用正如火如荼地开展,然而真正实现落地的项目并不多见。 大数据现在只呈现的是一个研究热点,迫切需要一种技术实现大数据精准开发应用。 该文通过导入大数据概念,解释大数据包 含的二元概念,分析 "大统计" 与 "大数据" 的区别,引出大数据技术之一 "数据标识" 方法与应用,用以标识人类行为数据和医学 大数据开发应用的方法,文章进一步阐明 "数据标识" 的科学性和准确性,为大数据开发应用指引道路。 大数据是人类行为轨迹 生产出来的数据资源,大数据是关于人的研究,由于物理人体的边界清晰,医学大数据应用或将早于人类行为数据应用的成功, 未来的人工智能离人们不再遥远。 关键词:大数据 大数据技术 医学大数据 数据标识 精准营销 中图分类号:TP39 文献标识码:A 文章编号:1672-3791(2016)09(a)-0011-02 .com.cn. All
大数据技术研究 作者:杨静 来源:《计算机时代》2015年第01期 摘 ;要: 大数据技术是继物联网、云计算技术之后IT业界又一次技术浪潮。为了全面深入地理解 大数据技术的内涵,从大数据的定义及4V特征、关键技术及主要应用领域等四个方面进 行阐述。介绍了大数据的基本概念、特征,总结了大数据的热门应用领域并用典型案例 进行佐证,重点剖析了云计算、Hadoop、数据备份等三大核心技术及关键策略,最后对 大数据应用中滋生的信息安全隐患提出了相应的对策。 关键词: 大数据; 4V特征; Hadoop; 云计算 中图分类号:TP391 ; ; ; ; ;文献标志码:A ; ; 文章编号:1006- 8228(2015)01-13-02 Overview on big data technology Yang Jing (Department of Computer Science, Yunyang Teachers' College, Shiyan, Hubei 442000, China) Abstract: Big data is a new technical wave after the network of things and cloud computing. To understand ;big data technology, the definition and 4V characteristics, the key technologies and main application fields are systematically analyzed in the paper. Through the introduction of the basic conception, characteristics, the main application fields with typical cases are summarized. The core technologies, key strategies of cloud computing, hadoop and data backup are analyzed. The potential information safety risks are pointed out. The countermeasures are given to provide some suggestions and references for wider application and study in the future. Key words: big data; 4V characteristics; Hadoop; cloud computing 0 引言 物联网、云计算等新兴技术的迅速发展开启了大数据时代的帷幕。大数据技术 是指从各种各样的海量数据中,快速获取有价值信息的技术大数据的核心问题就是大 数据技术。目前所说的"大数据"不仅指数据本身的规模大,还包括采集数据的工具、平 台和数据分析系统复杂程度大。大数据的研发目的是发展大数据技术并将其应用到相关 领域,解决实际生产、生活中的各种问题,从而推动信息技术健康地可持续发展。 1 大数据的定义及主要特征 与其他新兴学科一样,目前大数据没有一个统一的标准和定义。一般认为:大 数据是由大量异构数据组成的数据集合,可以应用合理的数学算法或工具从中找出有价 值的信息,并为人们带来经济及社会效益的一门新兴学科。大数据又被称为海量数据、 大资料、巨量数据等,指的是所涉及的数据量规模巨大,以至于无法在合理时间内通过 人工攫取、管理、处理并整理成为人类所能解读的信息。这些数据来自方方面面,比如 社交网络、传感器采集、安防监控视频、购物交易记录等。尽管尚无统一定义,但这些 无比庞大的数据被称为大数据大数据具有如下4V特性[1]: 体量Volume,是指数据存储量大,计算量大; 多样Variety,是指大数据的异构和多样性,比如数据来源丰富,数据格式包括多种不同 形式,如网络日志、音频、视频、图片、地理位置信息等等; 价值Value,是指大数据价值密度相对较低,信息海量,但是要挖掘出真正有价值的数据 难度较大,浪里淘沙却又弥足珍贵; 速度Velocity,是指数据增长速度快,处理速度要求快。 2 大数据技术的应用领域 通过对海量数据进行采集、分析与处理,挖掘出潜藏在数据海洋里的稀疏但却 弥足珍贵的信息,大数据技术正在对经济建设、医疗教育、科学研究等领域产生着革命 性的影响,其所带来的巨大使用价值正逐渐被各行各业的人们所感知。 2.1 金融领域 大数据的火热应用突出体现在金融业,各大互联网企业(谷歌、阿里巴巴等) 纷纷掘金大数据,开创了新

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值