算法

算法——快速排列

强颜欢笑 提交于 2020-01-13 19:06:25
快排 ​ 从头开始学习算法,从最简单的排序算法开始,第一个接触的就是快排,学习的平台是 AcWing,希望现在学习还不晚,对以后能有帮助 快排的原理 ​ 快排使用的是分治的思想,有三个关键点:确定分界点、调整区间、递归处理左右两段,这里的思想是使用两个指针,分别对应数组的左右边界,一下简称 l 和 r,通过循环来将两个指针向中间移动直到 l 和 r 相遇,在这期间,将数组调整为小于等于分界点的值和大于等于分界点的值两部分,再使用递归的思想处理 ​ 首先要做的是确定一个分治的分界点,这个点可以是任意的一个数组元素,但不要给它设置成固定值,最好通过变量来对它进行定义,例如 array[l]、array[r]、array[(l + r) / 2] 这种都可以 ​ 然后通过分界点的值来调整数组空间,,这里需要用到刚才提到的 l 和 r 两个指针,过程是:先将 l 向后移动,检验 l 对应的值是否小于分界点,如果小于则继续后移 l,否则 l 就会停下,这是 r 开始前移,检测移动后的 r 所对应的值是否大于分界点,如果大于则继续前移 r,否则 r 也会停下,这个时候 l 和 r 都已经停下了,说明 l 和 r 都已经遇到了不属于自己对应空间的值,直接交换两个指针当前所对应的值,然后继续移动 l 和 r 指针,直到 l 和 r 相遇 ​ 最后便是使用递归的思想,对分界点左边(大小意义上的左

几种加密算法

别说谁变了你拦得住时间么 提交于 2020-01-13 16:03:28
1、加密方式分类: 数据加密方式 描述 主要解决的问题 常用算法 对称加密 指数据加密和解密使用相同的密钥 数据的机密性 DES, AES 非对称加密 也叫公钥加密,指数据加密和解密使用不同的密钥--密钥对儿 身份验证 DSA,RSA 单向加密 指只能加密数据,而不能解密数据 数据的完整性 MD5,SHA系列算法 2、加密相关名词解释   HASH:一般翻译为‘散列’,就是指任意长度的输入,通过散列算法,变成固定长度的输出,该输出值就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同输入的可能会散列成相同的输出,而不可能从散列值来唯一的确认输入值。简单的说,hash算法就是一种将任意长度的消息压缩为某一个固定长度的消息摘要的函数。   MD5:全程Message Digest algorithm 5,即信息摘要算法。该算法可以生成定长的数据指纹,被广泛应用于加密和解密技术,常用于文件和数据完整性校验。   SHA:全称为Secure Hash ALgorithm,即安全散列算法/安全哈希算法。该算法为数字签名等密码学应用中的重要工具,被广泛应用于电子商务等信息安全领域。根据生成密文长度而命名的各种具体的算法有1、SHA1(160bits)、SHA224(224bits)、SHA384(384bits)等。   HMAC:全称为Hash Message

机器学习(九)—FP-growth算法

本小妞迷上赌 提交于 2020-01-13 13:01:02
  本来老师是想让我学Hadoop的,也装了Ubuntu,配置了Hadoop,一时间却不知从何学起,加之自己还是想先看点自己喜欢的算法,学习Hadoop也就暂且搁置了,不过还是想问一下园子里的朋友有什么学习Hadoop好点的资料,求推荐~言归正传,继Apriori算法之后,今天来学习FP-growth算法。   和Apriori算法相比,FP-growth算法只需要对数据库进行两次遍历,从而高效发现频繁项集。对于搜索引擎公司而言,他们需要通过查看互联网上的用词来找出经常在一块出现的词对,因此这些公司就需要能够高效的发现频繁项集的方法,今天要学习的FP-growth算法就可以完成此重任。 一 FP-growth算法 1.概述   FP-growth算法是基于Apriori原理的,通过将数据集存储在FP(Frequent Pattern)树上发现频繁项集,但不能发现数据之间的关联规则。FP-growth算法只需要对数据库进行两次扫描,而Apriori算法在求每个潜在的频繁项集时都需要扫描一次数据集,所以说Apriori算法是高效的。其中算法发现频繁项集的过程是: (1)构建FP树; (2)从FP树中挖掘频繁项集。 2. 构建FP树   FP表示的是频繁模式,其通过链接来连接相似元素,被连起来的元素可以看成是一个链表。将事务数据表中的各个事务对应的数据项按照支持度排序后

jvm性能调优

99封情书 提交于 2020-01-13 07:46:51
一、JVM内部结构 ​ 程序计数器 类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当前执行位置,所以每个线程都有自己的程序计算器。这一个区域不会有OutOfMemeryError。当执行Java方法时,这里存储的执行的指令的地址,如果执行的是本地方法,这里的值是Undefined。 栈 虚拟机栈也是线程私有的,每创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法,就会生成一个栈帧(Stack Frame)用于存储方法的本地变量表、操作栈、方法出口等信息,当这个方法执行完后,就会弹出相应的栈帧。 如果请求的栈的深度过大,虚拟机可能会抛出StackOverflowError异常,如果虚拟机的实现中允许虚拟机栈动态扩展,当内存不足以扩展栈的时候,会抛出OutOfMemoryError异常。 堆 如果垃圾收集算法采用按代收集(目前大都是这样),这部分还可以细分为新生代和老年代。 新生代又可能分为Eden区,From Survivor区和To Survivor区,主要是为了垃圾回收。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。Java堆只要求逻辑上是连续的

算法笔记 26044 Problem D 习题6-12 解密

对着背影说爱祢 提交于 2020-01-13 05:23:28
问题 D: 习题6-12 解密 时间限制: 1 Sec 内存限制: 12 MB 题目描述 有一行电文,已按如下规律译成密码: A–>Z a–>z B–>Y b–>y C–>X c–>x … … 即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。 输入 输入一行密文 输出 解密后的原文,单独占一行。 样例输入 ZYX123zyx 样例输出 ABC123abc # include <stdio.h> # include <string.h> int main ( ) { char str [ 50 ] ; gets ( str ) ; int c = strlen ( str ) ; int i ; for ( i = 0 ; i < c ; i ++ ) { if ( str [ i ] >= 'A' && str [ i ] <= 'Z' ) { str [ i ] = 'A' + 'Z' - str [ i ] ; } if ( str [ i ] >= 'a' && str [ i ] <= 'z' ) { str [ i ] = 'a' + 'z' - str [ i ] ; } } puts ( str ) ; return 0 ; } 来源: CSDN 作者: ZOE_ZHU 链接: https:/

对称加密和非对称加密

穿精又带淫゛_ 提交于 2020-01-13 05:08:08
一、简介: 对称加密:加密和解密的秘钥使用的是同一个。 非对称加密:加密需要公钥、私钥两种。“公钥加密,私钥解密;私钥加密,公钥解密” 二、特点: 对称加密: AES,DES,3DES,IDEA,Blowfish,RC4、RC5、RC6 等。 在数据传送前,发送方和接收方必须商定好秘钥,然后双方都能保存好秘钥,使用该秘钥进行数据的加解密。 优点:算法公开、计算量小、加密速度快、加密效率高。 缺点:如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。 非对称加密 : RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用) 甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方,使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 优点: 安全 缺点: 速度较慢 Hash算法 (摘要算法):MD2、MD4、MD5、HAVAL、SHA Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息

