Upload
Download free for 30 days
Login
Submit search
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
3 likes
4,792 views
Sho Hosoda
2013/12/12 のTsukuba.rb の発表資料です。
Read more
1 of 19
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
More Related Content
PDF
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
ssuserfb543d1
PPTX
BOOTがぶっとんだ
paralleltree
PDF
Rubyと機械学習の現状
Aki Ariga
PDF
Ruby
Shintaro Abe
PDF
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
Shuyo Nakatani
PDF
NetworkXによる語彙ネットワークの可視化
Shintaro Takemura
PDF
Gitを使ったRoute53の管理
Sugawara Genki
PDF
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Tsutomu Chikuba
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
ssuserfb543d1
BOOTがぶっとんだ
paralleltree
Rubyと機械学習の現状
Aki Ariga
Ruby
Shintaro Abe
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
Shuyo Nakatani
NetworkXによる語彙ネットワークの可視化
Shintaro Takemura
Gitを使ったRoute53の管理
Sugawara Genki
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Tsutomu Chikuba
What's hot
(20)
PDF
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
PDF
mrubyのfiberを試してみた
Kindai University
PDF
レガシーシステムのDBマイグレーションし始めた話
nekogeruge_987
PDF
Pythonすいーつ部
Atsushi Odagiri
ODP
計算数学
blackenedgold
PPTX
Ruby on Rails での開発で使って良いなと思ったメソッド
107steps
PDF
TypeSafe OSの試み
Hiroki Mizuno
PDF
俺とDockerとtDiaryとkubernetes
Masayuki KaToH
PPTX
Crystal勉強会#4 LT資料
Taichiro Suzuki
PPTX
Alt2017 1111 hatobus
Bus Hato
PPT
デスクトップでのRuby活用事例
Yoshiyuki MIKAMI
PDF
Railsハイパー実践講座-第35回NaCl勉強会
Narihiro Nakamura
PDF
78tch
78tch
PDF
Crucible @ M3, Inc.
Kazuhiro Sera
PDF
社内Lt
Keiichi Kayama
PDF
MmapScanner
Masahiro Tomita
PDF
Grunt task Unite-Coffee
minoru nakanou
PPTX
Ruby と C# をつなぐ
107steps
PPTX
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
genroku
PPTX
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
xztaityozx
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
mrubyのfiberを試してみた
Kindai University
レガシーシステムのDBマイグレーションし始めた話
nekogeruge_987
Pythonすいーつ部
Atsushi Odagiri
計算数学
blackenedgold
Ruby on Rails での開発で使って良いなと思ったメソッド
107steps
TypeSafe OSの試み
Hiroki Mizuno
俺とDockerとtDiaryとkubernetes
Masayuki KaToH
Crystal勉強会#4 LT資料
Taichiro Suzuki
Alt2017 1111 hatobus
Bus Hato
デスクトップでのRuby活用事例
Yoshiyuki MIKAMI
Railsハイパー実践講座-第35回NaCl勉強会
Narihiro Nakamura
78tch
78tch
Crucible @ M3, Inc.
Kazuhiro Sera
社内Lt
Keiichi Kayama
MmapScanner
Masahiro Tomita
Grunt task Unite-Coffee
minoru nakanou
Ruby と C# をつなぐ
107steps
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
genroku
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
xztaityozx
Ad
Viewers also liked
(20)
PDF
シェーダだけで世界を創る!three.jsによるレイマーチング
Sho Hosoda
PDF
スマホにおけるWebGL入門
Yohta Kanke
PDF
WebGLことはじめ
Kazuya Hiruma
ODP
Rubyのソースコードを読んでみよう(入門編)
baban ba-n
PDF
Immutable List Gem (KLab ALM版)
Sho Hosoda
PDF
[120517]自己紹介
Takahiro Yano
PDF
Twitter名刺ジェネレータ
Sho Hosoda
PDF
three.js の紹介
Sho Hosoda
ODP
名刺の作り方(+α)
Takahiro Yano
PDF
データに隠れた構造を推定して予測に活かす 〜行列分解とそのテストスコアデータへの応用〜
Atsunori Kanemura
PPTX
チョコ溶かす奴
翔 石井
PDF
子どもがOculusダメな理由を調べてみた
Hiromichi Yamada
PDF
Three.jsで3D気分
Toshio Ehara
PDF
Oh! java script 夢の続きを語ろうよ〜emscriptenの逆襲
Takashi Toyoshima
PPTX
パノラマ動画VR再生のあれこれ
MakotoItoh
PPT
曲面レイトレ入門
Toru Matsuoka
PDF
Yahoo150522
kyutoku
PDF
レイトレ合宿4!? 実装紹介スライド
Hisanari Otsu
PDF
楽しいShaderToy
Masaki Sasaki
PDF
Grimoire.js Community announcement June 20 2016
翔 石井
シェーダだけで世界を創る!three.jsによるレイマーチング
Sho Hosoda
スマホにおけるWebGL入門
Yohta Kanke
WebGLことはじめ
Kazuya Hiruma
Rubyのソースコードを読んでみよう(入門編)
baban ba-n
Immutable List Gem (KLab ALM版)
Sho Hosoda
[120517]自己紹介
Takahiro Yano
Twitter名刺ジェネレータ
Sho Hosoda
three.js の紹介
Sho Hosoda
名刺の作り方(+α)
Takahiro Yano
データに隠れた構造を推定して予測に活かす 〜行列分解とそのテストスコアデータへの応用〜
Atsunori Kanemura
チョコ溶かす奴
翔 石井
子どもがOculusダメな理由を調べてみた
Hiromichi Yamada
Three.jsで3D気分
Toshio Ehara
Oh! java script 夢の続きを語ろうよ〜emscriptenの逆襲
Takashi Toyoshima
パノラマ動画VR再生のあれこれ
MakotoItoh
曲面レイトレ入門
Toru Matsuoka
Yahoo150522
kyutoku
レイトレ合宿4!? 実装紹介スライド
Hisanari Otsu
楽しいShaderToy
Masaki Sasaki
Grimoire.js Community announcement June 20 2016
翔 石井
Ad
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
1.
Rubyで連結リスト使うための gemを作った @gam0022
2.
自己紹介 Twitter: @gam0022 情報科学類3年(coins11) @daigoroubot の飼い主 COJT
SWコース Ruby と C# けっこうなんでも書きます
3.
作った動機 Rubyでオーバーヘッドを気にせずに 再帰プログラミングをしたかった。 (情報特別講義の課題)
4.
Rubyで再帰プログラミング Ruby の Array
は 配列で実装されている。 遅い + メモリを消費する 次の操作が 先頭への要素の追加(cons) 連結(append) push などが破壊的操作 再帰プログラミングをするのには致命的
5.
なんとかしたい リストのデータ構造を自分で作ってみた! ImmutableList
6.
ImmutableList 特徴 単方向連結リスト(singly-circularly-linked list) 非破壊的(immutable) Cで実装 (C
Extensions) Rubyで実装すると、オーバーヘッドが多すぎる RubyGemsでは、Cで実装されたLinkedListは見つから なかった
7.
ImmutableList OCaml を意識したメソッド cons head, tail rev_append,
rev, append length nth
8.
Basic
9.
Benchmark 先頭に長さ3のリストを連結するのにかかった秒数 連結回数 Array ImmutableList 10 1.5E-05 2E-05 1000 0.007251 0.00166 10000 0.727542 0.015206 100000 102.080825 0.414083
10.
メモリ効率の良さ Arrayの連結(C = A
+ B) : メモリの使用量が2倍 B A 1 2 3 + 1 2 3 4 4 6 5 8 7 C 5 6 7 8 4 5 6 7 B A 1 2 3 8
11.
メモリ効率の良さ ImutableListの連結(C = A
+ B): BとCはメモリを共有 B A 1 3 2 + 4 6 5 7 8 C 1 2 3 B A 1 2 3 4 5 6 7 8
12.
Quick Sort とは クイックソート 一般的に最も高速なソート
O(n log n)、安定ソートではない アルゴリズム 1. 適当に数(ピポット)を選ぶ 2. ピポットより小さい数を前方、大きい数を後方に分割 3. 2分割されたデータで更に繰り返す
13.
Quick Sort 素朴な実装 tempとか実装上の都合 の変数が多い
(#・ ・) プログラムの動作が追い にくい (#・ ・) 読みにくい (#・ ・)
14.
Quick Sort 再帰版
15.
RubyGemsで公開中 RubyGemとは Rubyのライブラリのパッケージ管理システム
16.
Install コマンド一発で導入可能
17.
ご静聴ありがとうございました 詳しい話はブログで 「ruby immutable_list」で検索 http://gam0022.net/blog/2013/10/22/immutablelist-gem/ http://gam0022.net/blog/2013/10/18/gems-withextensions/
18.
余談 RubyのC拡張は作りやすさは素晴らしい。 しかし、デメリットもある。 Rubyを改良するための大きな変更がしたいときに、C拡張 が足を引っ張る。 効率の良いGCを取り入れたいが、それまでのライブラリが 使えなくなる。
19.
RGenGC GCは重い処理。 現状のRubyは mark&sweep 方式(全探索で遅い) Ruby
2.1 では世代別GCが採用予定 RGecGC 過去のC拡張の互換性を保ちつつ高速化 http://www.atdot.net/ ko1/activities/ RubyKaigi2013-ko1.pdf
Download