算法

记录一下jvm的相关知识点

有些话、适合烂在心里 提交于 2020-03-11 13:22:06
java 运行时数据区域: 程序计数器 => (每个线程都包含一个程序计数器)用来记录字节码执行的行号,字节码指令的循环,跳转,异常处理,线程恢复等需要依靠计数器。 Java虚拟机栈 => 主要用来描述Java方法执行的内存模型,(每个线程都包含一个虚拟机栈)主要用来处理方法的调用,虚拟机栈中的存储单元是栈帧,方法在执行的同时都会在虚拟机栈中创建一个栈帧,栈帧包含操作数栈,局部变量表,动态链接和方法出口等,每个方法从调用到执行完毕都对应着一个栈帧在虚拟机栈中的入栈和出栈的过程。局部变量表的存储单位为slot(4个字节),因此double 和long类型需要占用2个slot的存储空间。 栈的深度有一定限制,当深度操作最大的调用栈大小会出现StackOverflowError异常。 本地方法栈 => 为虚拟机执行java方法的服务(native方法),类似虚拟机栈 java堆 => 对象和数组存储的场所,也是gc收集器的主要管理区域,现在收集器基本采用分代收集算法,可通过-Xmx -Xms来分配堆内存大小,当堆内存无法分配内存时,会出现OutOfMemoryError异常。 方法区 => 用于存储已被虚拟机加载的类信息,静态变量,常量以及即时编译器编译后的代码等,方法区无法分配内存是会出现OutOfMemoryError异常。 运行时常量池 =>方法区的一部分

Vue和React中的diff算法核心

早过忘川 提交于 2020-03-11 12:45:33
虚拟DOM js对象替代真实DOM, 更改避免回流(重新渲染),一次性通过render函数渲染成真实DOM 声明的样子 输出的样子 实现render函数生成真实DOM 设置属性 render函数 渲染函数 diff算法 diff算法其实就是对DOM进行different比较不同的一种算法(虚拟的比较更节约性能) __ 补丁:用来更新DOM的任务__ 比较原则 平级对比 不跨级对比(无A__删除__A) 同级复用 遍历规则 先序深度优先遍历(从根节点向下级子节点遍历) 125叫广度优先 12345深度优先 实现diff函数 比较思路规则 type相同,比较属性,属性不同生成补丁包patch {type:'ATTRS',attrs:{class:'xx'} } 新节点在原DOM中不存在 {type:'REMOVE',index:xxx} 节点类型不同,直接替换 {type:'REPLACE',newNode:xxx} 文本变化 {type:'TEXT',text:'xxx'} 来源: https://www.cnblogs.com/qidaoxueyuan/p/12461581.html

排序算法,冒泡,高级选择排序

