分类 算法 下的文章

[转]Twitter设计:分布式系统“推拉模式”的优化


原文链接:http://blog.bittiger.io/post162/

*本文来自于BitTiger冯沁原老师的硅谷之路系列视频之如何设计Twitter,欢迎大家回看视频:https://www.bittiger.io/classpage/8d7E2LPPy2HcZNr7D

我们在上篇最终给出了一个推拉结合的模型,左边属于推模型 ,写进一个消息可以发给所有关注我的人;右边属于拉模型,当我发出消息以后,只写到我自己的list里面,每个人可以过来读取;而Merger将推拉模式结合到一块得到这种结果,针对这种架构我们怎么做优化呢?如何使它更快?

1-1.jpg


算法-计算小数组在大数组中的索引


前言

大数组:[1,2,3,4,5,6]

小数组:[4,5]

我们需要快速得到小数组在大数组中的索引位置,本例中结果是3

算法思路

1. 暴力,嵌套for循环

function match(arr1,arr2){
  var n = arr1.length
  var m = arr2.length
  f1:
  for(var i=0;i<n;i++){
    if(arr1[i]===arr2[0]){
      f2:
      for(var j=1;j<m;j++){
        if(arr1[i+j]!==arr2[j])continue f1;
      }
      return i
    }
  }
  return -1
}


字符串匹配算法介绍及js字符串indexOf源码探究


前言

之前学过的字符串匹配算法,一种是朴素算法,一种是KMP算法。

朴素算法即暴力,两层for循环,算法复杂度O(n*m)

function match(s1,s2){
  var n = s1.length
  var m = s2.length
  f1:
  for(var i=0;i<n;i++){
    if(s1[i]===s2[0]){
      f2:
      for(var j=1;j<m;j++){
        if(s1[i+j]!==s2[j])continue f1;
      }
      return i
    }
  }
  return -1
}

KMP 的实现比较巧妙,下文会提到,我们先来介绍一种新的算法 Rabin-Karp

最近在分析 adblockplus.js 源码的时候了解到的

此外还有 有限自动机算法(Finite Automation)、Boyer-Moore 算法、Simon 算法、Colussi 算法、Galil-Giancarlo 算法、Apostolico-Crochemore 算法、Horspool 算法、Shift-Or 算法和 Sunday 算法