fvdcx's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

leetcode-implement-strstr

发表于 2017-01-20   |   分类于 算法 , leetcode   |  

题目大意

  https://leetcode.com/problems/implement-strstr/

  实现字符串匹配判断

题目分析

  利用kmp算法,具体原理可以看下我之前的一篇博客

阅读全文 »

字符串KMP算法

发表于 2017-01-20   |   分类于 算法   |  

  之前学习一些数据结构教材上的kmp算法觉得讲的很复杂,要看很久才能明白,最近看了这篇文章觉得对理解kmp算法很有帮助:http://www.geeksforgeeks.org/searching-for-patterns-set-2-kmp-algorithm/ 下面把自己的理解记录一下

  kmp算法是用来解决子串匹配问题的,也就是输入是一个原字符串txt和一个模式串pat,输出的是所有txt中子串匹配pat的所有位置。我们知道用暴力的算法进行子串匹配复杂度是O(m*(n-m+1)),n是原字符串的长度,m是模式串的长度,而且保证n>m。但是kmp算法复杂度是O(n)。kmp算法需要借助一个辅助数组lps[],大小是m,代表的意义是pat串中最长前缀和后缀相同的长度,lps数组跟txt串没有任何关系,看下面的例子理解一下lps数组的含义:

阅读全文 »

Java volatile关键字

发表于 2017-01-17   |   分类于 Java , 多线程   |  

参考:https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html

  “原子操作”的概念就不多解释了,在java中,除了long和double型变量的其他基本类型的变量的读写都是原子的。volatile关键字的变量的读写操作都是原子的(即使变量是long和double)。原子操作之间是不能有交叠的。所以进行原子操作时不需要担心多线程产生的冲突,但是这并不能消除同步原子操作的需要,因为内存一致性错误(当不同的线程对于同一个数据有不一致的值时,产生内存一致性错误),还是可能发生。

阅读全文 »

Java多线程学习-III

发表于 2017-01-16   |   分类于 Java , 多线程   |  

参考了 《Java核心技术》 卷I 第14章 多线程 14.5.5-14.6

synchronized 关键字

  先来总结一下使用Lock和Condition对象的关键:

  • 锁用来保护代码片段,任何时刻只有一个线程执行被保护的代码
  • 锁可以拥有一个或多个条件对象
  • 每个条件对象管理进入被保护的代码片段,但还不能运行的线程

  Lock和Condition接口提供了高度的锁定控制,Java中的每个对象都有一个内部锁,如果方法用synchronized关键字生命,那么对象所将保护整个方法,也就是说要调用该方法,线程必须获得内部对象锁。

阅读全文 »
1…111213…38
fvdcx

fvdcx

149 日志
14 分类
20 标签
GitHub
© 2015 - 2017 fvdcx
由 Hexo 强力驱动
主题 - NexT.Pisces