大兔子大兔子 提交于 2020-03-11 12:42:37
冒泡:相邻的两个比较,如果前面的比后面的大就换位置 package lesson04 ; public class demo01 { public static void main ( String [ ] args ) { // TODO Auto-generated method stub //数组高级选择排序原理 int [ ] arr = { 23 , 55 , 56 , 32 , 54 } ; for ( int i = 0 ; i < arr . length - 1 ; i ++ ) { System . out . println ( "第" + ( i + 1 ) + "轮比较" ) ; for ( int j = i + 1 ; j < arr . length ; j ++ ) { System . out . println ( i + "=" + j ) ; if ( arr [ i ] > arr [ j ] ) { int tmp = arr [ i ] ; arr [ i ] = arr [ j ] ; arr [ j ] = tmp ; } } } //遍历 for ( int i = 0 ; i < arr . length ; i ++ ) { System . out . println ( arr [ i ] ) ; } } } 2

hash一致性算法讲解

江枫思渺然 提交于 2020-03-11 11:23:31
概述 一致Hash在分布式应用中,是常见的负载均衡方式,多用于资源请求映射分散到具体某一台节点服务器,使得每一台服务器能固定处理部分请求,同时,能较小的减少由于动态增减服务器节点带来请求的失效,保证系统更好对外提供服务。 从问题的发展引入思考 图1.假设现在有200万张图片资源,需要随机的分配到3台服务器 除余法 很多人一下子就想到了除余法,通过给每个图片唯一编号(较少的情况),或者通过hash文件名(假设文件名不重复)得到唯一的数字串,然后除余就能随机存放到服务器。 hash ( 文件名 ) % n 正常情况下这个算法已经基本满足,因为每次除余之后必然会得到0,1,2三个数,分别对应三台服务器,下次需要找回这些图片资源只要按同样的方式hash之后就能在对应服务器找到。 但是当图片资源过多无法满足需要增加一台服务器的时候,因为除数的改变,带来余数的改变,也就是服务器数量的改变,带来存储位置的改变,之前存储的图片资源失去了意义,在缓存服务器中,这会导致大量缓存失效,造成缓存的雪崩,为了解决这些问题,一致性hash应运而生。 揭开一致性Hash神秘面纱 首先了解一下计算一致性hash时采用的方式和步骤: 在一个0~2^32区间的圆环上,计算服务器节点的hash值,。 用同样的方式计算存储数据的hash,并映射到相同的圆上。 然后从数据映射到的位置开始顺时针查找

机器学习基础——简单易懂的K邻近算法,根据邻居“找自己”

天涯浪子 提交于 2020-03-11 09:52:34
本文始发于个人公众号: TechFlow ,原创不易,求个关注 今天的文章给大家分享机器学习领域非常简单的模型——KNN,也就是K Nearest Neighbours算法,翻译过来很简单,就是K最近邻居算法。这是一个经典的 无监督学习 的算法,原理非常直观,易于理解。 监督与无监督 简单介绍一下监督这个概念,监督是supervised的直译,我个人觉得不太准确,翻译成 有标注和无标注 可能更加准确。也就是说如果模型在学习的时候,既能够看到样本的特征又可以看到样本的结果,那么就是有监督学习,如果只能看到特征,但是并不能知道这些特征对应的结果,那么就是无监督学习。 之前我们介绍的线性回归和逻辑回归模型就是典型的有监督模型,因为模型在训练的时候知道样本的结果,并且根据我们设计的损失函数朝着贴近样本真实结果的方向“努力”。而今天介绍的KNN算法则是一个经典的无监督学习模型,算法在训练的时候并不知道正确的结果是什么,也因此模型根本没有损失函数这个概念,那么自然整个算法的运行原理也很监督模型大相径庭。 算法概述 其实KNN算法的原理非常简单,简单到只有一句话,就是 找到样本的K个邻居 ,然后这K个邻居出现次数最多的结果就是答案。 但是我们怎么定义邻居,又怎么找到这些邻居呢? 在回答这个问题之前,我们先来看一个例子。 假设现在有这么一个问题,我需要知道全城的用户有哪些用户有车

浅谈几句“搜索算法”

左心房为你撑大大i 提交于 2020-03-11 09:48:09
人类总是在追求规律,因为按照规律做事,确实可以剩下大量的时间,算法也是一样,但我们应该清醒的认识到,很多问题都不是能靠找规律的事情能搞定的。有时候最笨的方法也是好方法,比如说穷举之类的。特别是计算机出现后,很多问题用计算机穷算其实更简单。搜索算法其实就是这种笨办法,当然,搜索算法比穷举要好些。 搜索算法的概要就是先找到或者猜到某个“解”点,然后通过一定的步长向领域内进行搜索,如果”解“更优,就继续搜索。搜索算法能解决的当然是问题解域具有连续性的问题,面临的问题包括局部最优和全局最优之间的判定。所以很多搜索算法都会随机的找到多个点进行多次搜索,以达到搜索全局最优的目的。 当然,从基本原理的角度来说,适合搜索算法进行求解的问题域,并不一定能通过这种算法找到全局最优解。所以科学家们就对这类问题进行细分,比如凸集,凹集等。 搜索算法也不仅仅是一种算法,同时也是一种思维方式,在我们无法发现问题求解的强规律的时候,我们不妨转到”猜“,”穷举“上来,通过先求解回头再总结的方式找出一些求解的规律。 来源: CSDN 作者: hawksoft 链接: https://blog.csdn.net/hawksoft/article/details/104789133

floyed 算法计算最短路径

梦想的初衷 提交于 2020-03-11 04:04:37
在某些应用中,需要计算两个节点之间的最短路径,比较有名的是Dijkstra算法和floyed算法,都是基于节点的邻接关系求解任意两点的可达性和最短可达路径。 Dijkstra算法比较容易理解,无论是广度优先还是深度优先都可以根据具体应用场景进行选择,不过,在计算较为复杂的场景中,比如节点数比较多,存在众多环路等情况,由于仅仅知道邻接关系,Dijkstra算法就显得力不从心,经常会在无关路径上浪费大量时间。相对而言,floyed算法应付此种场景就显得轻松很多。不过floyed 算法对计算有较高要求,算法复杂度为N的3次方,适合于节点间的关系不会经常变动的情况,提前将任意两点间的路径计算好,需要时直接使用即可。而Dijkstra算法属于轻量级的,对计算要求不高,在50-100个节点内进行还是实时查找也会比较轻松,反馈时间也比较快。 floyed 算法用程序实现极其简单,只需要对节点个数进行三个循环,在完成算法后,通过路径矩阵找到任意给定两点的最短路径,向floyed算法学习,路径的查找算法采用递归方式,尽量写的简洁。 def init_matrix(relations): LEN = len(relations) INF = 99999 #初始化 距离矩阵和路径矩阵,默认所有位置都是INF D = [[INF for x in range(LEN)] for y in range

概述

爷,独闯天下 提交于 2020-03-11 02:50:41
在预测模型构建方面,由于影响电力负荷变化的因素具有高度的随机性,电力负荷变化也具有较高的随机性,增加了负荷预测的难度。 现有的负荷预测模型可分为三大类:经典预测模型、人工智能预测模型和机器学习预测模型 。经典的预测模型主要包括回归分析和时间序列方法。文献[5]提出了一种多 元线性回归(MLR) 方法。该方法以趋势、温度、周日等变量为基本变量,构造了更多的二阶温度、三阶温度等组合变量。然后利用这些变量训练再结晶模型。在[6]中,提出了一种 时间序列方法 ,其中考虑外生变量,构造了具有广义自回归条件和特征成分的模型。从而避免了传统时间序列模型忽略外部影响因素的缺陷。这些经典预测模型属于线性预测方法,结构简单,预测速度快。然而,对于非线性负荷,这些线性预测方法很难提高预测精度。人工智能预测的主要模型是 神经网络(NN) [7],[8],它包括 反向传播神经网络(BPNN )和 极端学习机(ELM) 。神经网络具有很强的非线性逼近能力和自学习能力,但网络参数的选择比较困难。虽然ELM可以解决这个问题,但它是不稳定的。机器学习预测模型主要包括 最小二乘支持向量机(LSSVM) [9]、 随机森林(RF)[8]和梯度增强回归树(GBRT) [8]、[10]。LSSVM是支持向量机的一种扩展,它克服了支持向量机的缺点,降低了计算复杂度,提高了求解速度。LSSVM对大负载增长仍然有效。然而

Vue和React中的diff算法核心

不羁岁月 提交于 2020-03-11 01:41:35
虚拟DOM js对象替代真实DOM, 更改避免回流(重新渲染),一次性通过render函数渲染成真实DOM 声明的样子 输出的样子 实现render函数生成真实DOM 设置属性 render函数 渲染函数 diff算法 diff算法其实就是对DOM进行different比较不同的一种算法(虚拟的比较更节约性能) __ 补丁:用来更新DOM的任务__ 比较原则 平级对比 不跨级对比(无A__删除__A) 同级复用 遍历规则 先序深度优先遍历(从根节点向下级子节点遍历) 125叫广度优先 12345深度优先 实现diff函数 比较思路规则 type相同,比较属性,属性不同生成补丁包patch {type:'ATTRS',attrs:{class:'xx'} } 新节点在原DOM中不存在 {type:'REMOVE',index:xxx} 节点类型不同,直接替换 {type:'REPLACE',newNode:xxx} 文本变化 {type:'TEXT',text:'xxx'} 来源: CSDN 作者: 凃老师 链接: https://blog.csdn.net/tjx11111/article/details/104779101

数据结构 学习记录 1

你离开我真会死。 提交于 2020-03-11 01:13:11
数据结构 学习记录 1 A 计算 1.什么是算法? 计算 = 信息的处理 借助某种工具,遵照一定的规则,以明确而机械的形式进行 计算模型 = 计算机 =信息处理工具 所谓算法,即在特定计算模型下,旨在解决特定问题的指令序列 输入:待处理的信息(问题) 输出:经处理的信息(答案) 正确性:的确可以解决指定的问题 确定性:任一算法都可以描述为基本操作组成的序列 可行性:每一基本操作都可以实现,且在常数时间内完成 有穷性:对于任何输入,经有穷次基本操作,都可得到输出 举个例子: 那么对于这个例子来说,输入就是直线L上的点p,输出就是经过p且垂直于L打的直线,在这个由绳子组成“计算模型”,运行了得到垂线这个算法 2.算法有穷性: 关于算法的有穷性上面已经介绍到了,现在举一个例子:Hailstone Sequence。 希尔顿序列问题是一个著名的数学问题,至今未证明其正确性,也没证明其错误性,即任何一个正整数N,如果是偶数的话就除以2,如果是奇数的话就乘以3再加上1,最后这个数都会变为1。其表达式如下: 通过递归发现,每次对n这个数字进行判断奇偶性,采用不同的计算公式。例:当n=5的时候,结果:Halistone(5)={5,16,8,4,2,1} 我们针对这个过程写出一个程序: 1int halistone(int n) { int length =0; while(n>1) { (n%2