Elias-Fano编码过程如下:把一组整数的最低l位连接在一起,同时把高位以严格单调增的排序划分为桶. Example: 2, 3, 5, 7, 11, 13, 24 Count in unary the size of upper bits “buckets” including empty ones:110=>计算最大的桶,此处是110,计算方法如下:Maximum bucket: [U / 2^l]Example: [24 / 2^2] = 6 = 110 连接最低位: Concaten…
总述:排序是指将元素集合按规定的顺序排列.通常有两种排序方法:升序排列和降序排列.例如,如整数集{6,8,9,5}进行升序排列,结果为{5,6,8,9},对其进行降序排列结果为{9,8,6,5}.虽然排序的显著目的是排列数据以显示它,但它往往可以用来解决其他的问题,特别是作为某些成型算法的一部分. 总的来说,排序算法分为两大类:比较排序 和 线性时间排序. 比较排序依赖于比较和交换来将元素移动到正确的位置上.它们的运行时间往往不可能小于O(nlgn). 对于线性时间排序,它的运行时间往往与它处理…
试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表,字段跟原合同表一模一样,此外多了一个 合同版本号 字段.在归档时如何把原始合同信息插入到合同历史表呢? 很容易就能想到的一种解决方法: insert into 合同历史表(字段1,字段2,字段3…………字段120,版本号) select   字段1,字段2,字段3…………字段120,0 as 版本号…
前言 在比较排序的算法中,快速排序的性能最佳,时间复杂度是O(N*logN).因此,在使用比较排序时,时间复杂度的下限就是O(N*logN).而桶排序的时间复杂度是O(N+C),因为它的实现并不是基于比较实现的,而是基于映射函数实现的. 桶排序 桶排序工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序). 桶排序利用函数的映射关系,减少了几乎所有的比较工作.实际上,桶排序的f(k)值的计算,其作用就相当于快排中划分,已经把大量…
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里.每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序).桶排序是鸽巢排序的一种归纳结果.当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间((大O符号)).但桶排序并不是比较排序,他不受到下限的影响. 桶排序以下列程序进行: 设置一个定量的数组当作空桶子. 寻访序列,并且把项目一个一个放到对应的桶子去. 对每个不是空的桶子进行排序. 从不是空的桶子里把项目再放…
一. 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法.以大堆为例利用堆顶记录的是最大关键字这一特性,每一轮取堆顶元素放入有序区,就类似选择排序每一轮选择一个最大值放入有序区,可以把堆排序看成是选择排序的改进.它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序.首先简单了解下堆结构. 堆 堆是一棵完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆:或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆.如下图: 对堆中的结点按层进行编号,将这种逻辑结构…
桶排序(Bucket Sort) 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排). 为了使桶排序更加高效,我们需要做到这两点: 在额外空间充足的情况下,尽量增大桶的数量 使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 1.算法描述 设置一个定量的数组当作空桶:…
前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算法,为何要使用Base64编码呢?它解决了什么问题?这也是本文探讨的东西? 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 Android数据加密之Des加密 Android数据加密之MD5加密 Android数据加密之Base64编码算法 Android…
在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如 .下图是一个自编码神经网络的示例.通过训练,我们使输出 接近于输入 .当我们为自编码神经网络加入某些限制,比如限定隐藏神经元的数量,我们就可以从输入数据中发现一些有趣的结构.举例来说,假设某个自编码神经网络的输入 是一张 张8*8 图像(共64个像素)的像素灰度值,于是 n=64,其隐藏层 中有25个隐藏神经元.…
一.前言 在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法,然后,这个问题一直放着,想找个机会解决.于是乎,终于逮到机会,开始下手. 二.编码 关于ASCII.Unicode编码.UTF-8编码等问题,可以参见笔者另外一篇博客[字符编码]彻底理解字符编码. 三.Base64算法 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,关于Bas…
一.为什么要用URLEncoder 客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将网址中的非ASCII码内容转换成可以传输的字符 不会被编码的内容 1.大写字母A-Z 2.小写字母a-z 3.数字 0-9 4.标点符 - _ . ! ~ * ' (和 ,) 二.编码原理 1.将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头 eg:  0…
一.什么是Hex 将每一个字节表示的十六进制表示的内容,用字符串来显示. 二.作用 将不可见的,复杂的字节数组数据,转换为可显示的字符串数据 类似于Base64编码算法 区别:Base64将三个字节转换为四个字符,Hex将三个字节转换为六个字节 三.应用场景 在XML,JSON等文本中包含不可见数据(二进制数据)时使用 四.使用 1.将字节数组转换为字符串 /** * 将字节数组转换为字符串 * 一个字节会形成两个字符,最终长度是原始数据的2倍 * @param data * @return *…
一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的数据进行处理,还原出原始数据,这种操作称之为解码. 二.什么是Base64编码算法 可以将任意的字节数组数据,通过算法,生成只有(大小写英文.数字.+./)(一共64个字符)内容表示的字符串数据. 即将任意的内容转换为可见的字符串形式. 三.Base64算法的由来 以前发送邮件只支持可见字符的传送.…
   随着deep learning的火爆,神经网络(NN)被大家广泛研究使用.但是大部分RD对BP在NN中本质不甚清楚,对于为什这么使用以及国外大牛们是什么原因会想到用dropout/sigmoid/ReLU/change learnRate/momentum/ASGD/vanishment等问题等呢.要想了解国外大牛的思考过程,需要学习到BP在NN中的本质问题,其中涉及到NN训练对于判决边界如何形成?ASGD为什么尤其在NN中效果比二阶信息效果好?如何选择激活函数合适?为何语音识别中误差函数…
微信扫一扫,可打开该GitChat活动页面 字符编码是计算机世界里最基础.最重要.最令人困惑的一个主题之一.不过,在计算机教材中却往往浮光掠影般地草草带过,甚至连一本专门进行深入介绍的专著都找不到(对这一点我一直很困惑,为什么就没有哪位大牛对这个如此基础.重要而又如此容易让人困惑的主题写一本专著予以介绍呢). 字符编码的基础性.重要性,主要体现在它涉及面广.向下涉及到计算机的底层技术,甚至是硬件实现:向上几乎跟所有的操作系统.编程语言.应用程序都密切相关.而字符编码之所以成为了最令人困惑的主题之…
压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法.CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了原子的选择标准之外,它有一点不同于ROMP:ROMP每次迭代已经选择的原子会一直保留,而CoSaMP每次迭代选择的原子在下次迭代中可能会被抛弃. 在这之前先读了下参考论文[1],论文前面还是看得懂一点的,讲了一些压缩感知的基础知识,还聊到了压缩重构方法主要分为三类,但是到了第2部分介绍算法的时候又看…
本博客由Rcchio原创 我了解到很多压缩文件的程序是基于哈夫曼编码来实现的,所以产生了自己用哈夫曼编码写一个压缩软件的想法,经过查阅资料和自己的思考,我用c++语言写出了该程序,并通过这篇文章来记录一下自己写该程序学到的东西.因为本人写的程序在压缩率上,还有提升的空间,所以本文将不定期更新,但程序整体的思路不会有较大的改动. 一.基于哈夫曼编码可实现压缩文件的原理分析 在计算机中,数据的存储都是二进制的,并且以字节作为基本的存储单位,像英文字母在文本中占一个字节,汉字占两个字节,我们把这种每一…
随着移动终端的普及,很多应用都基于LBS功能,附近的某某(餐馆.银行.妹纸等等). 基础数据中,一般保存了目标位置的经纬度:利用用户提供的经纬度,进行对比,从而获得是否在附近. 目标: 查找附近的某某某,由近到远返回结果,且结果中有与目标点的距离. 理论:https://github.com/phonecom01/geohash 针对查找附近的某某某,提出两个方案,如下: 一.方案A: 抽象为球面两点距离的计算,即已知道球面上两点的经纬度: 点(纬度,经度),A($radLat1,$radLng…
主要内容: CoSaMP的算法流程 CoSaMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 一.CoSaMP的算法流程 压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法.CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了原子的选择标准之外,它有一点不同于ROMP:ROMP每次迭代已经选择的原子会一直保留,而CoSaMP每次迭代选择的原子在下次迭代中可能会被抛弃…
Base64是一种编码算法,因为这种算法只支持64个[可打印字符],所以叫做Base64. 为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换.编码表的大小为2^6=64,这也是Base64名称的由来. 为什么只支持64个字符?ASCII码的范围是0-127,其中0-31和127这33个字符属于控制字符.剩下32-126这个字符属于可打印字符,包括数字,大小写字母,常用符号. 早期的一些协议譬如传输邮件的smtp协议,只能传输可打印的ASCII字符.导致原本8Bit字…
编码算法 编码算法是将一种形式转换成等价的另外一种形式.主要是为了方便某种特定场景的处理. 字母如何在计算机中表示呢? 用ASCII编码 那中文字符如何在计算机中表示呢? 用Unicode编码 如何同时兼容字母和中文呢? 用UTF-8编码 我浏览器想给服务器发送数据,有没有什么编码方式呢? 用URL编码 一般规则 A-Z, a-z, 0-9, -_.* 保持不变 其他字符以%XX表示(如,中:%E4%B8%AD (UTF8:E4B8AD)) 发邮件的时候二进制附件怎么发送呢? 用Base64编码…
转自:http://my.oschina.net/liqiong/blog/4921 Cohen-SutherLand算法(编码算法)   基本思想:对于每条线段P1P2,分为三种情况处理: (1)若P1P2完全在窗口内,则显示该线段,简称“取”之: (2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之: (3)若线段既不满足“取”的条件,也不满足“弃”的条件,则把线段分为两段.其中一段完全在窗口外,可弃之.然后对另一段重复上述处理. 为了使计算机能够快速的判断一条线段与窗口属于何种关系,采…
PCA PCA(Principal Component Analysis,主成分分析)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维.网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理.这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么. 当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的…
varint算法,摘自:http://blog.csdn.net/liaoquesg/article/details/50897327 最近在看<大规模WEB服务开发技术>这本书中.书中提到“可变长字节码算法”的压缩数据的算法,以达到压缩数据,减少磁盘IO. 可变长字节码算法: 任意一个字节的最高位(下标7)均只作为标志位,而且根据字节所在位置需要乘以128的相应幂次:(我觉得这个算法只能用作自然数的压缩) 这是他的伪代码  仔细研究后,我翻译成PHP版的: <?php function…
DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然!——和一个句子的分词算法CRF没有区别!注:传统DDos检测直接基于IP数据发送流量来识别,通过硬件防火墙搞定.大数据方案是针对慢速DDos攻击来搞定.难点:在进行攻击的时候,攻击数据包都是经过伪装的,在源IP 地址上也是进行伪造的,这样就很难对攻击进行地址的确定,在查找方面也是很难的.这样就导致了分布式拒绝服务攻击在检验方法上是很难做到的.领域知识见:http://blog.csdn.n…
Parquet是Twitter贡献给开源社区的一个列数据存储格式,采用和Dremel相同的文件存储算法,支持树形结构存储和基于列的访问.Cloudera Impala也将使用Parquet作为底层的存储格式.在很多大数据的应用场景下面,比如电信行业,具有一定规则的数据,字段很多,但是每次查询仅仅针对其中少数的几个字段,这个时候列式存储是极佳的选择.优势: 使用列式存储,一列的值都是同质的,从而带来了更高的压缩比:对于在hadoop集群上的大数据量来说,使用parquet可以节省大量空间:可以提高…
H.265视频编码与技术全析(上) 一. 概述 作为新一代视频编解码格式,H.265得到越来越广泛的应用.不久之前,苹果公司在翘首期盼中发布了iPhone6,该款手机较之以往的iPhone,不仅仅只是简单地增大了屏幕,其采用了H.265视频编码解码技术,可达到在有限带宽下传输更高质量的网络视频.虽然对于大部分人来讲,H.265还有点陌生,然而早在两年前,爱立信就已经推出了首款H.265编解码器.使用H.265编解码的一个巨大优势是仅需目前主流编码视频H.264一半的比特率,就可提供同等质量的视频…
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<:…<d2<d1),即所有记录放在同一组中进行直接插入排序为止. 该方法实质上是一种分组插入方法. 算法编码 void shellSort(int v[], int n)…
计数排序 计数排序是一种高效的线性排序. 它通过计算一个集合中元素出现的次数来确定集合如何排序.不同于插入排序.快速排序等基于元素比较的排序,计数排序是不需要进行元素比较的,而且它的运行效率要比效率为O(nlgn)的比较排序高. 计数排序有一定的局限性,其中最大的局限就是它只能用于整型或那么可以用整型来表示的数据集合.原因是计数排序利用一个数据的索引来记录元素出现的次数,而这个数组的索引就是元素的数值.例如,如果整数3出现过4次,那么4将存储到数组索引为3的位置上.同时,我们还需要知道集合中最大…
算法,是永恒的技能,今天继续算法篇,将研究桶排序. 算法思想: 桶排序,其思想非常简单易懂,就是是将一个数据表分割成许多小数据集,每个数据集对应于一个新的集合(也就是所谓的桶bucket),然后每个bucket各自排序,或用不同的排序算法,或者递归的使用bucket sort算法,往往采用快速排序.是一个典型的divide-and-conquer分而治之的策略. 其中核心思想在于如何将原始待排序的数据划分到不同的桶中,也就是数据映射过程f(x)的定义,这个f(x)关乎桶数据的平衡性(各个桶内的数…