精华内容
下载资源
问答
  • 这张图表显示了上面讨论的四个数据测量的压缩率,加上各自重复数据所占的百分比这一系列的吞吐。 Gorilla压缩的吞吐从120到440Mb/S不等,平均速度为180MB/S。我们的Scalar实现算法最低的吞吐压缩速度...

    原文:The World’s First Middle-Out Compression for Time-series Data—Part 1
    作者:Vaclav Loffelmann
    翻译:无阻我飞扬

    摘要:文章对缘起于HBO热门喜剧《硅谷》中虚拟的压缩算法给出了现实版,从Middle-Out算法压缩的特点、工作原理、压缩比和压缩性能等方面,讲述了这种算法压缩的优势,以下是译文。

    Middle-Out算法压缩不再是HBO的热门喜剧《硅谷》里虚构的发明。在电视节目和新的向量指令集的启发下,我们提出了一种新的时序数据的无损压缩算法。压缩一直是关于速度和压缩比之间的一种折衷,当然也要在压缩和解压之间找到平衡,平衡这些权衡是很不容易的,但整个middle-out算法思想使得我们能够进一步推进Weissman score 这个衡量标准。

    这里写图片描述

    Middle-out压缩有什么特别之处?

    它仅是打破数据的相关性。对于其它算法,如果需要一个先前的值来计算当前的值,我们需要 所有以前的值。但是Middle-out压缩算法从块的多个位置开始处理,它只依赖于这个片段中的先行值。所以说,这就使得我们能够有效地利用SIMD指令。

    它是如何工作的呢?

    原理上,该算法计算新值和前值的异或。这样可以获得两个值之间的一种差异,我们可以单独存储这种差异。在时序数据集中,这种差异通常有一些前导零异或以零拖尾。因此,我们需要存储的信息通常是极小的,但是我们也需要存储前导零个数和非零异或片段的长度。

    这些思路通常用于当前的压缩算法,例如, Facebook’s Gorilla [1]。为了压缩效率,Gorilla以比特级别操作,但这些操作极具扩展性。我们设计的压缩要尽可能的快,所以变比特为字节颗粒度。因而,人们预期压缩比会更糟糕,但情况并非总是如此。

    关于middle-out算法,压缩操作以数据块为级别,但这不是问题,因为时序数据库使用块存储。

    压缩比如何?

    让我们来看看两种不同情况下的压缩比。第一种情况——我们采取一连串的一点一点的增加(即0.1,0.2,0.3,…)并依据重复点的部分来衡量压缩比。为了进行比较,我们使用Facebook’s Gorilla算法压缩。默认情况下,Gorilla对时序数据值和时序数据的时间戳都进行压缩。为了达到我们测试的目的,时间戳压缩被禁用。
    这里写图片描述

    毫不奇怪地发现,对于这些类型的数据,Gorilla有更好的压缩比。我们可以看到长整数序列有相同的趋势。

    第二种情况——数据集。数据集A和B共享同一分钟的股票数据。就数据集A来说,价格点压缩为浮点数。在数据集B中,这些数字都是先乘以小数点后位数,因此我们可以将这些数字看成长整数而不会失去精度。
    这里写图片描述

    数据集C和D由来自InfluxData [2]的基准工具生成:代表磁盘写入和redis内存使用。就数据集A来说,Gorilla算法压缩数据略好于我们的算法——压缩比分别为1.45和1.3。其它的数据集使用整数,用我们的新算法可以更好的压缩。在数据集D中,可以看到最大的差异,用Middle-out算法的压缩比是3.3。而Gorilla算法压缩这些数据的压缩比仅有1.84。压缩比很大程度上取决于数据的输入,而且有些数据集很明显,其中一种算法要比另外一种算法压缩的更好。但是如果你关心性能——请继续阅读。

    压缩性能

    目前我们有两个兼容的实现算法。一个是利用在Skylake-X CPU上可用的一种新的avx-512指令集。第二种实现目标是计算机不支持这个指令集。

    吞吐量是衡量在一个以2.0G赫兹运行的单核Skylake-X CPU性能的标准。

    下面的图表显示了这两种实现方式的压缩和解压速度,与Facebook’s Gorilla算法进行比对。
    这里写图片描述

    这张图表显示了上面讨论的四个数据集上测量的压缩率,加上各自重复数据所占的百分比这一系列的吞吐量。

    Gorilla压缩的吞吐量从120到440Mb/S不等,平均速度为180MB/S。我们的Scalar实现算法最低的吞吐量压缩速度大约是650MB/S,因为有50%的重复值。

    这是由于高分支误预测率引起的。Scalar算法的平均压缩速度为1.27GB/s。因为一个使用向量指令的算法不会受分支误预测的影响,avx-512算法压缩数据速度从2.33 GB/s到 2.59 GB/s不等,平均速度为2.48 GB/s。对于一个单核2G赫兹的芯片来说,这速度不算差。

    这里写图片描述

    Gorilla算法解压这些数据的速度范围在100 MB/s 到430 MB/s 之间.但正如你所看到的,我们对相同数据的解压甚至比压缩更快。非向量化的解压以最小速度为2.36 Gb /s运行,平均速度为2.7 GB/s。向量化程序[代码]以2.54 GB/s的速度解压数据,在数据集D中,速度甚至高达4.86 GB/s。

    压缩的平均整体增速是6.8倍(Scalar执行)和13.4倍(向量化执行)。各自的平均解压增速是16.1倍和22.5倍。

    听起来很有趣?

    如果想在你的产品中使用这种压缩算法,请给我们发邮件:info@schizofreny.com
    或者如果你是开源维护者,那么有一个好消息告诉你:我们正计划我们的压缩算法可用于开源项目。

    关于我们

    我们Schizofreny致力于提高性能,我们相信极限会被进一步放大。我们喜欢挑战,是来帮助大家做高性能计算问题的。

    [1] www.vldb.org/pvldb/vol8/p1816-teller.pdf
    [2] https://github.com/influxdata/influxdb-comparisons/

    展开全文
  • 各个组织和机构竞相构建数据驱动的文化精神,同时也在数据驱动的应用程序开展了大量创新。这些应用程序重塑了我们生活的许多方面,从我们工作的方式到我们被医学诊疗的方式。然而,数据的价值还远没有得到充分利用...

    我们正处于数据变革的早期阶段。各个组织和机构竞相构建数据驱动的文化精神,同时也在数据驱动的应用程序上开展了大量创新。这些应用程序重塑了我们生活的许多方面,从我们工作的方式到我们被医学诊疗的方式。然而,数据的价值还远没有得到充分利用,创新的速度还可以大大提高。我们认为这其中遗失的关键拼图就是数据编排层。

    为了让应用程序高效地访问数据,应用往往需要重新发明轮子,这阻碍了当前的创新步伐。当一个工程师或科学家想要编写一个应用程序来解决问题时,他或她需要花费大量的精力让应用程序高效地访问数据,而不是专注于算法和应用程序的逻辑。这体现在许多场景中:例如,当开发人员希望将应用程序从内部环境迁移到云环境中,或者一个写过Apache Spark应用程序的数据科学家打算编写TensorFlow应用程序等等。事实上,每当应用程序框架、存储系统或部署环境(云或内部环境)发生更改时,开发人员就需要重新设计数据访问方式。独立扩展计算和存储的趋势、对象存储的兴起、混合云和多云的日益流行,这些都进一步加剧了数据访问方面的挑战。

    许多人试图通过创建新型的存储系统、先进的计算框架或全新的技术栈来解决与数据访问相关的挑战。然而,历史表明,每隔5到10年,就会出现另一批新的存储系统和计算框架,这并不能从根本上解决数据访问方面的挑战。以存储为例,每个新的存储系统都成为数据环境中的另一个数据筒仓。创建新应用程序或新栈的方法也是如此。

    在Alluxio中,我们认为,为了从根本上解决数据访问的挑战,数据世界需要全新一层,我们称之为“数据编排平台”,架构在计算框架和存储系统之间。数据编排平台跨存储系统将数据访问抽象出来,虚拟化所有数据,并通过具有全局命名空间的标准化API将数据呈现给数据驱动的应用程序。同时,它还应该具有缓存功能,以支持快速访问热数据。总之,数据编排平台为数据驱动的应用程序提供了数据可访问性、数据本地性和数据可伸缩性(https://www.alluxio.io/data-orchestration/)。
    在这里插入图片描述

    做一个类比,数据编排之于数据,就像容器编排之于容器一样。容器编排是一类技术,它使容器能够在任何环境中运行而不受正在运行的应用程序硬件的影响,并确保应用程序按预期运行。类似地,数据编排也是一种技术,它使应用程序的运行能够与计算无关、与存储无关和与云无关。
    现在,基于数据编排平台,应用程序开发人员就可以假设数据随时可以访问,而不需要关注数据驻留在何处或存储的特性如何,并将重点放在编写应用程序上。

    除了向应用程序开发人员授权外,数据编排平台还为基础设施工程师带来了巨大的价值。它通过在基础设施层为组织机构提供灵活性来避免被某一家供应商绑死。在不同的存储系统(包括云存储)之间进行转换、采用另一个应用程序框架,甚至采用一个混合或多云环境都是可行的,并且不会带来很大的开发成本。在以后的博客中,我们将从这些角度来详细地讨论数据编排的需求和影响。

    总之,我们认为,数据编排是数据世界中遗失的拼图。Alluxio是一个数据编排平台的实现,我们诚邀大家加入我们,共创未来!

    展开全文
  • 运动世界校园破解刷跑步数据

    万次阅读 多人点赞 2019-05-28 18:56:23
    运动世界的跑步规则,大家应该都很熟悉了,在选择目标距离后,在地图回“随机”给出多个待检测点,而在这些点中,你必须要经过几个,路线随意,这样才完成了跑步评测的第一步。而在跑步结束后,软件还会计算你的...

    注意:实验阶段的切勿使用个人账号进行刷数据,以免被视为作弊。

     

    截获请求负载信息

    运动世界的跑步规则,大家应该都很熟悉了,在选择目标距离后,在地图上回“随机”给出多个待检测点,而在这些点中,你必须要经过几个,路线随意,这样才完成了跑步评测的第一步。而在跑步结束后,软件还会计算你的跑步平均速度,如果偏差太大(过快或过慢)也不会记录成为有效成绩。

    分别对设置目标距离产生随机点上传数据三个请求进行了抓包,其结果如下:

    设置目标点 及 产生随机点

    POST http://gxapp.iydsj.com/api/v2/campus/901/get/1/distance/3 
    Host: gxapp.iydsj.com
    uid: 47881
    Accept: */*
    Authorization: Basic MTRwXBd3MjU1MzU6MTk5NzAyLjZXWGz=
    Proxy-Connection: keep-alive
    osType: 1
    appVersion: 1.2.0
    Accept-Language: zh-Hans-CN;q=1
    Accept-Encoding: gzip, deflate
    Content-Type: application/json
    DeviceId: FC139628-F5F6-423A-ADBF-C8E310FCB713
    CustomDeviceId: FC139628-F5F6-423A-ADBF-C8E310FCB713_iOS_sportsWorld_campus
    Content-Length: 45
    User-Agent: SWCampus/1.2.0 (iPhone; iOS 9.3.4; Scale/3.00)
    Connection: keep-alive
    json: {"longitude":103.991842,"latitude":30.766178}

    数据上传

    POST http://gxapp.iydsj.com/api/v2/users/47881/running_records/add 
    Host: gxapp.iydsj.com
    uid: 47881
    Accept: */*
    Authorization: Basic MTRwXBd3MjU1MzU6MTk5NzAyLjZXWGz=
    Proxy-Connection: keep-alive
    osType: 1
    appVersion: 1.2.0
    Accept-Language: zh-Hans-CN;q=1
    Accept-Encoding: gzip, deflate
    Content-Type: application/json
    DeviceId: FC139628-F5F6-423A-ADBF-C8E310FCB713
    CustomDeviceId: FC139628-F5F6-423A-ADBF-C8E310FCB713_iOS_sportsWorld_campus
    Content-Length: 89183
    User-Agent: SWCampus/1.2.0 (iPhone; iOS 9.3.4; Scale/3.00)
    Connection: keep-alive
    
    json: {"totalDis":3.24,"sportType":1,"speed":12,"fivePointJson":"{"useZip" : false, "fivePointJson" : "[{"flag":"1476258220000","isPass":true,"lat":"30.772452","lon":"103.988141","isFixed":"0"},
    {"flag":"1476258220000","isPass":true,"lat":"30.769404","lon":"103.991393","isFixed":"0"},{"flag": ...
    
    // 数据量过大,部分显示

    从格式上来看,很容易就能猜到这是个 Base64 转码方式。于是使用 Base64 解码方式将其转回,发现了具有如下规则:

    Basic [username]:[passward]

     

    进行跑步数据的处理及分析

    展示一个接近完整的跑步数据:

    {
    	"totalDis":3.24,
    	"sportType":1,
    	"speed":12,
    	"fivePointJson":
    		"{
    			"useZip" : false,  
    			"fivePointJson" : 				
                "[{
    				"flag":"1476258220000",
    				"isPass":true,
    				"lat":"30.772452",
    				"lon":"103.988141",
    				"isFixed":"0"
    			},
    			{
    				"flag":"1476258220000",
    				"isPass":true,
    				"lat":"30.769404",
    				"lon":"103.991393",
    				"isFixed":"0"
    			},
    			{
    				"flag":"1476258220000",
    				"isPass":true,
    				"lat":"30.768566",
    				"lon":"103.989982",
    				"isFixed":"0"
    			},	
    			{
    				"flag":"1476258220000",
    				"isPass":false,
    				"lat":"30.774981",
    				"lon":"104.000061",
    				"isFixed":"0"
    			},
    			{
    				"flag":"1476258220000",
    				"isPass":true,
    				"lat":"30.775152",
    				"lon":"103.990113",
    				"isFixed":"1"
    			}]"}",
    		"selDistance":3,
    		"unCompleteReason":4,
    		"allLocJson":
    		"{
    			"useZip" : false,  
    			"allLocJson" : 		
    			"[{
    				"speed":"0",
    				"id":"1",
    				"pointid":"1",
    				"radius":"65.000000",
    				"gaintime":"1476258220000",
    				"createtime":"",
    				"modifytime":"",
    				"type":"5",
    				"totaldis":"0",
    				"lat":"30.766170",
    				"flag":"1476258220000",
    				"avgspeed":"0",
    				"totaltime":"2.000000",
    				"lng":"103.991934",
    				"locationtype":"0"
    			},
    			....,
    			{
    				"speed":"0",
    				"id":"294",
    				"pointid":"294",
    				"radius":"10.000000",
    				"gaintime":"1476260686000",
    				"createtime":"",
    				"modifytime":"",
    				"type":"6",
    				"totaldis":"3241",
    				"lat":"30.766135",
    				"flag":"1476258220000",
    				"avgspeed":"0",
    				"totaltime":"2159.000000",
    				"lng":"103.992010",
    				"locationtype":"0"
    			}]
    		"}",
    	"complete":true,
    	"startTime":1476258220000,
    	"stopTime":1476260686000,
    	"totalTime":2466
    }

    这里仍然省略了大量的跑步打点数据,因为实在是太多。根据 json 数据每个属性的名字,我们能猜出个大概。而且在最外层数据中,我们发现 :totalDisspeed 、 fivePointJson 、 complete 、 startTime 、 stopTime 、 totalTime 这几个属性,对于所有的数据处理,都是在 client 端进行的,而后台的服务器仅仅提供了数据库的记录作用。

    经过几组数据的测试,我们发现在 server 端,仅仅对当次提交的 speed 数据进行判断,而 speed 数据居然没有经过 totalTime 和 totalDis 的验证而后两者仅仅是用来在 client 端起显示作用

    而对于 startTime 和 stopTime 两个属性,自然就能猜测到这是系统默认生成的当前时间的时间戳,从末尾的三个0就可以暴露出它设置成为毫秒级别。

    我们再来看 fivePointJson 这个属性的结构:

    "flag":"1476258220000",
    "isPass":true,
    "lat":"30.775152",
    "lon":"103.990113",
    "isFixed":"1"

    flag 自然也是时间戳,并且可以惊讶的发现他与 startTime 相同。而是否通过,仅仅使用了 isPass 这个布尔值来记录。实在是令人无语,于是我将数据保存下来,进行一次虚假提交,不出意外增加了一次新的记录。

    但是知道了这些,我们还是无法解决一个重要的问题,即跑步路径坐标。并且在我的提交尝试中,如果跑步路径的 json 格式提交错误,就会造成在 client 端无法显示跑步路线的问题。由于这个 app 使用了百度地图第三方sdk,所以我的第一想法是通过百度地图路径规划功能,从一条路径中取点进行构造 route。可是在构造的时候会遇到很多问题,比如取点的距离与跑步速度不统一等。

    而在 app 中会有一个 约跑功能 ,我们可以看见他人的跑步路线。因此我们打算采取偷梁换柱的方式,将他人跑步数据进行抓取,进而修改成自己此时的信息及时间戳即可。

    约跑请求

    {
    	"error":10000,
    	"message":"成功",
    	"data":
    	{
    		"roomInfoModel":
    		{
    			"beginTime":"2016-10-21 20:17:13",
    			"endTime":"2016-10-21 20:44:42",
    			"distance":3.0,
    			"locDesc":"人体机能实验室",
    			"finishNum":2
    		},
    		"roomersModelList":
    		[{
    			"finished":true,
    			"uid":57446,
    			"unid":901,
    			"icon":
    			"http://imgs.gxapp.iydsj.com/imgs/d30a0bff-1b20-4504-91b9-49ae65ada0a6.jpeg",
    			"sex":1,
    			"name":"杨xx",
    			"endTime":"2016-10-21 20:44:42",
    			"points":"{...}"
    		},
    		{
    			"finished":true,
    			"uid":57276,
    			"unid":901,
    			"icon":"http://imgs.gxapp.iydsj.com/imgs/null",
    			"sex":0,
    			"name":"李x",
    			"endTime":"2016-10-21 20:44:42",
    			"points":"{...}"
    		},...
    		]
    	}
    }

    为了保护隐私,我没有展示完整姓名。从获取到的数据中,我们发现 points 的格式与我们想要的跑步路线是完全一致的。因此我们对其进行数据解析,并处理时间戳生成我们所需要的数据。进而再将处理过后的数据进行整合,通过上传数据接口对个人用户进行认证,制造一条近乎完美的跑步数据出来。

    信息泄露问题

    我大概可以猜测一下,每个需要跑步的学校都会收到比以往多的多的垃圾短信。因为在约跑记录网络接口中,可以能够获取到每个用户的真实姓名、性别、头像,这是极其严重的个人信息泄露

    在斥责 app 制作公司的同时,也提醒广大童鞋多加注意个人隐私的保护,提高个人信息的安全意识,在有法却无严厉监管的环境下我们只有自我提高。(这实属无奈之举)

    展开全文
  • 当今世界最为经典的十大算法--投票进行时

    万次阅读 热门讨论 2011-03-07 10:03:00
    内容说明:I、 本文原名为:当今世界最受人们重视的十大经典算法,后改为如上题目。II、本文分为俩部分: 第一部分、来自圣经的十大算法:为某网友票选出来的十个来自圣经的算法。 第二部分、当今世界最为经典的...

                         当今世界最为经典的十大算法--投票进行时

     

    作者:July、
    时间:二零一一年三月七日。
    参考:十三个经典算法研究与总结、目录+索引,本人第一大原创作品。

    内容说明:
    I、 本文原名为:当今世界最受人们重视的十大经典算法,后改为如上题目。
    II、本文分为俩部分:
        第一部分、来自圣经的十大算法:为某网友票选出来的十个来自圣经的算法。
        第二部分、当今世界最为经典的十大算法--投票进行时:是恳请本文的读者为您心目中当今世界最为经典的算法投上一票,最终在本BLOG内票选产生当今世界最为经典的十大算法(投票截止日期,三年后的此刻,即二零一四年三月七日)。非常感谢大家。
    ----------------------------------------

     

    第一部分、来自圣经的十大算法

        当今世界,已经被发现或创造的经典算法数不胜数。如果,一定要投票选出你最看重的十大算法,你会作何选择列?有国外网友在StackExchange上发起过投票,让人们投票选出心目中最为经典的算法,最终产生了下面得票数最高的十大经典算法(投票数统计截止到2011年3月7日):

    第十名:Huffman coding(霍夫曼编码)
        霍夫曼编码(Huffman Coding)是一种编码方式,是一种用于无损数据压缩的熵编码(权编码)算法。1952年,David A. Huffman在麻省理工攻读博士时所发明的,并发表于《一种构建极小多余编码的方法》(A Method for the Construction of Minimum-Redundancy Codes)一文。


    第九名:Binary Search (二分查找)
        在一个有序的集合中查找元素,可以使用二分查找算法,也叫二分搜索。二分查找算法先比较位于集合中间位置的元素与键的大小,有三种情况(假设集合是从小到大排列的):
        1.键小于中间位置的元素,则匹配元素必在左边(如果有的话),于是对左边的区域应用二分搜索。
        2.键等于中间位置的元素,所以元素找到。
        3.键大于中间位置的元素,则匹配元素必在右边(如果有的话),于是对右边的区域应用二分搜索。
    另外,当集合为空,则代表找不到。


    第八名:Miller-Rabin作的类似的试验测试
        这个想法是利用素数的性质(如使用费马大定理)的小概率寻找见证不数素数。如果没有证据是足够的随机检验后发现,这一数字为素数。


    第七名:Depth First Search、Breadth First Search(深度、广度优先搜索)
        它们是许多其他算法的基础。关于深度、广度优先搜索算法的具体介绍,请参考此文:教你通透彻底理解:BFS和DFS优先搜索算法


    第六名:Gentry's Fully Homomorphic Encryption Scheme(绅士完全同态加密机制)算法。
        此算法很漂亮,它允许第三方执行任意加密数据运算得不到私钥(不是很了解)。


    第五名:Floyd-Warshall all-pairs最短路径算法
        关于此算法的介绍,可参考我写的此文:几个最短路径算法比较(http://blog.csdn.net/v_JULY_v/archive/2011/02/12/6181485.aspx)。
    d[]: 二维数组. d[i,j]最小花费、或最短路径的邻边。

    for k from 1 to n:
      for i from 1 to n:
        for j from 1 to n:
          d[i,j] = min(d[i,j], d[i,k] + d[k,j])

     

    第四名:Quicksort(快速排序)
        快速排序算法几乎涵盖了所有经典算法的所有榜单。它曾获选二十世纪最伟大的十大算法(参考这:细数二十世纪最伟大的10大算法)。关于快速排序算法的具体介绍,请参考我写的这篇文章:一之续、快速排序算法的深入分析,及十二、一之再续:快速排序算法之所有版本的c/c++实现


    第三名:BFPRT 算法
        1973 年,Blum、Floyd、Pratt、Rivest、Tarjan一起发布了一篇名为 “Time bounds for selection” 的论文,给出了一种在数组中选出第k大元素平均复杂度为O(N)的算法,俗称"中位数之中位数算法"。这个算法依靠一种精心设计的 pivot 选取方法,即选取中位数的中位数作为枢纽元,从而保证了在最情况下的也能做到线性时间的复杂度,打败了平均O(N*logN)、最坏 O(n^2) 复杂度的快速排序算法。

        事实上,这个所谓的BFPRT,就是本blog中阐述过的快速选择SELECT算法,详情请参考下列博文:第三章、寻找最小的k个数十四、快速选择SELECT算法的深入分析与实现。在我的这两篇文章中,给出了此快速选择SELECT算法,借助选取数组中中位数的中位数作为枢纽元,能做到最坏情况下运行时间为O(N)的复杂度的证明。

        我在这里简单介绍下在数组中选出第k大元素的时间复杂度为O(N)的算法:
        类似快排中的分割算法:

    每次分割后都能返回枢纽点在数组中的位置s,然后比较s与k的大小
    若大的话,则再次递归划分array[s..n],
    小的话,就递归array[left...s-1] //s为中间枢纽点元素。
    否则返回array[s],就是partition中返回的值。 //就是要找到这个s。

    找到符合要求的s值后,再遍历输出比s小的那一边的元素。

        各位还可参考在:算法导论上,第九章中,以期望线性时间做选择,有寻找数组中第k小的元素的,平均时间复杂度为O(N)的证明。原程序随机选取数组中某一元素作为枢纽元,最后可证得程序的期望运行时间为O(n),且假定元素是不同的。


    第二名:Knuth-Morris-Pratt字符串匹配算法
        关于此算法的介绍,请参考此文:六、教你从头到尾彻底理解KMP算。KMP算法曾经落选于二十世纪最伟大的十大算法,但人们显然不能接受,如此漂亮、高效的KMP算法竟然会落选。所以,此次最终投票产出生,KMP算法排到了第二名。


    第一名:Union-find

        并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,并就是按一定顺序将属于同一组的元素所在的集合合并。并行查找,最终占据了此份榜单的第一名。

        补充:前三名的投票数,只相差4票,8票。所以这个排名日后还会不断有所变化。但不管最终结果怎样,这前十名的算法已经基本敲定了。
        原投票网址http://cstheory.stackexchange.com/questions/189/algorithms-from-the-book

     

    第二部分、当今世界最为经典的十大算法--投票进行时
     
        怎么样,上文那些投票产生出来的来自圣经的算法,你是否熟悉?或者,如果要您选出您心目中,当今世界最为经典的十大算法,您肯定也、绝对不一定认同上述十个所谓来自圣经的算法便是当今世界最为经典的十大算法,对吧?ok,那么,现在,我给你一个投票权,你会把票投给哪一个算法列?好的,咱们也来一次投票吧,请把你的意见,决定权写在本文下面的评论里。

        我把已经产生的前十名的算法,再写在下面,方便投票(投票截止日期:三年后的今天,即二零一四年三月七日):

    、Huffman coding(霍夫曼编码)。
    、Binary Search (二分查找)。
    、Miller-Rabin作的类似的试验测试。
    、Depth First Search(深度优先搜索)。
    、绅士完全同态加密机制
    、Floyd-Warshall all-pairs最短路径算法。
    、Quicksort(快速排序)。
    、BFPRT 算法。
    、Knuth-Morris-Pratt字符串匹配算法。
    、Union-find。

    为了让大家有更多的选择,我再贴出其它几种同样经典但暂时未能排进上述榜单前十名的候选算法:

    十一、Cooley-Tukey FFT算法。快速傅里叶变换算法。关于傅里叶变换算法的介绍,请参考此文:十、从头到尾彻底理解傅里叶变换算法、上,及十、从头到尾彻底理解傅里叶变换算法、下

    十二linear programming,线性规划。

    十三Dijkstra 算法。与上第五一样,又一种最短路径算法。具体介绍,请参考:二之续、彻底理解Dijkstra算法,和二之再续、Dijkstra 算法+fibonacci堆的逐步c实现,及二之三续、Dijkstra 算法+Heap堆的完整c实现源码

    十四Merge Sort。归并排序。
    十五Ford–Fulkerson算法。网络最大流算法。
    十六辗转相除法
          在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法,即求两个正整数之最大公因子的算法。此算法作为TAOCP第一个算法被阐述,足见此算法被重视的程度。它是已知最古老的算法, 其可追溯至3000年前。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。扩展的辗转相除法则构造性地证明了,对任意整数a和b ,存在一对x、y使得 ax + by = gcd(a, b) 。

    十七RSA加密演算法。一种加密算法,日后再做详细介绍。
    十八遗传算法。可参考本人写的关于GA 算法的这篇文章:七、遗传算法 透析GA本质

    十九最大期望(EM)算法
        此算法入选数据挖掘领域十大经典算法。在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。最大期望经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在 E 步上求得的最大似然值来计算参数的值。M 步上找到的参数估计值被用于下一个 E 步计算中,这个过程不断交替进行。

    二十、数据压缩
        数据压缩是通过减少计算机中所存储数据或者通信传播中数据的冗余度,达到增大数据密度,最终使数据的存储空间减少的技术。数据压缩在文件存储和分布式系统领域有着十分广泛的应用。数据压缩也代表着尺寸媒介容量的增大和网络带宽的扩展。

    二十一、Hash函数
        Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。关于hash表的详细阐述,请参考此篇文章:十一、从头到尾彻底解析Hash表算法

    二十二、Dynamic Programming(动态规划)。关于动态规划的粗略介绍,请参考此文:三、dynamic programming

    二十三、堆排序算法
        堆排序算法作为一种快速稳定的算法,其平均时间复杂度(最坏也为)O(n*lgn)。当然,在实际应用中,一个实现的好的快速排序算法仍然要优于堆排序算法。不过,堆数据结构还可以作为高效的优先级队列。对堆排序算法作简单了解,可参考这:堆排序算法

    二十四递归与回溯算法。此俩个算法,相信各位比较熟悉,在此不做赘述。  

    二十五最长公共子序列
        最长公共子序列,英文缩写为LCS(Longest Common Subsequence)。其定义是,一个数列 S ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
    动态规划的一个计算最长公共子序列的方法如下:
        以两个序列 X、Y 为例子:
    设有二维数组 f[i][j] 表示 X 的 i 位和 Y 的 j 位之前的最长公共子序列的长度,则有:

          f[1][1] = same(1,1)
          f[i][j] = max{f[i-1][j-1]+same(i,j),f[i-1][j],f[i][j-1]}

        其中,same(a,b)当 X 的第 a 位与 Y 的第 b 位完全相同时为“1”,否则为“0”。
    此时,f[i][j]中最大的数便是 X 和 Y 的最长公共子序列的长度,依据该数组回溯,便可找出最长公共子序列。

        该算法的空间、时间复杂度均为O(n2),经过优化后,空间复杂度可为O(n),时间复杂度为O(nlogn)。更多详情,参见之前写的一篇拙文(不过,鉴于写的糟,日后会重写):三、dynamic programming

    二十六、红黑树的算法与实现
        关于红黑树,linux内核中有实现,本BLOG内也已经写了6篇红黑树系列的文章。且,本BLOG内的此红黑树系列,总计六篇文章,是整个国内有史以来有关红黑树的最具代表性,最具完整性,最具参考价值的资料。详情,请参考:五(续)、教你透彻了解黑树,及红黑树的c++完整实现源码

    二十七、A*搜寻算法
        相对于BFS、Dijkstra 等算法,A*搜寻算法作为一种高效的最短路径搜索算法,如今,已得到日益广泛的应用。初步了解A*搜寻算法的高效及与其它最短路径算法的比较,请参考此文:一(续)、A*,Dijkstra,BFS算法性能比较及A*算法的应用

    二十八、图像特征提取与匹配之SIFT算法
        sift,尺度不变特征转换,是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe 在1999年所发表,2004年完善总结。关于此算法,请参考如下,粗略介绍:九、图像特征提取与匹配之SIFT算,利用第三方库编译过程:九(续)、sift算法的编译与实现,c语言一步一步实现sift算法:九之再续:一步一步用c语言实现sift算法、上九之再续:教你一步一步用c语言实现sift算法、下

    候选经典算法一直在不断增补中,估计最后能达到上100种。...

         还犹豫什么列?快投上您宝贵的一票吧。每人可投多次票,只要您认为哪个算法是最为经典的算法,您就在下面的评论里写上它的序号,及算法名称。
        当然,如果上文中不曾出现你认为最经典的算法,你也可以写在评论里,为你钟爱的它投上一票。而后我将考虑您的意见,把您钟爱的算法也作为一种候选算法,添补上去。:D。
       
        最后,我们自己来做一份十大经典算法的排名榜单,也让世界各地的人看看我们中国人的意见。怎么样,还犹豫什么列,赶紧评论、赶紧投票吧...
        更新:

    • 由于诸多事情,未能抽空给各位投了票的朋友传送本博客全部博文集锦的文件,若各位等不及日后待我一一传送的话,还望各位移步至本人的资源下载处:http://v_july_v.download.csdn.net/,下载。那里有本博客所有任何一期的博文集锦文件。见谅,多谢。 July、二零一一年十月二十四日凌晨。
    • 本blog最新博文集锦第7期CHM文件免积分下载:http://download.csdn.net/detail/v_july_v/4463100。July、二零一二年一月十八日。

    本BLOG版权声明、即日生
        1、本人和CSDN对本BLOG内所有任何一切内容和文章,享有版权。如需转载,请注明出处及作者本人。
        2、凡是转载本BLOG内任何文章和内容的个人,或网站,一律不注明出处者,本人将永久追踪、永久谴责、永久追究法律责任的一切权利。谢谢。July、二零一一年三月七日,即日起生效。

    展开全文
  • 当今世界最NB的25位大数据科学家

    万次阅读 2015-09-20 16:57:14
    下面我们来进行梳理,共罗列了25位当今世界,无论是在学术与工业界都产生巨大影响的数据科学家(Data Scientists)。他(她)们推动了整个领域的发展,毫无疑问,无论是在学术界还是还工业界,他(她)们都是一座座...
  • 利用SRTM数据,在Google Earth显示等高线(需要大量工作) 利用SRTM数据,在Google Earth显示等高线850)this.width=850;" style="CURSOR: hand" onclick="javascript:window.open(this.src);" alt="" onload="jav
  • 而随着互联网应用的日益深化,2016年全球数据量呈现爆炸式增长,数据已经渗透到每一个行业和业务领域。“大数据”一词也已从概念层面逐渐被实际应用于各个垂直领域,帮助企业及行业解决长久以来未能解决的问题,真正...
  • 下面我们来进行梳理,共罗列了25位当今世界,无论是在学术与工业界都产生巨大影响的数据科学家(Data Scientists)。他(她)们推动了整个领域的发展,毫无疑问,无论是在学术界还是还工业界,他(她)们都是一座座...
  • 据英特尔预测,全球数据总量在2020年将达到44ZB(1ZB=10亿TB=1万亿GB),而单单中国产生的数据量将达到8ZB,大约占据全球总数据量的五分之一。目前,随着云计...
  • (1)在使用在线资源时,都有可能在无意中产生数据,这种数据往往以网络服务器日志的形式存在,一般来说,用户永远都不会看到网络服务器运行的软件,而这类软件会搜集关于服务器所有活动的数据。在这些活动类型...
  • 3.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。  4.建立高效的索引 SQL语句的Select部分只写必要的列;尽量将In子查询重写为Exists子查询; 去除在谓词列编写的任何数学运算;尽...
  •  在一个系统分析、设计阶段,因为数据量较小,负荷较低。我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更...
  • 专家指出,人工智能是一个重要的、甚至是必要的工具,可以用来分析当今世界所产生的海量数据。国际知名数据公司 IDC 估计,到 2020 年,数字数据的数量将达到 44 个 zettabytes (万亿字节),这个数据量是难以想象...
  • 数据依赖症:当今AI领域的核心风险

    千次阅读 2017-10-21 00:00:00
    本文转自西关数据大茶馆(微信号bigdata_tea)作者 |胡嘉琪在最近结束的2017年度AI星际争霸竞赛,Facebook做出了一款人工智能“CherryPi”,参与到这项旨在让各路AI技术在星际争霸游戏中同场竞技的赛事之中。...
  • MapReduce和Dryad是两种流行的平台,数据流在这两种平台采用操作符的有向非循环图形式。迭代程序在数据挖掘、网页排名、图像分析、模型拟合等许多应用领域中自然而然地出现了,而这两种平台缺乏对迭代程序的内嵌...
  • 数据库经常要做一些查询与插入,但是如果查询和插入的数据量过大的时候就会引发数据库性能问题,降低数据库工作效率。因此性能调优是大家在工作中都能够预见的问题,大到世界五百强的核心系统,小到超市的库存系统,...
  • 大数据中数据量打底有多大?

    千次阅读 2015-05-05 11:31:54
      先看下计量单位之间的换算: ... 到目前为止,人类生产的所有印刷材料的数据量是200PB,而历史全人类说过的所有的话的数据量大约是5EB。并预计到2020年全球数据使用量将会达到35.2ZB。
  • 但是对于大数据中数据仓库构建数据模型的方法和传统的关系数据库的方法 是否还是可以使用。 世间万物不会孤立的存在,它们以各种关系进行联系;构建的数据模型如何体现这些关系。 从目前各大厂商(IBM,微软)的数据...
  • MapReduce:大型集群的简单数据处理 摘要 MapReduce是一个编程模型和一个处理和生成大数据集的相关实现。用户指定一个map函数处理一个key-value对来生成一组中间key-value对;指定一个reduce函数合并所有和同一...
  • PHP是世界上最好的语言

    万次阅读 多人点赞 2016-04-03 16:47:09
    echo "PHP是世界上最好的语言"; ?>就像你可以编写JavaScript脚本语言需要写在<script></script >标签之间一样,你可以在页面中编写PHP代码写在标签之间,但注意后面的?>是可以省略的。也可以计算算式:;?>2.字符串...
  • 敏捷与简单(当今世界永恒的话题) 简单是XP价值观中智力色彩最强烈的。――《拥抱变化 2版》 简单是当今世界永恒的话题:电视、电话、手机、互联网、报纸、杂志……媒体在爆炸雪花、青岛、苦瓜、燕京、百威、纯生...
  • 互联网的当今热潮微世界,微应用、微商、微博、微信...... ...下一个世界化的世界,轻应用、轻数据、一身都轻了...... 未来的世界量化世界,一切都按量化计算,不再微小,不再轻,一切都飘忽了......
  • 数据仓库多维数据模型设计

    万次阅读 2017-11-09 18:14:59
    建设数据模型既然是整个数据仓库建设中一个非常重要的关键部分,...数据仓库的建模方法同样也有很多种,每一种建模方法其实代表了哲学的一个观点,代表了一种归纳,概括世界的一种方法。 目前业界较为流行的数据...
  • 数据量过大时数据库操作的处理

    千次阅读 2005-01-21 09:31:00
    随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛...那么,如何实现快速地从这些超大容量的数据库中提取数据(查询)、分析、统计以及提取数据后进行数据分页已成为各地系统管理员和数
  • 数据分析方法

    千次阅读 2018-06-09 01:10:32
    甚至有人说,各大公司在机器学习算法的差距并不大,数据量才是真正的门槛。我在此前的项目中也对此深有感触,劳心劳力各种调试模型和参数,反而是直接把数据量增大几倍对模型效果的提升更大。当然,在好些年前...
  • 数据之美(

    千次阅读 热门讨论 2009-06-10 15:10:00
    数据是抽象的,尤其是海量数据,人的大脑很难直接对大量数据进行分析并获得印象,然而从另一个角度看,数据也可以异常美丽,人们设计了很多工具,让枯燥的数据图形化,本文介绍了50个数据图形化工具,它们以令人...
  • 计算机中的数据存储是以字节(Byte)为基本计算单位的,往分别是KB,MB,GB...,那么到底有多少数据存储单位?最大的数据存储单位是多少? 他们之间的换算关系是如何,总结如下(B代表Byte): 1KB=1024B 1MB=...
  • 数据仓库

    千次阅读 2019-05-15 20:19:36
    数据仓库的基本概念什么是数据仓库数据仓库的特点面向主题的集成的不可更新的随时间不断变化的数据仓库与数据库的区别 什么是数据仓库   在企业所有级别的决策制定过程,数据仓库(Data Warehouse)可以提供所有...
  • 数据仓库基本知识

    万次阅读 多人点赞 2017-10-31 17:35:04
    根据统计,每个企业的数据量每2~3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据量的2%~4%左右。 因此,企业仍然没有最大化地利用已存在的数据资源,以至于浪费了更多的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 198,729
精华内容 79,491
关键字:

当前世界上的数据量