• Like
20111217 gunmaweb#7 エダカリン!
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

20111217 gunmaweb#7 エダカリン!

  • 1,172 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,172
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. エダカリン! @ivoryworks2011.12.17 gunma.web #7
  • 2. @ivoryworksC / Java / PHP / JS / Python
  • 3. 今回のテーマ枝刈り
  • 4. 枝刈り 主にツリー状のデータを扱う際、 メモリや計算時間を節約する手法不要な枝を刈ってデータを小さくする (作らない・削除する)
  • 5. どうして枝刈りするの?データを作る人(処理)データを読む人(処理)早く作れて早く読める
  • 6. 実は刈らなくてもいい 無限の時間と無限のリソースがあるなら処理もシンプルになる
  • 7. 待ってらんない
  • 8. 話を変えます
  • 9. 実用 R アナグラミング 2008 昔つくった ローマ字の アナグラムを つくるサイト http://www.ivoryworks.com/anagram/
  • 10. 実用 Perl プログラミング
  • 11. 実用 R アナグラミング PHPで書いた Perl使ってない http://www.ivoryworks.com/anagram/
  • 12. アナグラム 言葉遊びの一つ。単語または文の中の文字をいくつか入れ替えることによって全く別の意味にさせる遊びである。 Wikipedia - http://ja.wikipedia.org/wiki/アナグラム
  • 13. 1 + 12 = 2 + 11one plus twelve = two plus eleven
  • 14. アナグラミングをローマ字でやる 元となる文字列を並び替える ツリーを作って処理する ようするに 枝
  • 15. 並びパターン3文字だと6通り 3x2x1=6
  • 16. N! 階乗3! = 6
  • 17. EDAKARI-N!
  • 18. 階乗 2文字:2 x 1 = 2通り 3文字:3 x 2 x 1 = 6通り 4文字:4 x 3 x 2 x 1 = 24通り 5文字:5 x 4 x 3 x 2 x 1 = 120通り 6文字:6 x 5 x 4 x 3 x 2 x 1 = 720通り 7文字:7 x 6 x 5 x 4 x 3 x 2 x 1 = 5040通り8文字:8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 40320通り 階乗ヤバい! ねずみ算式に増えていく 10文字で3628800通りとか激ヤバだけど事実
  • 19. 3! = 3 x 2 x 1 = 6
  • 20. 10! = 3628800
  • 21. ローマ字アナグラムを作る処理1.入力:ローマ字2.アナグラムツリー生成3.アナグラムツリーからアナグラムリスト生成4.アナグラムリストから読み仮名ツリー生成5.読み仮名ツリーから読み仮名リスト生成6.出力:アナグラム読み仮名リスト
  • 22. 読み仮名ツリー?読み仮名は1つでは?
  • 23. 複数の読み方 兄 ANI 安易
  • 24. ANINAANI
  • 25. 一緒に刈ろうぜ! CAPCOM
  • 26. サンプル“NEZUMIZAN” ねずみざん
  • 27. NEZUMIZAN 9文字
  • 28. NEZUMIZAN362,880通り
  • 29. Try-0何も考えない
  • 30. 16.573249816895 sec.
  • 31. どれが不要な枝なのか 不要な枝の判断はデータの特性や内容によって異なる 作る人や読む人次第
  • 32. 刈り方枝を作る前に刈る枝を作ってから刈る
  • 33. 枝を作る前に刈る 枝を伸ばす前に不要な枝になることを予測して それ以上計算しない
  • 34. 枝を作ってから刈る 枝を伸ばした後 不要と判断したら 枝を逆上って刈る
  • 35. Cace by Cace
  • 36. Try-1同じ計算しない (伸ばす前に刈れ)
  • 37. AKA同じ色の枝ダブってね?
  • 38. 小さくなった
  • 39. 16.573249816895 sec.15.555239915848 sec.
  • 40. Try-2 途中で見切る1(伸ばす前に刈れ&伸ばした後刈れ)
  • 41. 伸ばしても無駄な枝 残りの文字に母音(A,I,U,E,O) もしくはNが存在しなければ枝を伸ばしてもローマ字が成立しない
  • 42. AKA青いところローマ字成立してなくね?
  • 43. もっと小さくなった
  • 44. 16.573249816895 sec.15.555239915848 sec.8.3212361335754 sec.
  • 45. Try-3 途中で見切る2(伸ばす前に刈れ&伸ばした後刈れ)
  • 46. 枝を伸ばす際に 読み仮名変換処理にかけて既に読めないならその枝いらない
  • 47. 16.573249816895 sec.15.555239915848 sec.8.3212361335754 sec.2.0270299911499 sec.
  • 48. Try-Final素早く刈れ(時間かけるな)
  • 49. 読み仮名変換処理を元にローマ字スペルチェッカーを作成 軽量化
  • 50. 16.573249816895 sec.15.555239915848 sec.8.3212361335754 sec.2.0270299911499 sec.1.1768751144409 sec!
  • 51. (362,880通り)16.573249816895 sec.1.1768751144409 sec! (2,160通り)
  • 52. よく刈れました
  • 53. github - romaji-anagram -https://github.com/ivoryworks/romaji-anagram
  • 54. まとめ● いらない枝は刈ろう● 効率良く刈ろう● データが小さくなる● 小さなデータは早く作れる● 小さなデータは早く扱える
  • 55. ねずみ算演算済み
  • 56. おしまい