POS设计思想

寵の児 提交于 2020-01-13 04:41:25
什么是POS? POS是一种在公链中的共识算法,可作为POW算法的一种替换。POW是保证比特币、当前以太坊和许多其它区块链安全的一种机制,但是POW算法在挖矿过程中因破坏环境和浪费电力而受到指责。POS试图通过以一种不同的机制取代挖矿的概念,从而解决这些问题。 POS机制可以被描述成一种虚拟挖矿。鉴于POW主要依赖于计算机硬件的稀缺性来防止女巫攻击,POS则主要依赖于区块链自身里的代币。在POW中,一个用户可能拿1000美元来买计算机,加入网络来挖矿产生新区块,从而得到奖励。而在POS中,用户可以拿1000美元购买等价值的代币,把这些代币当作押金放入POS机制中,这样用户就有机会产生新块而得到奖励。在POW中,如果用户花费2000美元购买硬件设备,当然会获得两倍算力来挖矿,从而获得两倍奖励。同样,在POS机制中投入两倍的代币作为押金,就有两倍大的机会获得产生新区块的权利。 总体上说,POS算法如下所示。存在一个持币人的集合,他们把手中的代币放入POS机制中,这样他们就变成验证者。假设在区块链最前面一个区块(区块链中最新的块),这时POS算法在这些验证者中随机选取一个(选择验证者的权重依据他们投入的代币多少,比如一个投入押金为10000代币的验证者被选择的概率是一个投入1000代币验证者的10倍),给他们权利产生下一个区块。如果在一定时间内,这个验证者没有产生一个区块

