Enviar búsqueda
Cargar
Rubysapporo Stringsearch
•
0 recomendaciones
•
806 vistas
Akio Ishida
Seguir
Tecnología
Educación
Denunciar
Compartir
Denunciar
Compartir
1 de 14
Descargar ahora
Descargar para leer sin conexión
Recomendados
こわくないScala vol.2
こわくないScala vol.2
FScoward
仮想記憶の構築法
仮想記憶の構築法
magoroku Yamamoto
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する
blackenedgold
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
What's Cuckoo?
What's Cuckoo?
Takuya Nakajima
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrake
Masahiro Tanaka
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
Recomendados
こわくないScala vol.2
こわくないScala vol.2
FScoward
仮想記憶の構築法
仮想記憶の構築法
magoroku Yamamoto
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する
blackenedgold
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
What's Cuckoo?
What's Cuckoo?
Takuya Nakajima
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrake
Masahiro Tanaka
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
Atsushi Tadokoro
Lets enjoy-terminal-life - たのしいたーみなる
Lets enjoy-terminal-life - たのしいたーみなる
totzyuta
Programming in Scala Chapter 17 Collections
Programming in Scala Chapter 17 Collections
Joongjin Bae
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
Masaya Konishi
菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方
Nagi Teramo
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413
博文 斉藤
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Kazuya Wada
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
Altanative macro
Altanative macro
Motohiro KOSAKI
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
kpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたい
koki_h
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
よりよいPHPUnitの実行方法を求めて
よりよいPHPUnitの実行方法を求めて
Akio Ishida
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
Akio Ishida
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
Yuta Sakurai
Local php-100828 2
Local php-100828 2
Akio Ishida
PostgreSQLの範囲型と排他制約
PostgreSQLの範囲型と排他制約
Akio Ishida
Getting start with knockout.js
Getting start with knockout.js
Akio Ishida
Ruby Postgres
Ruby Postgres
Akio Ishida
Ruby Postgres 2009
Ruby Postgres 2009
Akio Ishida
Más contenido relacionado
La actualidad más candente
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
Atsushi Tadokoro
Lets enjoy-terminal-life - たのしいたーみなる
Lets enjoy-terminal-life - たのしいたーみなる
totzyuta
Programming in Scala Chapter 17 Collections
Programming in Scala Chapter 17 Collections
Joongjin Bae
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
Masaya Konishi
菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方
Nagi Teramo
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413
博文 斉藤
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Kazuya Wada
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
Altanative macro
Altanative macro
Motohiro KOSAKI
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
kpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたい
koki_h
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
La actualidad más candente
(14)
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
Lets enjoy-terminal-life - たのしいたーみなる
Lets enjoy-terminal-life - たのしいたーみなる
Programming in Scala Chapter 17 Collections
Programming in Scala Chapter 17 Collections
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Altanative macro
Altanative macro
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
kpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたい
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
Destacado
よりよいPHPUnitの実行方法を求めて
よりよいPHPUnitの実行方法を求めて
Akio Ishida
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
Akio Ishida
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
Yuta Sakurai
Local php-100828 2
Local php-100828 2
Akio Ishida
PostgreSQLの範囲型と排他制約
PostgreSQLの範囲型と排他制約
Akio Ishida
Getting start with knockout.js
Getting start with knockout.js
Akio Ishida
Ruby Postgres
Ruby Postgres
Akio Ishida
Ruby Postgres 2009
Ruby Postgres 2009
Akio Ishida
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
Akio Ishida
XIDを周回させてみよう
XIDを周回させてみよう
Akio Ishida
使いこなそうGUC
使いこなそうGUC
Akio Ishida
phpspecで学ぶLondon School TDD
phpspecで学ぶLondon School TDD
Akio Ishida
textsearch_jaで全文検索
textsearch_jaで全文検索
Akio Ishida
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
Amazon Web Services Japan
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
Destacado
(15)
よりよいPHPUnitの実行方法を求めて
よりよいPHPUnitの実行方法を求めて
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
Local php-100828 2
Local php-100828 2
PostgreSQLの範囲型と排他制約
PostgreSQLの範囲型と排他制約
Getting start with knockout.js
Getting start with knockout.js
Ruby Postgres
Ruby Postgres
Ruby Postgres 2009
Ruby Postgres 2009
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
XIDを周回させてみよう
XIDを周回させてみよう
使いこなそうGUC
使いこなそうGUC
phpspecで学ぶLondon School TDD
phpspecで学ぶLondon School TDD
textsearch_jaで全文検索
textsearch_jaで全文検索
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
Similar a Rubysapporo Stringsearch
HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
Go言語のスライスを理解しよう
Go言語のスライスを理解しよう
Yasutaka Kawamoto
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Yoshiyuki Asaba
Ctb57 with god7
Ctb57 with god7
kingtomo
NArray and scientific computing with Ruby - RubyKaigi2010
NArray and scientific computing with Ruby - RubyKaigi2010
Masahiro Tanaka
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Tokyo r47 beginner_2
Tokyo r47 beginner_2
Takashi Minoda
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
Takashi Hoshino
Tokyo r45 beginner_2
Tokyo r45 beginner_2
Takashi Minoda
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Yusaku Kawaguchi
Write good parser in perl
Write good parser in perl
Jiro Nishiguchi
ggplot2 110129
ggplot2 110129
Takashi Minoda
Prosym2012
Prosym2012
MITSUNARI Shigeo
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki
Maatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2
Nishida Kansuke
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
mametter
URLで遊ぼう
URLで遊ぼう
Hiraku Nakano
Evolution Of Enumerator
Evolution Of Enumerator
Akinori Musha
Similar a Rubysapporo Stringsearch
(20)
HPC Phys-20201203
HPC Phys-20201203
Go言語のスライスを理解しよう
Go言語のスライスを理解しよう
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Ctb57 with god7
Ctb57 with god7
NArray and scientific computing with Ruby - RubyKaigi2010
NArray and scientific computing with Ruby - RubyKaigi2010
Clojure programming-chapter-2
Clojure programming-chapter-2
Tokyo r47 beginner_2
Tokyo r47 beginner_2
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
Tokyo r45 beginner_2
Tokyo r45 beginner_2
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Write good parser in perl
Write good parser in perl
ggplot2 110129
ggplot2 110129
Prosym2012
Prosym2012
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Maatkit で MySQL チューニング
Maatkit で MySQL チューニング
㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
URLで遊ぼう
URLで遊ぼう
Evolution Of Enumerator
Evolution Of Enumerator
Último
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Último
(9)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
Rubysapporo Stringsearch
1.
多バイト文字列の
検索アルゴリズム (株)サイクル・オブ・フィフス 石田朗雄 10/01/30
2.
その前に、、、 ●
http://www.local.or.jp/?LDD/LDD10Winter ● LOCAL DEVELOPER DAY '10 /Winter ● 2010/2/13(土) 12:45~18:35 ● 札幌市産業振興センター セミナールームA 10/01/30
3.
文字列検索 ●
PostgreSQLでは ● SELECT strpos('high', 'ig') => 2 ● SELECT strpos('high', 'X') => 0 ● replace(), split_part(), string_to_array() ● Rubyでは ● "high".index("ig") #=> 1 ● "high".index("X") #=> nil ● String#partition, String#include 10/01/30
4.
文字列検索アルゴリズム ●
Boyer-Mooreとその仲間 ● Boyer-Moore – 二種類のskiptable使ったアルゴリズム ● Boyer-Moore-Horspool – 片一方だけでもそこそこ速いんじゃね? – PostgreSQLはコレ ● Sunday Quick Search – 片一方しか使わないんだったら1Byte先を見てもよく ね? – Rubyはコレ 10/01/30
5.
●
詳しくはWebで!! ● http://www-igm.univ-mlv.fr/~lecroq/string/index.html 10/01/30
6.
skiptableの作り方
'A' 'B' 'C' 'A' 'B' 41 42 43 41 42 s[41] = 5 2 = 2 s[42] = 4 1 = 1 s[43] = 3 = 3 10/01/30
7.
ポイント ●
不一致だった場合に何文字skipできるかは、patternの 末尾の比較対象(+1?)の文字によって決まる ● 簡易実装では、256個の配列でskiptableを持っている ● 日本語どうすんの? ● widecharをつかうとskiptable大きすぎ ● ハッシュではコストが高すぎ ● multibyteのままだと泣き別れが発生する 10/01/30
8.
multibyte/widechar ●
マルチバイト ● 可変長 ● ASCII互換 ● EUC-JP、UTF-8 ● ワイド文字 ● 固定長(16bit/32bit) ● ASCII非互換 ● UTF-16(?)、UTF-32 ● 別にUNICODEじゃなくてもいいけどね 10/01/30
9.
PostgreSQLの場合 ●
src/backend/utils/adt/varlena.c ● widecharに変換 ● そもそもASCIIでも256個もskiptableいらないんじゃ ね? ● "ABCDEFG"をmod 4して"12301230"と考えても、ス キップする量は減るが成立する ● 文字列の長さでskiptableのサイズを決めている ● http://archives.free.net.ph/message/20080830.232111.faf51 ● http://github.com/postgres/postgres/commit/285966b76c1a 10/01/30
10.
'あ'
'い' 'う' 'え' 3042 3044 3046 3048 s[3042] = 4 = 4 s[3044] = 3 = 3 s[3046] = 2 = 2 s[3048] = 1 = 1 2 0 2 0 s[0] = 4 2 = 2 s[1] = = 5 s[2] = 3 1 = 1 s[3] = = 5 10/01/30
11.
Rubyの場合 ●
string.c:rb_str_index() ? re.c:rb_memsearch() ● マルチバイトのまま検索 ● 短かい文字列/UTF-8の場合/それ以外の場合でアルゴ リズムを分けている ● rb_memsearch_ss:たぶんrabin-karp ● rb_memsearch_qs_utf8 ● rb_memsearch_qs ● 泣き別れたらやりなおせばいいじゃない ● http://article.gmane.org/gmane.comp.lang.ruby.devel/8100 ● http://github.com/shyouhei/ruby/commit/e58adeae0f384a5 10/01/30
12.
rb_memsearch_qs_utf8(1) ●
UTF-8では0xe3がやたらとでてくる 'あ' 'い' 'う' e3 81 82 e3 81 84 e3 81 86 s[81] = 8 5 2 = 2 s[82] = 7 = 7 s[84] = 4 = 4 s[86] = 1 = 1 s[e3] = 9 6 3 = 3 10/01/30
13.
rb_memsearch_qs_utf8(2) ●
先頭byteの時は、文字全体からハッシュを計算する 'あ' 'い' 'う' e3 81 82 e3 81 84 e3 81 86 46 48 4a s[46] = 9 = 9 s[48] = 6 = 6 s[4a] = 3 = 3 s[181] = 8 5 2 = 2 s[182] = 7 = 7 s[184] = 4 = 4 s[186] = 1 = 1 10/01/30
14.
Pythonの場合 ●
Objects/stringlib/fastsearch.h ● http://effbot.org/zone/stringlib.htm ● Boyer-MooreとBloom Filterの合わせわざらしい ● イニシャルコストとメモリ効率はよさそう ● 長い文字列はどうか ● 但し内部コードはUTF-16(or32)に限る 10/01/30
Descargar ahora