GC算法(标记清除算法) 简介 标记清除算法就如他字面上的意思一样,对程序中的非活动对象进行标记,随后清楚。通过这两个阶段令不能利用的空间重新得到利用。 标记阶段:就是对堆上的对象进行遍历并在便利过程中对活动对象以及活动对象所能引用的对象进行活动状态标记。遍历阶段根据方式不同可以分为深度优先和广度优先,由于深度优先在内存的占用上比广度小,一般选择深度优先遍历。 清除阶段:这个阶段会对堆上的对象进行一次遍...
(我已经把CSDN当作笔记本了~…,这里语言会浅显一点不想搞得很高级的样子) 高精度是各类信息竞赛中的必会类型,高精度一般就是整数位太长,小数位太大,程序很难直接运算或表达。 直接进入正题,不磨蹭,将问题分析一点点解决。 Q1: 为什么需要高精度 c语言现有的类型无法存储,上图,看一眼即可 Q2:如何实现加法,通过什么实现 小学我们学过,加减乘除,对于每一位,满十进1,不满十直接相加即可。对于高精度的加法,采用的也...
微信搜索:码农StayUp 主页地址:https://gozhuyinglong.github.io 源码分享:https://github.com/gozhuyinglong/blog-demos1. 前言 迄今为止,已经介绍了《 二叉查找树 》和《 AVL树 》,我们始终假设可以把整个数据结构存储在内存中。可是,如果数据多到内存装不下,这就意味着必须把数据放在磁盘上,显然这些数据结构不再适用。 问题在于磁盘的I/O速度是远远不如内存访问速度的,然而从一棵树中查找到某个元素,必须从根节点一层...
Graham扫描法 时间复杂度:O(n㏒n) 思路:Graham扫描的思想是先找到凸包上的一个点,然后从那个点开始按逆时针方向逐个找凸包上的点,实际上就是进行极角排序,然后对其查询使用。 步骤:把所有点放在二维坐标系中,则纵坐标最小的点一定是凸包上的点,如图中的P0。 把所有点的坐标平移一下,使 P0 作为原点,如上图。 计算各个点相对于 P0 的幅角 α ,按从小到大的顺序对各个点排序。当 α 相同时,距离 P0 比较近的排在前面。例...
微信搜索:码农StayUp 主页地址:https://gozhuyinglong.github.io 源码分享:https://github.com/gozhuyinglong/blog-demos1. 栈(Stack) 栈又叫堆栈,是一种运算受限制的线性表,限定只能在一端进行插入和删除操作,该端称为栈顶(Top),相对的另一端叫栈底(Bottom)。 根据栈的定义可知,最先进入栈的元素在栈底,最后进入栈的元素在栈顶。而删除元素刚好相反,即删除顺序从栈顶到栈底 对栈的操作只有两种:入栈(push):又...
MATLAB优化算法所有函数超详解 1. 非线性优化1.1 无约束1.1.1 fminsearch函数1.1.2 fminunc函数 1.2 有约束1.2.1 fminbnd函数1.2.2 fmincon函数 1.3 多目标优化1.3.1 fminimax函数1.3.2 fgoalattain函数2. 线性规划2.1 linprog函数2.2 intlinprog函数 3. 二次规划quadprog函数4. 最小二乘优化4.1 非线性4.1.1 lsqcurvefit函数4.1.2 lsqnonlin函数 4.2 线性4.2.1 lsqlin函数4.2.2 lsqnonneg函数5. 非线性方程零点5.1 fsolve函数5.2 ...
前言 上一节关于泛型算法的介绍中,我们使用过sort排序算法,仅仅传入了vector的开头和结尾的两个迭代器。该算法还会接受第三个参数:谓词参数(predicate) 谓词是一个可调用的表达式,返回一个能用做条件的值。 所有的标准库使用的谓词分为两类: 一元谓词(单一参数)二元谓词(两个参数) 介绍lambda 一个lambda表示一个可调用代码单元。我们可以把它理解为一个未命名的内敛函数。 形式如下: [capture list] (parameter list) -...
简介 标准库提供了超过100个算法,这些算法有一致的结构。 理解这些算法的基本方法是了解他们是否读取元素、改变元素或者重排元素顺序。 泛型算法特点: 算法不依赖容器所保存的元素类型。 只要有迭代器能够访问元素即可。大多数算法都会使用一个或多个元素上的操作,通常,我们可以使用自定义的操作来代替默认的运算符。算法本身永远不会执行容器上的操作,只是运行在迭代器上,执行迭代器的操作。 1. 只读算法 // findvector<int...
什么是栈百度百科上,栈是这么定义的:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。稍微介绍一下关键名词:运算受限:也就是这个表你不能...
前言通过前面数据结构与算法前导我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容。当然,我用自己的理解解分享给大家。其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系!线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现。顺序表、链表:物理结构,他是实现一个结构实际物理地址上的结构。比如顺序表就是用数组实现。而链表用指针完成主要工作。不同的结构...
本文是《算法》书1.5节 动态连通性问题 的读书笔记 问题描述 ? 问题的输入是一列整数对,其中每个整数都表示一个某种类型的对象,一对整数p q可以被理解为“p和q是相连的”。我们假设“相连”是 一种对等的关系,这也就意味着它具有: ? □自反性:p和p是相连的; ? □对称性:如果p和q是相连的,那么q和p也是相连的; ? □传递性:如果p和q是相连的且q和r是相连的, 那么p和r也是相连的。 ? 对等关系能够将对象分为多个等价类。在...
文章目录 什么是决策树熵、条件熵ID3、C4.5CART 什么是决策树 决策树可以简单理解为是一种根据特征信息不断分裂,直至达到某一阈值(可以是max_depth、min_node_leafs等)分裂结束,就是一串的if…then…结构。那么谁作为第一个if判断的特征呢?这就需要熵、条件熵、信息增益登场了。 熵、条件熵 熵是表示随机变量Y不确定的度量,熵越大则越混乱越无法确定;越小则越肯定,例如拜登是男的,entropy=0。下面是熵的计算公...
1 前言 有关TSP问题的求解方法层出不穷,遗传算法、模拟退火、粒子群算法之类的介绍已经比较多了,但是发现关于自适应大领域搜索算法(Adaptive Large Neighborhood Search, ALNS)的介绍比较少,而且示例代码注释不太详细,刚接触的时候学起来有点费劲,就把学习资料和自己理解的过程简单写一下,造福和我一样的菜鸟吧。 2 什么是自适应大领域搜索 概念理解:干货 | 自适应大邻域搜索(Adaptive Large Neighborhood Search)入门到精通...
我们经常使用决策树处理分类问题,近来的调查表明决策树也是经常使用的数据挖掘算法。这一系列博客文章都是基于前人的经验,加入一些自己的拙见,仅供参考。一、决策树构建 1、工作原理图3-1所示的流程图就是一个决策树,正方形代表判断模块,椭圆形代表终止模块,表示已经得出结论,可以终止运行。从判断模块引出的左右箭头称作分支,它可以到达另一个判断模块或者终止模块。 图3-1构建了一个假想的邮件分类系统,它首先检测发送邮...
1. 概述1.1 集成学习 目前存在各种各样的机器学习算法,例如SVM、决策树、感知机等等。但是实际应用中,或者说在打比赛时,成绩较好的队伍几乎都用了集成学习(ensemble learning)的方法。集成学习的思想,简单来讲,就是“三个臭皮匠顶个诸葛亮”。集成学习通过结合多个学习器(例如同种算法但是参数不同,或者不同算法),一般会获得比任意单个学习器都要好的性能,尤其是在这些学习器都是"弱学习器"的时候提升效果会很明显。 弱学习...