对称加密算法 + 非对称加密算法

倖福魔咒の 提交于 2020-01-13 03:23:35
对称加密算法   对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES、IDEA和AES。 传统的DES由于只有56位的密钥,因此已经不适应当今分布式开放网络对数据加密安全性的要求。1997年RSA数据安全公司发起了一项“DES挑战赛”的活动,志愿者四次分别用四个月、41天、56个小时和22个小时破解了其用56位密钥DES算法加密的密文。即DES加密算法在计算机速度提升后的今天被认为是不安全的。 AES是美国联邦政府采用的商业及政府数据加密标准

数据结构之算法

六眼飞鱼酱① 提交于 2020-01-13 01:01:49
算法    算法 —— 对特定问题求解步骤的描述    特性: 输入——有0个或多个输入       输出——有1个或多个输出        有穷性       确定性       可行性 如何评价一个算法的好坏?        正确的       可读性高       时间效率高       存储空间小 算法时间复杂度 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是 算法的时间量度 ,记作:T(n) = O(f(n))。 它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为 时间复杂度 。其中f(n)是问题规模n的某个函数。 推导大O阶方法   1.   用常数取代运行时间中的所有加法常数。   2.   在修改后的运行次数函数中,只保留最高阶项。   3.   如果最高阶项存在且不是,则去除与这个项相乘的常数。得到的结果就是大O阶。 常见的时间复杂度如表:        来源: https://www.cnblogs.com/gaiyin/p/6871709.html

数据结构和算法绪论

大城市里の小女人 提交于 2020-01-13 01:01:22
程序设计 = 数据结构 + 算法 数据结构 :逻辑结构(数据对象中数据元素之间的相互关系)和物理结构(数据的逻辑结构在计算机中的存储形式)。   逻辑结构:集合结构(只有同属一个集合的关系)、线性结构(一对一的关系)树形结构(存在一对多的层次关系)、图形结构(多对多的关系)。   物理结构:顺序存储(把数据放在地址连续的存储单元里,数据间的逻辑关系和物理关系一致)、链式存储(任意存储单元,数据元素的存储关系不能反映其逻辑关系,需要用一个指针存放数据元素的地址)。 常用抽象数据类型: 算法 的五个特性:输入(零个或多个输入)、输出(至少一个输出)、有穷性(有限步骤后结束,每个步骤在可接受时间内完成)、确定性(每个步骤都被精确定义无歧义;在一定条件下只有一条执行路径)、可行性(每个步骤都能通过执行有限次数完成)。 算法设计的要求:   1. 正确性:没有语法错误;对合法输入产生满足要求的输出;对非法输入产生满足规格的说明;对故意刁难的测试输入都有满足要求的输出结果。   2. 可读性:便于阅读。   3. 鲁棒性:输入数据不合法也能做出相关处理。   4. 时间效率高和存储量低。 时间复杂度和空间复杂度 事先分析估算。时间消耗取决于:算法采用的策略、编译产生的代码质量、问题的输入规模、机器执行指令的速度。(所以抛开硬软件因素,程序运行所需时间依赖于算法好坏和输入规模)