SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
JISSOU
木構造
● 木構造には親と子と根と葉がある
● 頂点を結ぶ線は枝です


● 枝をたどれたら嬉しいです


● わかりやすい図→


● 実装して!
そんな説明で
何実装したらいいか
 わからんやん
要点をつかみましょう
●   必要なものは何?
     –   頂点、辺 それぞれ値を持てるべき
     –   なら構造体だね
●   必要な機能は何?
     –   根への参照
     –   ならべつに配列で持たなくていいね。
     –   枝をたどって他の頂点に行く
     –   なら構造体には他の頂点への枝を持っておかない
          とね
セグメント木のオペレーター
● 再帰的に組む
● 葉の方向に再帰する


● 必要がなかったら再帰しない


● それ以上でもそれ以下でもないよ


● ありほん読んでたらわかるよね
そんな説明で
どう実装すればいいか
  わからんやん
どう実装するかかんがえましょう
● 再帰関数なら、引数が重要だよね
   – どういう引数かがだいじ
● 関数の中身大事だよね


   – 何するかは説明してもらってるから
      わかる
   – どう条件分岐するかとかが大事
   – どういう条件分岐かがだいじ
なにをするかわからん?
● クソザコでは?
● まずは頭の中でイメージすること


● どんな面倒くさい実装も、想像す

  るとわかったりする
● 想像するときはパソコンから離れ

  ること
Pairing Heap
●   普通のヒープとは違って、delete-minのときだけ重
    い操作をする
●   とりあえずdelete-minの擬似コードね
    def delete-min(Heap X)
         return pairing(X.children)
    def pairing(Heaps X)
         if len(X) <= 1: return X
         else return merge( merge(X[0], X[1]),
            pairing(のこり))
やったー擬似コードだ
うつす
_人人人人人人人人_
> 謎のセグフォ <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
擬似コードのコピペは控えよう
●   あれは、アルゴリズムを理解するためのもの
    です
●   動かすためのものではないです
●   Cみたいな堅苦しい言語に移すとセグフォしま
    す
●   自分で設計しなおしましょう
●   設計し直すときはパソコンから離れること
実装なんてこわくない!
俺のコードgithubにあげてるんだ
● 「ちょうど、ぼくも同じ問題を悩ん
  でいたんだよ」
● 「githubにあげてるから参考にし

  ていいよ」
● 「ありがとう!みせてもらうよ!」
_人人人人人人_
> よめない <
  ̄Y^Y^Y^Y^Y
読めない実装は実装ではない
● あとから、仕様変更できるコードは便利
  じゃん
● 人にコード見せて、ハラスメントできます


● きれいなコードが組めればメモ帳でも

  コーディングできる
● きれいじゃなかったら、あとから大変なこ

  とになる
どんなコードが読みやすい?
● if文を深くしない
     – そのためなら、関数を沢山作るのも
        辞さない
● 変数名をわかりやすく、ユニークに


     – いみわからなかったり、似てるのが
        沢山あると読みにくい
● できるだけポインタとアロー演算子を使う


     – 詳細は後述
構造体
● 構造体こわい
● ポインタこわい


● '*'とか'&'とか記号ばっかり、こわい


● new delete なにそれこわい


● とりあえずこわいね
全部ポインタにしちゃいましょう
●   ポインタはいろいろな場面でつかいます
●   いっそ、全部ポインタであつかおう
      – 変数も、引数も全部ポインタ
●   再帰する構造体だとポインタじゃないと組め
    ない
●   宣言以外で'*'や'&'を使わなくて良い
●   基本的にアロー演算子”->”使えばコンパイ
    ル通る
詳しくは部誌で
まとめ!
●   実装するものの要点を抑える
     –   関数の引数、条件分岐の仕方
●   擬似コードは理解するために使う。写さない
     –   頭でイメージできるようになるまで、パソコンから離
          れてよく考える
●   読みやすいコードになるように設計し直す
     –   条件分岐が深くならないような実装を考えて覚える
     –   考えるときはパソコンから離れること
●   構造体はポインタだけで実装する
     –   いろいろあって実装しやすくなる
Jissou

Más contenido relacionado

Destacado

Cをやりましょう
CをやりましょうCをやりましょう
CをやりましょうKen Ogura
 
かけざん
かけざんかけざん
かけざんKen Ogura
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with HaskelKen Ogura
 
人間対Pc2
人間対Pc2人間対Pc2
人間対Pc2Ken Ogura
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014Ken Ogura
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackKen Ogura
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演Ken Ogura
 

Destacado (16)

April2013
April2013April2013
April2013
 
April2013
April2013April2013
April2013
 
Moon
MoonMoon
Moon
 
Cをやりましょう
CをやりましょうCをやりましょう
Cをやりましょう
 
PC解体
PC解体PC解体
PC解体
 
Yarudake
YarudakeYarudake
Yarudake
 
かけざん
かけざんかけざん
かけざん
 
Mage
MageMage
Mage
 
Trianguler
TriangulerTrianguler
Trianguler
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with Haskel
 
人間対Pc2
人間対Pc2人間対Pc2
人間対Pc2
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
Imo
ImoImo
Imo
 
辺彩色
辺彩色辺彩色
辺彩色
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演
 

Más de Ken Ogura

Más de Ken Ogura (14)

計算量
計算量計算量
計算量
 
Shio dtm
Shio dtmShio dtm
Shio dtm
 
Hairetu2
Hairetu2Hairetu2
Hairetu2
 
Lunch
LunchLunch
Lunch
 
Divisor
DivisorDivisor
Divisor
 
Homework
HomeworkHomework
Homework
 
Pool
PoolPool
Pool
 
Sns
SnsSns
Sns
 
Pencil
PencilPencil
Pencil
 
Spell check
Spell checkSpell check
Spell check
 
Black board
Black boardBlack board
Black board
 
Donyoku
DonyokuDonyoku
Donyoku
 
Nazoki
NazokiNazoki
Nazoki
 
人材発掘うっはうは
人材発掘うっはうは人材発掘うっはうは
人材発掘うっはうは
 

Jissou