算法及数据结构
a925907195
best
展开
-
倒水问题解决思路
这个问题是在之前面试一个公司的时候遇到的,以前没遇到过这种问题,猛然上来有点懵逼。不过几分钟整理思路有了些许解题方案,但临时想的方案漏洞还是有些,思路有了,大方向对了,写代码虽然说就简单了,但大脑混沌状态真的是还不一定写出完美的代码。题意:给你两个容器 A B 问是否能够经过有限的步骤倒水,得到容量为 C 的水输出最小的步数,同时输出每一步的操作。如果不能达到目标状态,则输出i...原创 2019-05-11 21:03:10 · 5223 阅读 · 0 评论 -
对象序列化的几种方式的比较
在java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种:一是把对象包装成JSON字符串传输,二是采用java对象的序列化和反序列化。随着Google工具protoBuf的开源,protobuf也是个不错的选择。对JSON,Object Serialize,ProtoBuf 做个对比。定义一个待传输的对象UserVo:转载 2016-09-04 19:43:50 · 3686 阅读 · 0 评论 -
美团的笔试题中的一种大数除法的方法
大数是算法语言中的数据类型无法表示的数,其位数超过最大数据类型所能表示的范围,所以,在处理大数问题时首先要考虑的是怎样存储大数,然后是在这种存储方式下其处理的实现方法。一般情况下大数的存储是采用字符数组来存储,即将大数当作一个字符串来存储,而对其处理是按其处理规则在数组中模拟实现。大数除法,应该算是四则运算里面最难的一种了。不同于一般的模拟,除法操作步数模仿手工除法,而是利原创 2015-09-12 21:42:31 · 1330 阅读 · 0 评论 -
几种排序以及其时间复杂度 总结
几种排序以及其时间复杂度 转载▼1.选择排序:不稳定,时间复杂度 O(n^2) 选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。 2.插入排序:稳定,时间复杂度 O(n^2) 插入排序的基本思想是,经过i-转载 2014-09-25 18:05:16 · 2154 阅读 · 0 评论 -
二叉树中节点的最大距离(java)
定义二叉树中节点的距离为节点之间边的个数。 一个二叉树中节点的最大距离由三部分综合求得:一部分是左子树中节点的最大距离,另一部分是右子树中节点的最大距离,最后一部分是左边的最大深度加上右边的最大深度。 public static void makeTree(Node head) { /* 1 4 2 5 3 6*/原创 2015-07-19 22:56:01 · 5644 阅读 · 0 评论 -
二叉树前序、中序、后序遍历非递归写法的透彻解析
二叉树前序、中序、后序遍历非递归写法的透彻解析前言在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的:?1234转载 2015-06-13 00:11:58 · 2062 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上转载 2015-07-10 13:00:07 · 691 阅读 · 0 评论 -
Java垃圾回收机制
1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放转载 2014-12-13 14:03:00 · 691 阅读 · 0 评论 -
IK分词源码讲解(一)-初始篇
IK分词全名为IK Analyzer,是由java编写的中文分词工具包,目前在lucene以及solr中用的比较多,本系列的文章主要对ik的核心源码进行解析讲解,与大家分享,如果有错误的地方还望指教。先来个整体概况:其实从上面的图可以看出,真实的ik的代码其实并不多,这样给我们开始接触心里压力就小的多。先打开IKAnalzyerDemo.java文件,先大体看看IK的工作流原创 2014-12-09 17:15:30 · 14923 阅读 · 0 评论 -
IK分词源码讲解(七)-TokenStream以及incrementToken属性处理
首先介绍下在lucene中attributeSource的类层次:org.apache.lucene.util.AttributeSource· org.apache.lucene.analysis.TokenStream (implementsjava.io.Closeable)· org.apache.lucene.analysis.NumericTok原创 2014-12-11 17:26:39 · 6570 阅读 · 0 评论 -
IK分词源码讲解(三)-分词歧义处理(智能分词)
分词的歧义处理是IK分词的一个重要的核心模块,主要使用组合遍历的方式进行处理。从子分词器中取出不相交的分词集合,例如分词结果为abcd(abcd代表词),abcd是按其在文本中出现的位置排序的,从前到后。假如a与b相交,b与c相交,c与d不相交,则将分词结果切成abc和d两个块分别处理当在分词的时候使用的是智能分词,那么便从相交的块中选出最优的结果,这个由judge方法来进行处理/**原创 2014-12-09 17:25:45 · 7068 阅读 · 0 评论 -
IK分词源码讲解(二)-分词器
IK里的分词器主要是三个分词器:CJKSegmenter(中文分词),CN_QuantifierSegmenter(数量词分词),LetterSegmenter(字母分词)。这三个分词器都继承了ISegmenter接口,思路相差不大,其中采用的结构也比较容易理解,采用字典树(CJK使用)或其他简单数据结构(CN_QuantifierSegmenter和LetterSegmenter)匹配文本中的当原创 2014-12-09 17:23:56 · 4608 阅读 · 0 评论 -
IK分词源码讲解(五)-ik配置及在Solr中的配置使用
在solr中配置使用IK很简单下载最新的Ik2012中文分词器。 2.解压IK Analyzer 2012FF_hf1.zip,获得IK Analyzer 2012FF_hf1.将该目录下的IKAnalyzer.cfg.xml,IKAnalyzer2012FF_u1.jar,stopword.dic放到安装TOMCAT_HOME/webapps/solr/WEB-INF/class原创 2014-12-09 17:27:19 · 5445 阅读 · 2 评论 -
IK分词源码讲解(四)-停用词处理
对于停用词以及未切分的词的处理方法:过滤掉CHAR_USELESS字符,包括标点以及无法识别的字符,pathMap中存储的是lexemePath集合,找出相邻的lexemePath,把它们之间未切分的字符逐字符输出,原来的ik源码里面有processUnkownCJKChar(),在IK2012中,这个方法被合并到了outputToResult(), //对分词进行歧义处理原创 2014-12-09 17:26:38 · 4234 阅读 · 0 评论 -
分类算法之朴素贝叶斯分类(Naive Bayesian classification)
分类算法之朴素贝叶斯分类(Naive Bayesian classification)0、写在前面的话 我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比的美感。而每次将学过的算法应用到实际中,并解决了实际问题后,那种快感更是我在其它地方体会不到的。 一直想写关于算法的博文,也曾写过零散的两篇,但也许是相比于工程性文转载 2016-12-01 16:36:26 · 442 阅读 · 0 评论 -
Kmeans算法参考记录
[-]基本Kmeans算法1注意问题1K如何确定与层次聚类结合2稳定性方法3系统演化方法3使用canopy算法进行初始划分42初始质心的选取3距离的度量4质心的计算5算法停止条件6空聚类的处理适用范围及缺陷实现1.基本Kmeans算法[1][cpp] view plain copy选择K个点作为转载 2016-12-05 16:41:08 · 609 阅读 · 0 评论 -
Leveldb 实现原理
郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为了加深印象,本文的配图是自己重新绘制的,大部分内容与原文相似,大家可以浏览原始页面 :-),感兴趣的话可以一起讨论 Leveldb 的实现原理!LevelDb日知录之一:LevelDb 101...转载 2019-04-23 17:06:46 · 230 阅读 · 0 评论 -
奇异值分解(SVD)原理总结
微信也是不要脸,记录下微信的地址:https://mp.weixin.qq.com/s?__biz=MzU0MDQ1NjAzNg==&mid=100002266&idx=1&sn=770ff2fbde050a1c15465cf8df5c93c1&chksm=7b39acd14c4e25c772241fdaf4b2094f2ef9d2c3276254aaa8dcdc1...转载 2019-04-14 17:17:59 · 1177 阅读 · 0 评论 -
多线程DAG调度
没有找妹子排版,这效果差距是有点大!git地址:https://github.com/a925907195/dag-flow-platform第1章基础介绍1.1简介1.2什么是DAG1.3 Hystrix第2章DAG-FLOW介绍2.1基础模块介绍2.2基础流程介绍 基础介绍 简介 DAG即Directed Acyclic ...原创 2019-03-06 21:44:42 · 6211 阅读 · 6 评论 -
Java并发之AQS详解(转发一下很经典)
一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。 以下是本文的目录大...转载 2018-07-19 10:35:06 · 330 阅读 · 0 评论 -
双数组trie树的基本构造及简单优化(DAT没那么复杂)
一 基本构造Trie树是搜索树的一种,来自英文单词"Retrieval"的简写,可以建立有效的数据检索组织结构,是中文匹配分词算法中词典的一种常见实现。它本质上是一个确定的有限状态自动机(DFA),每个节点代表自动机的一个状态。在词典中这此状态包括“词前缀”,“已成词”等。双数组Trie(double array Trie)是trie树的一个简单而有效的实现,由两个整数数组构成,一转载 2018-01-30 17:27:32 · 2640 阅读 · 4 评论 -
《探索推荐引擎内部的秘密》
推荐一下IBM软件工程师赵晨婷和马春娥的系列文章探索推荐引擎内部的秘密IBM Developworks探索推荐引擎内部的秘密第 1 部分 推荐引擎初探探索推荐引擎内部的秘密第 2 部分 深入推荐引擎相关算法 - 协同过滤探索推荐引擎内部的秘密第 3 部分 深入推荐引擎相关算法 - 聚类推荐一下,IBM软件工程师赵晨婷和马春娥的系列文章《探索推荐引擎内部的秘密》,IBM Deve转载 2017-08-10 19:28:50 · 1146 阅读 · 0 评论 -
基于ansj+word2vector进行相近词发现DEMO
基于ansj+word2vector进行相近词发现DEMOgoogle的开源项目word2vector,http://code.google.com/p/word2vec/。其实这玩意算是神经网络在文本挖掘的一项成功应用。本文章只是对自己目前搞的做个笔记,防止以后忘了,之前网上找了好久各种资料,不是这个说一半就是那个留一句的,搞的自己走起来一步一坑,尴尬……在基于word2vect原创 2017-07-07 15:51:14 · 1904 阅读 · 0 评论 -
java垃圾回收以及jvm参数调优概述
目录目录...1一、概述...3二、java垃圾回收算法...32.1 引用计数算法...32.2 根搜索算法...42.3 标记-清除算法...52.4 复制算法...52.5 标记-整理算法...62.6 分代收集算法...7三、垃圾回收器...93.1 垃圾回收器概述...93.2 串行垃圾回收器原创 2017-06-18 17:41:04 · 642 阅读 · 0 评论 -
文本编辑距离计算,简单清晰
概念编辑距离的作用主要是用来比较两个字符串的相似度的基本的定义如下所示:编辑距离,又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。这个概念是由俄罗斯科学家Vladim转载 2017-05-25 18:07:07 · 4295 阅读 · 0 评论 -
冒泡排序,仔细看看有什么不同?
public class BubboSort { public static void main(String[] args) { int[] array={1,2,4,3,6,9,7,10,5,8}; BubboSort(array); for(int item:array) { System.out.println(item); } } public sta原创 2017-01-20 20:59:10 · 548 阅读 · 0 评论 -
贝叶斯分类(这个讲的比较清晰,一看就明白)
原文地址:http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html1.2、分类问题综述 对于分类问题,其实谁都不会陌生,说我们每个人每天都在执行分类操作一点都不夸张,只是我们没有意识到罢了。例如,当你看到一个陌生人,你的脑子下意识判断TA是男是女;你可能经常会走在路上对转载 2016-12-22 23:13:40 · 24737 阅读 · 2 评论 -
最小二乘法多项式曲线拟合原理与实现(错误地方已经修改底层补充自己写的java实现)
目录(?)[-]概念原理运行前提代码运行效果 概念最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x)。原理[原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] 给定数据点pi(xi,yi),其中i=1,2,…,m。求近似曲转载 2016-12-07 15:00:58 · 4264 阅读 · 0 评论 -
红黑树(一)之 原理和算法详细介绍
红黑树(一)之 原理和算法详细介绍 原文地址:http://www.cnblogs.com/skywang12345/p/3245399.html概要目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除 作者:S转载 2016-12-06 15:25:09 · 619 阅读 · 0 评论 -
simhash算法介绍-尾部添加比较经典的实现代码,代码值得一读
方法介绍背景如果某一天,面试官问你如何设计一个比较两篇文章相似度的算法?可能你会回答几个比较传统点的思路:一种方案是先将两篇文章分别进行分词,得到一系列特征向量,然后计算特征向量之间的距离(可以计算它们之间的欧氏距离、海明距离或者夹角余弦等等),从而通过距离的大小来判断两篇文章的相似度。另外一种方案是传统hash,我们考虑为每一个web文档通过hash的方式生成一个指纹(finge转载 2016-11-25 20:50:16 · 1692 阅读 · 0 评论 -
堆排序源代码
#include#includeusing namespace std;//新插入的i节点,其父节点为(i-1)/2void MinHeapFixup(int arr[],int i){ int j,temp; temp=arr[i]; j=(i-1)/2;//父节点 while(j>=0&&i!=0)//不是首次插入 { if(arr[j]<=temp) brea原创 2014-12-04 14:30:29 · 836 阅读 · 0 评论 -
循环链表报数问题,n个人编号分别为1,2,3,……n,从第k个编号开始数1,2到m个然后删除第m个人,然后下 一个人再从1开始数数到第m个,然后再删除m人
#include#includeusing namespace std;//循环链表报数问题,n个人编号分别为1,2,3,……n,从第k个编号开始数1,2到m个然后删除第m个人,然后下//一个人再从1开始数数到第m个,然后再删除m人struct Lnode{int data;Lnode *link;};void josephus(int n,int k,in原创 2014-12-03 17:41:18 · 4579 阅读 · 0 评论 -
动态规划
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能转载 2014-11-20 15:04:04 · 1375 阅读 · 1 评论 -
向量空间模型(VSM)
向量空间模型(VSM) 向量空间模型(VSM)向量空间模型将文档映射为一个特征向量V(d)=(t1,ω1(d);…;tn, ωn(d)),其中ti(i=1,2, …,n)为一列互不雷同的词条项,ωi(d)为ti在d中的权值, 一般被定义为ti在d中出现频率tfi(d)的函数,即 。在信息检索中常用的词条权值计算方法为 TF-IDF 函数,其中N为所有转载 2014-11-12 21:03:47 · 1371 阅读 · 0 评论 -
判断点在多边形内部
判断点在多边形内部0.前言最近不断遇到类似的几何位置问题,一直没有花时间去总结,本文总结了我常用点跟多边形的位置判断方法以及代码。希望能够对大家有所帮助。文中所指的多边形均为凸多边形,一些描述可能有误,欢迎指正。1.测试的多边形在开始之前,我们需要先构建好测试环境。我构建了一个比较特殊的多边形,如下。/ \| ||_|从最上面的顶点顺时针坐转载 2014-10-26 16:18:55 · 625 阅读 · 0 评论 -
树-排序二叉树删除
相比较节点的添加,平衡二叉树的删除要复杂一些。因为在删除的过程中,你要考虑到不同的情况,针对每一种不同的情况,你要有针对性的反应和调整。所以在代码编写的过程中,我们可以一边写代码,一边写测试用例。编写测试用例不光可以验证我们编写的代码是否正确,还能不断提高我们开发代码的自信心。这样,即使我们在开发过程对代码进行修改或者优化也不会担心害怕。然而看起来编写测试用例是一个繁杂的过程,但是从长期的收益来看转载 2014-09-28 16:48:47 · 858 阅读 · 0 评论 -
树-排序二叉树插入
二叉树的节点插入比较简单。一般来说,二叉树的插入主要分为以下两个步骤: 1) 对当前的参数进行判断,因为需要考虑到头结点,所以我们使用了指针的指针作为函数的输入参数 2) 分情况讨论: 如果原来二叉树连根节点都没有,那么这个新插入的数据就是根节点; 如果原来的二叉树有根节点,那我们判断这个数据是否存在过,如果存在,那么返回;如转载 2014-09-28 16:39:45 · 713 阅读 · 0 评论 -
树-排序二叉树
前面我们讲过双向链表的数据结构。每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起。然而今天我们讨论的数据结构却有一点不同,它有三个节点。它是这样定义的:[cpp] view plaincopytypedef struct _TREE_NODE { int d转载 2014-09-28 14:07:46 · 810 阅读 · 0 评论 -
希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很转载 2014-09-25 22:48:30 · 593 阅读 · 0 评论 -
快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速转载 2014-09-25 16:45:49 · 558 阅读 · 0 评论