算法

《算法图解》笔记

爷,独闯天下 提交于 2020-03-09 03:38:22
看书还得写笔记,文字的写不来,还是写电子的,自己的字跟狗爬一样,打出来的字好多了。 后续把自己看的基本关于网络的书也写点博客,一便于查寻,二便于加强记忆,要不然跟小说一样,看了就忘了。 第1章:算法介绍 理解大O表示法,并非以秒为单位。大O表示法让你能够比较操作数,它指出了算法运行时间的增速。 大O表示法说的是在查找情况中最糟的情形。 从快到慢晕倒的5种大O运行时间。 O(log n),也叫对数时间,这样的算法包括二分查找。 O(n), 也叫线性时间,这样的算法包括简单查找。 O(n * log n),这样的算法包括快速排序---一种比较快的排序算法 O(n2)【表示n的平方】, 这样的算法包括选择排序---一种速度较慢的排序算法 O(n!), 这样的算法包括旅行商的解决方案---一种非常慢的算法 第一章主要理解: 算法的速度指的并非时间,而是操作数的增速。 讨论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。 算法的运行时间用大O表示法表示。 O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快很多。 小结: 二分查找的速度比简单查找快很多。 O(logn)比O(n)快。需要搜索的元素越多,前者比后者就快得更多 算法运行时间并不以秒为单位。 算法运行时间是从其增速的角度度量的。 算法运行时间用大O表示法表示 最后上书中的二分查找代码 def

关于非对称加密的一点解说

