翻转字符串算法

functionreverseString(str){2//第一步,使用split()方法,返回一个新数组3//varsplitString="hello".split("");45varsplitString=str.split("");//将字符串拆分67//返回一个新数组["h","e","l","l","o"]89//第二步,使用reverse()方法创建一个新数组10//varreverseArray=["h","e","l","l","o"].reverse();1112varreverseArray=splitString.reverse();13//原数组元素顺序反转["o","l","l","e","h"]1415//第三步,使用join()方法将数组的每个元素连接在一起,组合成一个新字符串16//varjoinArray=["o","l","l","e","h"].join("");1718varjoinArray=reverseArray.join("");19//"olleh"2021//第四步,返回一个反转的新字符串22returnjoinArray;//"o...
代码星球 代码星球·2021-02-20

EM算法理解的九层境界

EM算法理解的九层境界EM就是E+MEM是一种局部下限构造K-Means是一种HardEM算法从EM到广义EM广义EM的一个特例是VBEM广义EM的另一个特例是WS算法广义EM的再一个特例是Gibbs抽样算法WS算法是VAE和GAN组合的简化版KL距离的统一第一层境界,EM算法就是E期望+M最大化最经典的例子就是抛3个硬币,跑I硬币决定C1和C2,然后抛C1或者C2决定正反面,然后估算3个硬币的正反面概率值。<imgsrc="http://www.51dev.com//FileUpload/news/202102/20210220010406955.jpg"data-caption=""data-size="normal"data-rawwidth="418"data-rawheight="262"class="content_image"width="418"/>这个例子为什么经典,因为它告诉我们,当存在隐变量I的时候,直接的最大...

过采样算法之SMOTE

SMOTE(SyntheticMinorityOversamplingTechnique),合成少数类过采样技术.它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如下图所示,算法流程如下。(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。 (2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为o。 (3)对于每一个随机选出的近邻o,分别与原样本按照公式o(new)=o+rand(0,1)*(x-o)构建新的样本。 或者:  Smote算法的思想其实很简单,先随机选定n个少类的样本,如下图  找出初始扩展的少类样本再找出最靠近它的m个少类样本,如下图...
代码星球 代码星球·2021-02-20

Boosting算法(一)

本章全部来自于李航的《统计学》以及他的博客和自己试验。仅供个人复习使用。Boosting算法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。我们以AdaBoost为例。  它的自适应在于:前一个弱分类器分错的样本的权值(样本对应的权值)会得到加强,权值更新后的样本再次被用来训练下一个新的弱分类器。        在每轮训练中,用总体(样本总体)训练新的弱分类器,产生新的样本权值、该弱分类器的话语权,一直迭代直到达到预定的错误率或达到指定的最大迭代次数。 有两个问题需要回答:1.每一轮如何改变训练数据的权重或者是概率分布    =>提高那些被前一轮若分类器错误分类样本的权重,而降低那些被正确分类样本的权重值,      so那些没有得到正确分类的数据由于其权重值加大而受到后一轮的弱分类器的更大关注。于是分类问题被一系列的弱分类器“分而治之”2.如何将如分类器组合成一个强分类器    =>弱分类器的组合,adaboost采取加权多数的表决方法:加大分类误差小的分类器的权值,使其在表决中起较大的作用,减少分类误差率大...
代码星球 代码星球·2021-02-20

人工神经网络算法原理和应用

人工神经网络什么是人工神经网络?我们先从他的结构谈起说明:通常一个神经网络由一个inputlayer,多个hiddenlayer和一个outputlayer构成。图中圆圈可以视为一个神经元(又可以称为感知器)设计神经网络的重要工作是设计hiddenlayer,及神经元之间的权重添加少量隐层获得浅层神经网络SNN;隐层很多时就是深层神经网络DNN ...

GBDT算法之流失预警模型

挖坑。。。来日方长...

29、Java并发性和多线程-非阻塞算法

以下内容转自http://ifeve.com/non-blocking-algorithms/:在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法。在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的。为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法。阻塞并发算法一个阻塞并发算法一般分下面两步:执行线程请求的操作阻塞线程直到可以安全地执行操作很多算法和并发数据结构都是阻塞的。例如,java.util.concurrent.BlockingQueue的不同实现都是阻塞数据结构。如果一个线程要往一个阻塞队列中插入一个元素,队列中没有足够的空间,执行插入操作的线程就会阻塞直到队列中有了可以存放插入元素的空间。下图演示了一个阻塞算法保证一个共享数据结构的行为:非阻塞并发算法一个非阻塞并发算法一般包含下面两步:执行线程请求的操作通知请求线程操作不能被执行Java也包含几个非阻塞数据结构。AtomicBoolean,AtomicInteger,AtomicLong,AtomicReferen...

分布式缓存设计:一致性Hash算法

缓存作为数据库前的一道屏障,它的可用性与缓存命中率都会直接影响到数据库,所以除了配置主从保证高可用之外还需要设计分布式缓存来扩充缓存的容量,将数据分布在多台机器上如果有一台不可用了对整体影响也比较小。不多说,你懂我意思的!缓存的分布式集群和应用服务器不同,缓存的分布式是每台机器上的缓存数据是不一样的,不像应用服务器是无状态的,每台机器上的服务是一致的。缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须找到缓存有需要数据的服务器。所以保证在新上线机器和删除机器的时候整个集群中的已经缓存的数据尽可能地还被访问得到是分布式缓存系统设计的终极目录(这句话有点长)。如何选择到正确的服务器需要使用好的路由算法,下面以简单的余数Hash算法为例来选择服务器:首先用缓存数据的key的hash值除以服务器的数目,得到的余数就是集群服务器列表的下标。这样就可以定位到正确的服务节点。比如有3台服务器,node1,node2,node3对应在服务器列表编号为1,2,3。key为“Hello”的缓存查询请求来了之后,计算Hello的Hash值,假如为23432113,除以3余数假如是1,那就说明数据在no...

Redis学习笔记(4)——Redis五大数据结构介绍以及应用场景

出处:https://www.jianshu.com/p/f09480c05e42    Redis是典型的Key-Value类型数据库,Key为字符类型,Value的类型常用的为五种类型:String、Hash、List、Set、OrderedSet下面我们详细介绍一下。一、Redis的内部内存管理原理     1、Redis内部使用一个redisObject对象来表示所有的key和value。     2、type:代表一个value对象具体是何种数据类型。  3、encoding:是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:"123""456"这样的字符串。  4、vm字段:只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的。Redis使用redisObject来表示...

八数码问题及A*算法

一.八数码问题八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题的一个状态就是棋子在棋盘上的一种摆法。棋子移动后,状态就会发生改变。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。八数码问题一般使用搜索法来解。搜索法有广度优先搜索法、深度优先搜索法、A*算法等。这里通过用不同方法解八数码问题来比较一下不同搜索法的效果。二.搜索算法基类1.八数码问题的状态表示八数码问题的一个状态就是八个数字在棋盘上的一种放法。每个棋子用它上面所标的数字表示,并用0表示空格,这样就可以将棋盘上棋子的一个状态存储在一个一维数组p[9]中,存储的顺序是从左上角开始,自左至右,从上到下。也可以用一个二维数组来存放。2.结点搜索算法中,问题的状态用结点描述。结点中除了描述状态的数组p[9]外,还有一个父结点指针last,它记录了当前结点的父结点编号,如果一个...
代码星球 代码星球·2021-02-18

排列组合算法

  排列:从n个不同元素中,任取m(m<=n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m<=n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号A(n,m)表示。A(n,m)=n(n-1)(n-2)……(n-m+1)=n!/(n-m)!此外规定0!=1   组合:从n个不同元素中,任取m(m<=n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m<=n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号C(n,m)表示。C(n,m)=A(n,m)/m!=n!/((n-m)!*m!); C(n,m)=C(n,n-m)。C语言使用标志位实现#include<iostream>usingnamespacestd;#defineMaxN10charused[MaxN];intp[MaxN];chars[MaxN];//从n个元素中选r个进行排列voidperm...
代码星球 代码星球·2021-02-18

Linux内核数据结构之链表

与经典双向链表比较  经典双向链表如图。其中有一个pre指针和一个next指针,数据是在链表的节点内。   内核链表如图。每一个链表节点内只有一个pre指针和一个next指针,整个链表节点嵌入到了一个需要使用链表的结构体内。内核链表介绍  内核链表节点结构体定义如图。其中next指针指向下一个链表节点,prev指针指向前一个链表节点。   前面已经说过,内核链表节点是嵌入到数据节点内的,那么就产生了一个问题,如何访问到链表所在结构体的指针呢?  内核链表中通过list_entry宏来访问到链表所在结构体的指针,如下图。其中有3个参数ptr、type、member,根据注释可知,ptr是指向链表节点成员的指针变量,type就是链表节点嵌入的结构体,即包含数据成员的结构体,member是type结构体中定义的链表节点成员使用的名称。   list_entry宏中还包含了2个宏,分别为container_of和container_of中使用的offsetof,分别如下两图。  在GNUC中,圆括号包围的符合语句可以生成返回值,在container_of中,定义_...

什么是Kmp算法?

2.暴力匹配算法  假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?  如果用暴力匹配的思路,并假设现在文本串S匹配到i位置,模式串P匹配到j位置,则有:如果当前字符匹配成功(即S[i]==P[j]),则i++,j++,继续匹配下一个字符;如果失配(即S[i]!=P[j]),令i=i-(j-1),j=0。相当于每次匹配失败时,i回溯,j被置为0。  理清楚了暴力匹配算法的流程及内在的逻辑,咱们可以写出暴力匹配的代码,如下:[cpp] viewplain copy  print?int ViolentMatch(char* s, char* p)  {      int sLen = strlen(s);      int ...
代码星球 代码星球·2021-02-18

面试准备——数据结构

https://blog.csdn.net/jianghao233/article/details/82827244https://www.cnblogs.com/chanshuyi/p/4998776.html...
代码星球 代码星球·2021-02-17

大数据学习——mapreduce案例join算法

需求:用mapreduce实现selectorder.orderid,order.pdtid,pdts.pdt_name,oder.amountfromorderjoinpdtsonorder.pdtid=pdts.pdtid 数据:orders.txtOrder_0000001,pd001,222.8Order_0000001,pd005,25.8Order_0000002,pd005,325.8Order_0000002,pd003,522.8Order_0000002,pd004,122.4Order_0000003,pd001,222.8Order_0000003,pd001,322.8pdts.txtpd001,applepd002,bananapd003,orangepd004,xiaomipd005,meizu pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www...
首页上一页...678910...下一页尾页