Data.Sequenceでinitとtailはどのように機能しますか?

dfire

Louis Wassermanは、との現在の実装を作成initstailsましたData.Sequence彼は、それらが非常に効率的であることを示しています。実際、コードを見ると、何をしていても、怠惰なツリーのパフォーマンスが向上する傾向がある、クリーンでトップダウンの方法で実行していることがわかります。残念ながら、私は実際に彼らがしていることの頭や尾を作ることはできません。誰か私に手を貸してもらえますか?コードは少し長いですが、Hackageにあります。

ルイ・ワッサーマン

それは私です!

おそらく最善のアプローチは、例を通して作業することだと思います。行きましょう...

Deep (Two 1 2)                                                    (Two 7 8))
                (Deep (One (Node2 3 4))        (One (Node2 5 6))
                                         Empty

これがシーケンスです。多少簡略化されています(たとえば、Elemラッパーを省略しています)。

これについて初期化を行いましょう。尾は本質的に対称です。私たちの再帰的アルゴリズムは、空のinitを除外し、空でないものだけを含めます。


プレフィックス

したがって、initのプレフィックス桁は、基本的にfmap digitToTree (initsDigit (Two 1 2))。で生成されます。

initsDigit (Two 1 2) = Two (One 1) (Two 1 2)
fmap digitToTree (Two (One 1) (Two 1 2)) = 
    Two (Single 1) (Deep (One 1) Empty (One 2))

したがって、これらは全体の最初の2つの初期値であり、この数字はの結果の接頭辞の数字になりinitsます。(すべて完了した後に空のシーケンスを先頭に追加することを除いて、今はそれを無視しましょう。)


インナーツリー

ここで、内部ツリーの初期化を取りましょう。これはFingerTree (Node a)-として扱われます。ノードを引き離すつもりはありません。これは、2FingerTreeつのノードを含む2つの要素にすぎませんこれについては詳しく説明しません。同じアルゴリズムを繰り返し実行するだけで、魔法のように結果に到達します。

Deep 
    (One (Single (Node2 3 4))) 
    Empty 
    (One (Deep (One (Node2 3 4)) Empty (One (Node2 5 6))))
  :: FingerTree (FingerTree (Node a))

つまり、これらは内側のツリーの初期段階です。これらは外側の木の初期化にどのように対応していますか?内側のツリーの各初期化は、を含むツリーに対応します

  • 元のツリーのプレフィックス桁、 Two 1 2
  • Node内側の木の初期化の最後除くすべて
  • Node内部ツリーの初期化の最後接頭辞

したがってFingerTree (Node a)、内部ツリーのinitを取得することによって取得されたそれぞれは、にマップされます。これには、の最後のノードのinitごとNode (FingerTree a)にが含まFingerTreeれますFingerTree (Node a)

だから、例えば、Single (Node2 3 4)抽出された最後のノードと、に分解されるEmptyNode2 3 4、得られたですNode (FingerTree a)

Node2 
   (Deep (Two 1 2 {- prefix of original tree -}) 
         Empty 
         (One 3 {- first prefix of Node2 3 4 -}))
   (Deep (Two 1 2) 
         Empty 
         (Two 3 4 {- second prefix of Node2 3 4 -}))

そして、内部ツリーの他の接頭辞についてはDeep (One (Node2 3 4)) Empty (One (Node2 5 6))、最後Node抽出するSingle (Node2 3 4)剰余と抽出されたノードNode2 5 6が得られるため、結果はNode (FingerTree a)次のようになります。

Node2
   (Deep (Two 1 2 {- prefix of original tree -})
         (Single (Node2 3 4) {- init of the inner tree minus the last Node -})
         (One 5 {- first prefix of Node2 5 6 -})
   (Deep (Two 1 2 {- prefix of original tree -})
         (Single (Node2 3 4) {- init of the inner tree minus the last Node -})
         (Two 5 6 {- second prefix of Node2 5 6 -}))

したがって、これはFingerTree (Node a)、内部ツリーの単一の初期化である、をNode (FingerTree a)。に変換する操作ですしたがって、内部ツリーのinitをとして再帰的に取得したFingerTree (FingerTree (Node a))後、この関数をそれらにマップして、を取得しますFingerTree (Node (FingerTree a))。これはまさに私たちが望んでいたことです。それは全体の初期化の内側の木です。


サフィックス

最後に、で構成される元のツリーの初期化があります

  • 元のプレフィックス
  • 元の内側の木
  • 元のツリーの接尾辞の各初期化

これらは、initのツリーの接尾辞の数字になります。initsDigit (Two 7 8)を返しますTwo (One 7) (Two 7 8)。基本的に\sf -> Deep pr m sfこれをマッピングするだけで

Two 
   (Deep (Two 1 2 {- original -})
         (Deep (One (Node2 3 4)) Empty (One (Node2 5 6)) {- original -})
         (One 7 {- first init of original suffix digit -}))
   (Deep (Two 1 2 {- original -})
         (Deep (One (Node2 3 4)) Empty (One (Node2 5 6)) {- original -})
         (Two 7 8 {- second init of original suffix digit -})) 

したがって、これはコードの編成方法とはまったく異なります。私たちは、から機能を説明してきたFingerTree aFingerTree (FingerTree a)が、実際の実装は、本質的であることに加えてfmap、我々は常に何らかの形で要素をマッピングする必要が終わるので-それはちょうどnewtypesを包んだ場合でも。しかし、これは基本的に私たちが行っていることです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Spring Data JPAで@CreatedByはどのように機能しますか?

分類Dev

data.table内で環境はどのように機能しますか?

分類Dev

「pydub._data」と「numpy.fromsting」はオーディオ指紋でどのように機能しますか?

分類Dev

Core Dataのsaveメソッドはどのように機能しますか?

分類Dev

html5-script-attribute "data-main"はどのように機能しますか?

分類Dev

文字変数のorder()はdata.tableでどのように機能しますか?

分類Dev

「data.map(Result.success)」はどのように機能し、Result <Data、Error>のタイプを返しますか?

分類Dev

phpbb3で$ user-> dataがどのように機能するかを理解しようとしています

分類Dev

phpbb3で$ user-> dataがどのように機能するかを理解しようとしています

分類Dev

R data.tableで、.SDを使用しているときにjでdot(。)と 'c'を取得することの違いは何ですか?どのように機能しますか?

分類Dev

「dfs.replication」および「dfs.datanode.data.dir」構成はクラスターでどのように機能しますか?

分類Dev

Rのdata.frameの行を(機能的に)反復し、ループするように処理するにはどうすればよいですか?

分類Dev

「data-method」および「data-confirm」属性を持つタグ-どのように機能しますか?

分類Dev

cb && 'function' === typeof cb && cb(data)は、redux-thunkを使用したAction(React-redux)でどのように機能しますか?

分類Dev

「group =」変数はdata.frame()でどの程度正確に機能しますか

分類Dev

resource.data.size()はfirestoreルール(カウントされているもの)でどのように機能しますか?

分類Dev

data.frame内でうまく機能するRで新しいタイプを作成するにはどうすればよいですか?

分類Dev

`data-include`属性はどのように機能する可能性がありますか?

分類Dev

Data.Functionの「on」関数を一般化してn項関数で機能させるにはどうすればよいですか?

分類Dev

Ember-data:別のコレクションのコレクション内のモデルの集約リストを取得するにはどうすればよいですか(@eachは機能しません)

分類Dev

Elm:このinitはどのように機能しますか?

分類Dev

make_index_sequenceはどのように機能しますか?

分類Dev

tableView init()階層はどのように機能しますか?

分類Dev

cloud-initはどのように機能しますか?

分類Dev

列名を変数としてRのdata.tableに渡すにはどうすればよいですか?

分類Dev

Keras load_data()は、データのどの部分がトレインとテストセットであるかをどのように認識しますか?

分類Dev

Bootstrapでdata-dismiss属性がどのように機能するかを理解する

分類Dev

Spring Data MongoDBで@MongoIdを@Idよりもどのように使用しますか?

分類Dev

プロセッサはOpCodesとDataの間でどのように異なりますか?

Related 関連記事

  1. 1

    Spring Data JPAで@CreatedByはどのように機能しますか?

  2. 2

    data.table内で環境はどのように機能しますか?

  3. 3

    「pydub._data」と「numpy.fromsting」はオーディオ指紋でどのように機能しますか?

  4. 4

    Core Dataのsaveメソッドはどのように機能しますか?

  5. 5

    html5-script-attribute "data-main"はどのように機能しますか?

  6. 6

    文字変数のorder()はdata.tableでどのように機能しますか?

  7. 7

    「data.map(Result.success)」はどのように機能し、Result <Data、Error>のタイプを返しますか?

  8. 8

    phpbb3で$ user-> dataがどのように機能するかを理解しようとしています

  9. 9

    phpbb3で$ user-> dataがどのように機能するかを理解しようとしています

  10. 10

    R data.tableで、.SDを使用しているときにjでdot(。)と 'c'を取得することの違いは何ですか?どのように機能しますか?

  11. 11

    「dfs.replication」および「dfs.datanode.data.dir」構成はクラスターでどのように機能しますか?

  12. 12

    Rのdata.frameの行を(機能的に)反復し、ループするように処理するにはどうすればよいですか?

  13. 13

    「data-method」および「data-confirm」属性を持つタグ-どのように機能しますか?

  14. 14

    cb && 'function' === typeof cb && cb(data)は、redux-thunkを使用したAction(React-redux)でどのように機能しますか?

  15. 15

    「group =」変数はdata.frame()でどの程度正確に機能しますか

  16. 16

    resource.data.size()はfirestoreルール(カウントされているもの)でどのように機能しますか?

  17. 17

    data.frame内でうまく機能するRで新しいタイプを作成するにはどうすればよいですか?

  18. 18

    `data-include`属性はどのように機能する可能性がありますか?

  19. 19

    Data.Functionの「on」関数を一般化してn項関数で機能させるにはどうすればよいですか?

  20. 20

    Ember-data:別のコレクションのコレクション内のモデルの集約リストを取得するにはどうすればよいですか(@eachは機能しません)

  21. 21

    Elm:このinitはどのように機能しますか?

  22. 22

    make_index_sequenceはどのように機能しますか?

  23. 23

    tableView init()階層はどのように機能しますか?

  24. 24

    cloud-initはどのように機能しますか?

  25. 25

    列名を変数としてRのdata.tableに渡すにはどうすればよいですか?

  26. 26

    Keras load_data()は、データのどの部分がトレインとテストセットであるかをどのように認識しますか?

  27. 27

    Bootstrapでdata-dismiss属性がどのように機能するかを理解する

  28. 28

    Spring Data MongoDBで@MongoIdを@Idよりもどのように使用しますか?

  29. 29

    プロセッサはOpCodesとDataの間でどのように異なりますか?

ホットタグ

アーカイブ