隐身守侯 提交于 2020-03-09 00:59:14
非对称加密定义: 非对称加密算法又称 现代加密算法 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。 对称加密定义 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文( 原始数据 )和加密 密钥 (mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的 密钥 及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的 密钥 只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。 从以上的定义我们不难看出: 对称加密和非对称加密的一个关键区别:对称加密,只有一个秘钥,发送方和接收方都使用这个秘钥进行加密和解密;而非对称加密,是发送方A:拥有 公开密钥(publickey) 和 私有密(privatekey),即公钥,私钥,接收方B:也有自己的公钥,私钥; 公开密钥和私有密钥是 一对 用 公开密钥 对数据进行 加密 ,只有用 对应的私有密钥 才能 解密 用 私有密钥 对数据进行 加密 ,只有用 对应的公开密钥 才能 解密 大致的过程就是这样的,即: 1.A要向B发送信息

伙伴系统和slab机制

*爱你&永不变心* 提交于 2020-03-08 22:17:34
伙伴系统 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表。四级页表分别为: 页全局目录(Page Global Directory) 页上级目录(Page Upper Directory) 页中间目录(Page Middle Directory) 页表(Page Table) 页全局目录包含若干页上级目录的地址,页上级目录又依次包含若干页中间目录的地址,而页中间目录又包含若干页表的地址,每一个页表项指向一个页框。Linux中采用4KB大小的页框作为标准的内存分配单元。 在实际应用中,经常需要分配一组连续的页框,而频繁地申请和释放不同大小的连续页框,必然导致在已分配页框的内存块中分散了许多小块的空闲页框。这样,即使这些页框是空闲的,其他需要分配连续页框的应用也很难得到满足。 为了避免出现这种情况,Linux内核中引入了伙伴系统算法(buddy system)。把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。 假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块

算法日记

℡╲_俬逩灬. 提交于 2020-03-08 22:00:18
1. 斐波那契数列 递归有很多重复操作,可以通过以下方式解决 2. vector的去重操作,通过s[i++] 3. 二分查找的C版本 以后补充代码 来源: https://www.cnblogs.com/caopf/p/12445118.html

十大排序算法C++实现(C++11)

你离开我真会死。 提交于 2020-03-08 20:57:57
# include <cstdio> # include <iostream> using namespace std ; //c++11 使用 bool rule1 ( int a , int b ) { return a < b ; } bool rule2 ( int a , int b ) { return a > b ; } void swap ( auto & a , auto & b ) { auto tem = a ; a = b ; b = tem ; } //my quick sort start 1 int find_mid ( auto * a , int l , int r , bool ( * cmp ) ( auto , auto ) ) { int mid = ( l + r ) / 2 ; if ( ( cmp ( a [ l ] , a [ mid ] ) && cmp ( a [ mid ] , a [ r ] ) ) || ( ! cmp ( a [ l ] , a [ mid ] ) && ! cmp ( a [ mid ] , a [ r ] ) ) ) return mid ; else if ( ( cmp ( a [ mid ] , a [ l ] ) && cmp ( a [ l ] , a [ r ] ) ) || ( !

文献阅读笔记(三)

北战南征 提交于 2020-03-08 19:46:32
2015 Information Fusion_Faceted fusion of RDF data笔记整理 一、 论文整理思路流程 1.1 论文的相关研究工作 距离匹配的RDF融合算法 基于内联的RDF融合算法 基于规则限制的RDF融合算法 RDF数据碎片化:特定主题的RDF数据分散在众多不同的数据集中,每一个数据集中的RDF数据仅包含主题的某一个方面。 将分散的RDF数据根据不同的方面整合到同一主题中 从RDF搜索引擎返回的结果中构造TRG(特定主题的RDF图)然后使用RDF分割算法发现一系列方面。 使用RDF分割算法发现一系列方面。 对于TRG的分析:在TRG中,节点是三元组的s或者o,边则是对应三元组的p,一条边及两端顶点构成一条三元组。而在TRG中边被分为两种类型,一种反映了s与o的关系,另一种则反映了两个s之间的关系。TRG图可以仅考虑s之间的边而被分割为结构图。 关于使用的数据集:通过从网络爬取数据获得六个计算机领域主题的数据集,首先人工标注出各个主题的方面,用于之后的方法对比 关于获得的TRG图:发现每一个节点的平均的度是2到3.5,98%的节点是孤立的;此外两个相连接的顶点大部分(96%)都指向同一个方面。此外根据Jaccard相似度计算得到两节点相似度分数越高越可能指向同一个节点(由此可以设置一个阈值)。 方面发现算法:将RDF图分割为k个不相交的子图

【算法】第三章查找

。_饼干妹妹 提交于 2020-03-08 18:27:45
##顺序查找 - 无序链表 太简单、直接上代码了 public Node(Key key,Value val,Node Next) { this.key = key; this.val = val; this.next = next; } public Value get(Key key) { for(Node n = first;n!=null;n=n.next) { if(n.key==key) { return n.val; } } return null; } public void put(Key key,Value val) { for(Node n = first;n!=null;n=n.next) { if(n.key==key) { n.val=val; return; } } first = new Node(key,val,first); } 未命中 查找 N次 插入 N次 向空表插入N个数据 (N^2)/2 次比较 ##二分法查找 -数组列表 也不是很难 直接代码 //get public Value get(Key key) { int i = rank(key); if(i<N&&keys[i].compareTo(key)==0) {return vals[i];} else return null; } //put public void put

推荐系统Lambda架构算法(七):基于内容的推荐算法(Content-Based)

喜夏-厌秋 提交于 2020-03-08 17:46:33
文章目录 基于内容的推荐算法(Content-Based) 简介 基于内容的推荐实现步骤 问题:物品的标签来自哪儿? 基于内容推荐的算法流程: 物品冷启动处理: 基于内容的推荐算法(Content-Based) 简介 基于内容的推荐方法是非常直接的,它以物品的内容描述信息为依据来做出的推荐,本质上是基于对物品和用户自身的特征或属性的直接分析和计算。 例如,假设已知电影A是一部喜剧,而恰巧我们得知某个用户喜欢看喜剧电影,那么我们基于这样的已知信息,就可以将电影A推荐给该用户。 基于内容的推荐实现步骤 画像构建 。顾名思义,画像就是刻画物品或用户的特征。本质上就是给用户或物品贴标签。 物品画像 :例如给电影《战狼2》贴标签,可以有哪些? "动作"、"吴京"、"吴刚"、"张翰"、"大陆电影"、"国产"、"爱国"、"军事"等等一系列标签是不是都可以贴上 用户画像 :例如已知用户的观影历史是:"《战狼1》"、"《战狼2》"、"《建党伟业》"、"《建军大业》"、"《建国大业》"、"《红海行动》"、"《速度与激情1-8》"等,我们是不是就可以分析出该用户的一些兴趣特征如:“爱国”、“战争”、“赛车”、“动作”、“军事”、“吴京”、"韩三平"等标签。 问题:物品的标签来自哪儿? PGC 物品画像–冷启动 物品自带的属性(物品一产生就具备的):如电影的标题、导演、演员、类型等等 服务提供方设定的属性

最小生成树算法——kruskal

风流意气都作罢 提交于 2020-03-08 16:38:35
如图,输出最小生成树的生成过程 算法思想: 每个边的权值进行从小到大排序 然后从小到大添加到最小生成树中,若添加一个边后构成环路,则此边不能添加。直到每个顶点都加入到最小生成树中。 需要一个结构体来存储 每个边的权值与始末顶点。再进行排序。 struct { VexType head ; VexType tail ; ArcType lowcost ; } Edge [ MAXSIZE ] ; //存入每条边的首尾以及权值 通过无向图写出邻接矩阵,调用函数创建邻接矩阵 VexType vexs [ 7 ] = { '0' , '1' , '2' , '3' , '4' , '5' , '6' } ; ArcType arcs [ 7 ] [ 7 ] = { { 0 , 17 , MAXNUM , MAXNUM , MAXNUM , 10 , MAXNUM } , { 17 , 0 , 16 , MAXNUM , MAXNUM , MAXNUM , 14 } , { MAXNUM , 16 , 0 , 12 , MAXNUM , MAXNUM , MAXNUM } , { MAXNUM , MAXNUM , 12 , 0 , 19 , MAXNUM , 18 } , { MAXNUM , MAXNUM , MAXNUM , 19 , 0 , 25 , 24 } , { 10 ,