タグ

ブックマーク / susisu.hatenablog.com (2)

  • 差分検出アルゴリズム三種盛り - Object.create(null)

    こんばんは. 気がつけばもうずいぶんと涼しくなってきました. 勢い余って凍ってしまったりせぬよう, くれぐれも普段の言動にはお気をつけください. はじめに さて, 我々人類にはどうしても二つの文字列 (あるいは行ごとに区切られたテキスト) 間の差分を求めなければいけない瞬間が発生します. 先人たちはそういった時のために diff のようなツールを開発し, それを利用することで文明はめざましい発展を遂げてきました. しかしながら, 使用するアルゴリズムを比較検討したい場合, 「差分」の定義を変えるなどして既存のアルゴリズムに変更を加えたい場合, diff のない異世界に飛ばされて自分で実装しなければいけない時などにおいては, 差分検出アルゴリズムについての理解が必要不可欠です. というわけで, この記事では文字列間の差分検出とは何かということと, 差分を求める三種類のアルゴリズムの紹介・解説

    差分検出アルゴリズム三種盛り - Object.create(null)
  • パーサコンビネータを高速化した - Object.create(null)

    例のアレです. 式年遷宮したときの話はこちら. github.com 最初は軽い気持ちで細々とした最適化をしていたんです. switch を if に変えるとかいう小手先のアレで 10 % も高速化してウケてる— ボノボ (@susisu2413) 2017年3月13日 インライン化も同時にしてたから 10 % は言い過ぎか、でも高速化はしてる— ボノボ (@susisu2413) 2017年3月13日 ちなみにどう最適化するかというと V8 のプロファイラを使って適当に遅そうなところに目星をつけて色々試します. そんなこんなで Parsimmon*1 より妙に遅い原因を探していたら, ap, left, right (Parsec*2 でいうところの <*>, <*, *>) の実装の効率が悪く, これが主な原因であることがわかりました. アッアッ 30 % 高速化しました— ボノボ (

    パーサコンビネータを高速化した - Object.create(null)
  • 1