文献[1]で紹介されているAC法をJavaで実装してみました.
AC法はテキスト内に出現する複数のキーワードを1回走査しただけで検出することができるアルゴリズムです. トライの部分はダブル配列法を使いたいところですが,コード量が多くなるので,今回はTreeMapで済ませました. テストケースの件数が少ないので,もしかするとバグっているかもしれません.
[1] | 伊藤 直也, 田中 慎司: Web開発者のための大規模サービス技術入門, 技術評論社, 2010-08 |
文献[1]で紹介されているVB CodeをJavaで実装してみました.
また,圧縮の効果も調べてみました. 以下がその結果(一例)です. 140万エントリのID列を想定してランダムに生成した整数列をギャップ列に直して,VC Codeでエンコードしています. 元の整数列が密になる(整数列の長さが増す)ほど,圧縮率が良くなっています. 密になればなるほど,整数間のギャップが小さくなるので,期待通りの結果になりました.
整数列長 | 圧縮前(B) | 圧縮後(B) | 圧縮率 |
---|---|---|---|
1 | 4 | 4 | 1.00 |
10 | 40 | 32 | 0.80 |
100 | 400 | 260 | 0.65 |
1000 | 4000 | 1955 | 0.49 |
10000 | 40000 | 14079 | 0.35 |
[1] | 伊藤 直也, 田中 慎司: Web開発者のための大規模サービス技術入門, 技術評論社, 2010-08 |
「MAKERS」を読みました.
Chris Anderson: MAKERS, NHK出版, 2012-10
本書についてのメモを以下に記しておきます.
本書は,ビットの世界で起きた変革がアトムの世界でも起きつつあることについて述べられている.それは,経済規模で捉えると,ビットの世界と比べて少なくとも5倍大きい世界での変革であり,21世紀版産業革命と呼ばれるものになるであろう変革である.
ビットの世界で起きた変革は,デジタル技術とネットワーク技術の融合によって生じたものである.それらが,広大なスペースを持つ棚と際限なくそこに並ぶモノをサイバー空間の中に登場させたおかげで,我々は従来より自分の嗜好にあったモノを供給したり消費したりすることが可能になった.そして,個人の嗜好に従ったモノの供給と消費は,ビットの世界に様々なロングテールを出現させた.さらに,ビットの世界では,モノのフリー化も進展している.サイバー空間にある棚に無償のモノが供給されるケースが多くなっているのである.
アトムの世界で起きつつある変革は,先の二つの技術に加え,3Dプリンタに代表される新たな製作技術の登場によって生じている.これらは,モノの製作に必要なツールを企業の工場から個人の工房へと移し,また,個人のアイデアを補強したり,集約したりする場を提供する.これにより,ツールを使いこなすスキルは必要になるものの,自分の嗜好にあうモノを自分自身で製作できるようになる.もう自分が欲しいモノを気長に待つ必要はなくなる.さらに,気が向けば,自分と同じ嗜好の持ち主のためにそれをサイバー空間の棚に置くこともできる.
モノを製作するツールの大衆化とそれを並べる棚の存在がビットの世界で起きた変革をアトムの世界にもたらしている.アトムの世界では,ロングテールの真ん中の部分がごっそり抜け落ちていた.極端に言うと,工場で大量生産されたモノがある頭と,オーダメイドのモノがある尻尾の先は存在するものの,胴と尻尾の大部分にモノは存在しなかったのである(デジタルの世界ではこの部分の売上は全体の3分の1程度あるそうだ).しかし,アトムの世界で起きつつある変革は,この部分にもモノを供給するようになる.それは,大量でもなく,少量でもなく,小回りの効く中規模なチームが生きていくのに必要な利益を生み出せる量のモノが存在する場所である.そして,自分だけでなく同じ嗜好の持ち主を満足させることができるやりがいのある場所である.
このような新天地が我々のすぐ目の前にある.まだ人が少ないうちに見物だけはしておいたほうがよいかもしれない.とりあえずAutodeskの123Dはダウンロードしてみた.3Dプリンタはどうしようか.