![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
朝歌1122
计算机科学与技术
展开
-
DES原理学习以及C语言实现(五)
五、十六轮循环以及IP逆置换循环十六次上一篇中的步骤。IP逆置换表如下(其置换方法与IP置换一样):逆置换的数据就是最终的加密密文。C语言代码:(完整的,未整理)#include<stdio.h>#include<stdlib.h>//要使用malloc是要包含此头文件#include <memory.h>//要使用memset是要...原创 2020-03-16 20:09:29 · 371 阅读 · 0 评论 -
DES原理学习以及C语言实现(四)
四 、密码函数F密码函数F的输入接收两个输入,32位的用户输入的需要加密的数据和48位对应的子密钥。F函数过程如下:1、先将数据的右半部分Ri通过扩展置换E从32位扩展道48位。2、扩展后48位与48位的密钥进行异或运算。3、异或运算后在进行S盒置换,将48位的数据变为32位的数据。4、经过(3)后的32位数据进行一个P盒置换。5、再将这个32位的数据与左边的数据进行异或运...原创 2020-03-16 19:16:21 · 588 阅读 · 0 评论 -
DES原理学习以及C语言实现(三)
三、子密钥Ki及获取子密钥的获取主要通过置换和移位运算得到。DES的密钥长度时64位,由用户输入。但参与加密的只有56位。用户输入的64位按照8*8矩阵排列,把其中每行的第8个用于奇偶检验。经过一系列的置换和移位得到K1~K16共16个子密钥。每个密钥长度是48位(压缩过后的)。其每个子密钥实现过程如下:1、首先将输入的64位密钥按照8*8排列,将每行第8个去掉。2、然后对剩下...原创 2020-03-16 12:17:48 · 461 阅读 · 0 评论 -
DES原理学习以及C语言实现(二)
二、初始置换函数IP以下就是置换表。是一个8*8矩阵。其中数字代表第一个,从一排从左向右数。比如58就是第58个。它的意思就是将用户的输入矩阵中的第58个放在第一个(与第一个置换位置),第1个则放在第58位。下表的第58个数字就是1。58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,5...原创 2020-03-15 23:14:44 · 408 阅读 · 0 评论 -
DES原理学习以及C语言实现(一)
DES算法是一种最通用的对称密钥算法,属于分组密码算法。主要用于民用敏感信息加密,该算法是IBM公司在1975年发布。在1977年7月15日得到美国国家标准局认可。一、DES算法简单描述。DES的输入是8个字节64位明文和64位密钥,输出是64位密文。明文和密钥都是用户输入。64位明文 ======> 64位密文64位密钥其加密有四个步骤完成。...原创 2020-03-15 19:58:16 · 718 阅读 · 0 评论 -
一套图 搞懂“时间复杂度”
一套图 搞懂“时间复杂度” 时间复杂度的意义 究竟什么是时间复杂度呢?让我们来想象一个场景:某一天,小灰和大黄同时加入了一个公司......一天过后,小灰和大黄各自交付了代码,两...转载 2020-03-14 11:44:55 · 156 阅读 · 0 评论 -
椭圆曲线为什么不可逆
原文链接:https://www.9mblog.com/252.html说起比特币加密,椭圆曲线是被经常提到的词,之前读《精通比特币》是也只是大致浏览了一下。认为太过高深,所以没有仔细研究。最近几天偶然间有翻起了这段,难得有闲,便沉下心来仔细研读了一番,自认还是有些收获的,分享出来,为外人解谜的同时也权当最近学习的一个记录。正文生成公钥以一个随机生成的私钥 k(可以理解为一个极...转载 2020-03-11 15:25:03 · 966 阅读 · 1 评论 -
算法-贪心法-背包问题
对于背包问题(这个是背包问题,不是0/1背包问题),贪心有三种策略:1、从物品中选取价值最大的放入。2、从物品中选区重量最小的放入。3、选取物品的价值与重量的比值大的放入。第一第二种不能保证得到最优解,第三种有的资料说也不能保证得到最优解,但是能得到最优的近似解。这里选取第三种方法:1、先选取比值最大的物品。2、比较其重量是否小于背包容量,如果小,就放入,如果大于背包容量...原创 2019-05-12 21:27:32 · 3529 阅读 · 0 评论 -
算法-蛮力法-0/1背包问题
直接遍历每一种情况,用数组maxV[i]表示第i个物品放不放进去,0不放进,1放进。#include<iostream>using namespace std;int main(){ int w[5]={2,2,6,5,4},v[5]={6,3,5,4,6}; //重量和价值 int n=5,c=10; //n物品个数 ,c背包容量 int max=0; ...原创 2019-05-11 22:01:31 · 4500 阅读 · 0 评论 -
dp(动态规划)方法论——由矩阵相乘问题学习dp解题思路
目录导语方法论矩阵相乘问题问题矩阵乘法的运算时间初步分析用dp方法论解题第一步:分析最优解的特征第二步:递归地定义最优解的值第三步:计算最优解的值第四步:根据计算好的信息构造最优解复杂度总结参考资料转自:https://www.cnblogs.com/mozi-song/p/9629137.html导语刷过一些算法题,就会十分...转载 2019-05-24 20:55:35 · 1009 阅读 · 0 评论 -
杭电oj(2016-2020)
2016#include<iostream>using namespace std;int main(){ int n; while(cin>>n&&n) { int m[100]; int min=0; for(int i=0;i<n;i++) {...原创 2019-03-28 20:47:23 · 592 阅读 · 0 评论 -
基于用户投票的排名算法(三):Stack Overflow
Reddit的排名算法。它的特点是,用户可以投赞成票,也可以投反对票。也就是说,除了时间因素以外,只要考虑两个变量就够了。但是,还有一些特定用途的网站,必须考虑更多的因素。世界排名第一的程序员问答社区Stack Overflow,就是这样一个网站。你在上面提出各种关于编程的问题,等待别人回答。访问者可以对你的问题进行投票(赞成票或反对票),表示这个问题是不是有价值。一旦有人...转载 2019-06-04 11:14:34 · 612 阅读 · 0 评论 -
算法-贪心算法-活动安排问题
关于贪心算法:https://blog.csdn.net/qq_40452317/article/details/88875193活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。问题描述和分析 设有n个活动的集合E={1,2,…,n},其中...原创 2019-03-28 19:06:38 · 15486 阅读 · 0 评论 -
算法-分治法-0/1背包问题
每个物品我们都有两种选择,一个是放入,一个是不放入。假设f[i][c]表示第i次选择后,容量的为c的背包的价值。那么对于选择第i个的物品后其价值的第公式是:1、表示f[i-1][j]表示第i-1次选择后,容量为j的包的价值。f[i][j]=f[i-1][j]2、表示第i-1次选择后,容量为j-w[i]的价值,因为放入所以背包容量减少了,价值增加了 。f[i][j]=f[i...原创 2019-05-13 16:44:03 · 7342 阅读 · 2 评论 -
基于用户投票的排名算法(二):Reddit
Hacker News的排名算法。它的特点是用户只能投赞成票,但是很多网站还允许用户投反对票。就是说,除了好评以外,你还可以给某篇文章差评。Reddit是美国最大的网上社区,它的每个帖子前面都有向上和向下的箭头,分别表示"赞成"和"反对"。用户点击进行投票,Reddit根据投票结果,计算出最新的"热点文章排行榜"。怎样才能将赞成票和反对票结合起来,计算出一段时间内最受欢迎的文章呢?如果...转载 2019-06-04 11:04:47 · 475 阅读 · 0 评论 -
基于用户投票的排名算法(一):Delicious和Hacker News
互联网的出现,意味着"信息大爆炸"。用户担心的,不再是信息太少,而是信息太多。如何从大量信息之中,快速有效地找出最重要的内容,成了互联网的一大核心问题。各种各样的排名算法,是目前过滤信息的主要手段之一。对信息进行排名,意味着将信息按照重要性依次排列,并且及时进行更新。排列的依据,可以基于信息本身的特征,也可以基于用户的投票,即让用户决定,什么样的信息可以排在第一位。下面,我将整理和...转载 2019-06-04 11:10:00 · 591 阅读 · 0 评论 -
基于用户投票的排名算法(四):牛顿冷却定律
这个系列的前三篇,介绍了Hacker News,Reddit和Stack Overflow的排名算法。今天,讨论一个更一般的数学模型。这个系列的每篇文章,都是可以分开读的。但是,为了保证所有人都在同一页上,我再说一下,到目前为止,我们用不同方法,企图解决的都是同一个问题:根据用户的投票,决定最近一段时间内的"热文排名"。你可能会觉得,这是一个全新的课题,伴随着互联网而产生,需要全新的方...转载 2019-06-04 11:19:01 · 823 阅读 · 0 评论 -
基于用户投票的排名算法(五):威尔逊区间
迄今为止,这个系列都在讨论,如何给出"某个时段"的排名,比如"过去24小时最热门的文章"。但是,很多场合需要的是"所有时段"的排名,比如"最受用户好评的产品"。这时,时间因素就不需要考虑了。这个系列的最后两篇,就研究不考虑时间因素的情况下,如何给出排名。一种常见的错误算法是: 得分 = 赞成票 - 反对票假定有两个项目,项目A是60张赞成票,40张反对票,项目B是550张...转载 2019-06-04 11:21:24 · 471 阅读 · 0 评论 -
基于用户投票的排名算法(六):贝叶斯平均
上一篇介绍了"威尔逊区间",它解决了投票人数过少、导致结果不可信的问题。举例来说,如果只有2个人投票,"威尔逊区间"的下限值会将赞成票的比例大幅拉低。这样做固然保证了排名的可信性,但也带来了另一个问题:排行榜前列总是那些票数最多的项目,新项目或者冷门的项目,很难有出头机会,排名可能会长期靠后。以IMDB为例,它是世界最大的电影数据库,观众可以对每部电影投票,最低为1分,最高为10分。...转载 2019-06-04 11:25:17 · 1821 阅读 · 0 评论 -
算法-分治法-合并排序
分治法 任何一个计算机求解的问题,其所需的计算时间与规模都有关,规模越小的问题,所需的时间越少,就越容易得到结果,当一个问题的规模达到一定程度时,处理起来非常麻烦,分治法的思想就是,将一个难以直接解决的大问题,分割成规模较小的相同问题,各个击破,分而治之。 分治法能够解决的问题有以下几个特征: 1、该问题的规模缩小到一...原创 2019-03-03 10:51:17 · 2453 阅读 · 1 评论 -
算法-贪心算法
贪心算法:要求问题具由最优子结构,在对问题求解的过程中,总是做出在当前看来是最好的选择。为了解决一个复杂问题,人们总是要把它分解为若干个类似的子问题。来看看分治法,动态规划,贪心算法区别。分治法指将问题划分成一些独立地子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解。分解(Divide):将原问题分解成一系列子问题; 解决(conquer):递归地解各个子问题。若...原创 2019-03-28 18:37:56 · 900 阅读 · 0 评论 -
算法-动态规划-0/1背包问题
一、动态规划动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶...原创 2019-03-23 20:17:22 · 2549 阅读 · 1 评论 -
杭电oj(2006-2010)
2006#include<iostream>using namespace std;int main(){ int n,i,a; while(cin>>n) { int s=1; for(i=0;i<n;i++) { cin>>a; if(a%2!=...原创 2019-03-17 21:25:48 · 278 阅读 · 0 评论 -
杭电oj(1000-1005)
1000#include<iostream>using namespace std;int main(){ int a,b; while(cin>>a>>b) cout<<a+b<<endl;}1001#include<stdio.h> int sum(int n)...原创 2019-03-13 21:22:24 · 318 阅读 · 0 评论 -
杭电oj题库分类
分类一:基础题:1000、1001、1004、1005、1008、1012、1013、1014、1017、1019、1021、1028、1029、1032、1037、1040、1048、1056、1058、1061、1070、1076、1089、1090、1091、1092、1093、1094、1095、1096、1097、1098、1106、1108、1157、1163、1164、117...转载 2019-03-13 21:14:43 · 5864 阅读 · 0 评论 -
目录-杭电oj
杭电oj题库分类https://blog.csdn.net/qq_40452317/article/details/88541647杭电oj(1000-1005)https://blog.csdn.net/qq_40452317/article/details/88541768算法-时钟问题-杭电1006https://blog.csdn.net/qq_40452317/...原创 2019-03-13 21:10:25 · 480 阅读 · 0 评论 -
目录-算法学习
数据结构部分:数据结构 -线性表 -循环表:https://blog.csdn.net/qq_40452317/article/details/80541872数据结构 线性表 约瑟夫问题:https://blog.csdn.net/qq_40452317/article/details/80542391数据结构 - 线性表-双向循环链表:https://blog.csdn...原创 2019-03-13 20:59:46 · 394 阅读 · 0 评论 -
算法-蛮力法-排序问题
蛮力法是一种直接的设计策略,蛮力法也叫暴力法,枚举法,或穷举法,他解决问题比较直接,常常根据问题直接求解,逐一列举并处理问题。下面是两种排序法。效率不高,但是简单。 选择排序 选择排序的基本思想是:对于n个元素的序列进行n-1趟排序,第一趟排序对于序列从头到尾扫描,找到最小的元素与第一个元素交换,第二趟,从第二个元素进行扫描,也是找到最小的一个元素,与第二个元素...原创 2019-02-26 17:19:38 · 1476 阅读 · 0 评论 -
算法-分治法-快速排序
快速排序 假设要排序的数组有n个,首先任意选择一个数(一般是第一个)作为关键数据, 然后,所有比他小的数全部放到他前面,所有比他大的数放在他后面,这个过程称为一趟排序,快排不是稳定的排序,也就是说,多个相同值的相对位置可能会发生变化。 一趟排序的算法: 1、设置两个变量,i=0,j=n-1. ...原创 2019-03-05 15:57:48 · 950 阅读 · 0 评论 -
算法-蛮力法-最近对问题
最近对问题 在n个点中,距离最近的两个点,在二维坐标平面中,两点分别是a(x1,y1),b(x2,y2),则两点距离是 d=sqrt((x1-x2)^2+(y1-y2)^2) 蛮力法,将平面内的n个点,两两组队,计算最小距离,注意,这儿没有方向,也就是说两点之间只需要求解一...原创 2019-02-28 19:23:48 · 5539 阅读 · 9 评论 -
算法-蛮力法-凸包问题
凸包的定义就是,由平面上n个点组成的集合,,其凸包就是包含这些点的最小凸边多边形。 给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸边多边形,它能包含点集中所有的点。 举例,如果是两个点,则包含这两点的凸包就是他们构成的线段;如果是三点,且不共线,则凸包就是以这三个点构成的三角形,共线,则是三点构成的直线,如果三点以上,如下图,...原创 2019-02-27 17:22:28 · 7097 阅读 · 0 评论 -
算法-蛮力法-旅行商问题
旅行商问题 旅行商问题(TravelingSalesmanProblem,TSP)是一个经典的组合优化问题。给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。 使用蛮力法,在时间的允许下,肯定能够得到解,结构思想简单,容易实现,但是,运行速度慢,当数量达到一定时,时间将会持续很久,不适用于大规模数据。 ...原创 2019-03-06 19:58:44 · 4657 阅读 · 0 评论 -
杭电oj(2011-2015)
2011#include<iostream>#include<math.h>#include<iomanip>using namespace std;int main(){ int m; cin>>m; while(m--) { double sum=1; int n,...原创 2019-03-19 16:46:43 · 393 阅读 · 0 评论 -
杭电oj(2000-2005)
2000#include<iostream>using namespace std; int main(){ char a,b,c,d; while(cin>>a>>b>>c){ if(a>b){ d = a; a = b; b ...原创 2019-03-17 21:21:48 · 170 阅读 · 0 评论 -
算法-减治法-二叉查找树的查找
算法-减治法-求中值和选择问题:https://blog.csdn.net/qq_40452317/article/details/88615748二叉查找树,又叫二叉排序树,如果不为空,它应该满足以下三个特点:1、树上的任一结点,该结点的值都大于它的非空左子树的值。2、树上的任一结点,该结点的值都小于它的非空右子树的值。3、任一结点的左右子树都是二叉搜索树。查找思路:...原创 2019-03-17 20:57:19 · 2140 阅读 · 1 评论 -
算法-减治法-求中值和选择问题
减治法减治法是一种一般性的算法设计技术,它利用了一个问题给定实例的解和同样问题较小实例的解之间的关系。一旦建立了这样一种关系,我们既可以自顶至下(递归)也可以自底至上地运用它(非递归)。减治法有3种主要的变种:减一个常量,常常是减1(例如插入排序)。 减一个常因子,常常是减去因子2(例如折半查找)。 减可变规模(例如欧几里得算法)。这里用减可变规模算法来求中值问题和选择问题。...原创 2019-03-17 19:47:23 · 5588 阅读 · 0 评论 -
算法-分治法-杭电oj1007
Problem DescriptionHave you ever played quoit in a playground? Quoit is a game in which flat rings are pitched at some toys, with all the toys encircled awarded.In the field of Cyberground, the po...原创 2019-03-12 17:21:44 · 870 阅读 · 0 评论 -
算法-分治法-循环赛的日程安排
问题:设有n=2^k个选手参加循环赛,要求设计一个满足以下要求比赛日程表:1)每个选手必须与其它n-1个选手各赛一次;2)每个选手一天只能赛一次。按照上面的要求,可以将比赛表设计成一个n行n-1列的二维表,其中第i行第j列的元素表示和第i个选手在第j天比赛的选手号,也就是对手。采用分治策略,可将所有参加比赛的选手分成两部分,n=2^k个选手的比赛日程表就可以通过n=2^(k-1)个...原创 2019-03-17 10:56:19 · 2641 阅读 · 0 评论 -
算法-时钟问题-杭电1006
Problem DescriptionThe three hands of the clock are rotating every second and meeting each other many times everyday. Finally, they get bored of this and each of them would like to stay away from t...原创 2019-03-12 16:58:08 · 1080 阅读 · 0 评论 -
算法-分治法-凸包问题
蛮力法的凸包问题:https://blog.csdn.net/qq_40452317/article/details/87976833第一步、把给定的点集中在横坐标上排序,就能得到p[0]和p[n-1]的直线,将求解凸包问题分解为求解上凸包和下凸包两个问题。//第一步:排序//排序,如果,横坐标相同,则按照纵坐标排序int compxy(point a,point b){ i...原创 2019-03-16 21:16:30 · 1548 阅读 · 1 评论