Haskellの「リスト」インデックスを最適化する

エリオットキャメロン

のようinits、リストを生成する非常に決定論的なアルゴリズムがあるとData.Listます。Haskellコンパイラが実際にすべての中間結果を生成することなく、このアルゴリズムで「インデックス作成」操作を最適に実行できる方法はありますか?

たとえば、inits [1..] !! 10000かなり遅いです。コンパイラはinits、再帰などを行わずに10000番目の要素でが生成されるどういうわけか推測できますか?もちろん、これと同じ考えはリストを超えて一般化することができます。

編集:ながらinits [1..] !! 10000一定であり、私はいくつかのアルゴリズム上の任意の「インデックスのような」操作について疑問に思って。たとえば\i -> inits [1..] !! i、どのi?の結果に到達するために[または最小限の]再帰が実行されないように最適化できますか

ストーングリズリー

はいといいえ。あなたがの定義を見ればData.List.inits

inits                   :: [a] -> [[a]]
inits xs                =  [] : case xs of
                                  []      -> []
                                  x : xs' -> map (x :) (inits xs')

再帰的に定義されていることがわかります。つまり、結果のリストの各要素は、リストの前の要素に基づいて作成されます。したがって、n番目の要素が必要な場合は、前のn-1個の要素をすべて作成する必要があります。

これで、新しい関数を定義できます

inits' xs = [] : [take n xs | (n, _) <- zip [1..] xs]

これは同じ動作をします。を取得しようとするinits' [1..] !! 10000と、リストの連続する要素が前の要素に依存しないため、非常に迅速に終了します。もちろん、単一の要素ではなく、実際にinitのリストを生成しようとした場合、これははるかに遅くなります。

コンパイラは、のような関数から再帰を最適化できるようにするために、多くの情報を知っている必要がありますinitsとは言うものの、関数が本当に「非常に決定論的」である場合、非再帰的な方法で関数を書き直すのは簡単なはずです。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

PostgreSQLのインデックスでクエリを最適化する方法

分類Dev

numpyndarrayのインデックス作成操作を最適化する

分類Dev

インデックスを使用してmySqlクエリのパフォーマンスを最適化する

分類Dev

「ソートインデックスの作成」でスタックするSQLクエリを最適化する方法

分類Dev

Elasticsearchインデックスを最適化する

分類Dev

複数の列/マルチインデックスでパンダクエリを最適化する

分類Dev

mysqlインデックスを最適化するための問題

分類Dev

MySQLクエリ、インデックスがある場合のイベントを最適化するにはどうすればよいですか?

分類Dev

デストラクタのサイズを最適化する

分類Dev

MongoDbで複合インデックス検索を最適化するためのアルゴリズム

分類Dev

インデックス クエリの最適化 = SQL

分類Dev

スカイボックスレンダリングを最適化するOpenGL

分類Dev

複合インデックスを使用したMySQLクエリの最適化

分類Dev

複合インデックスを使用した更新クエリの最適化

分類Dev

null、false、およびtrueのクエリに対する複合mongoインデックスの最適化

分類Dev

Excelでインデックス一致の問題を最適化する最も効率的な方法

分類Dev

最適化のためにこのSQLクエリにインデックスを付ける

分類Dev

MySQL-関連するカスケードクエリのセットの最適なインデックス

分類Dev

MySql-インデックスを使用してクエリを最適化する方法は?

分類Dev

インデックスを使用して選択クエリを最適化する方法

分類Dev

MySQLインデックスを最適化して1秒未満でクエリを実行する

分類Dev

検索パフォーマンスを最適化するためのPostgreSQLjsonbインデックス作成

分類Dev

SQLテーブルのパフォーマンスを最適化する-インデックス作成

分類Dev

PostgreSQLGINインデックスでクエリを最適化する方法が機能しない

分類Dev

mysqlテーブルインデックスを最適化する

分類Dev

リストの最後のインデックスに値を追加する(LISP)

分類Dev

バッチスクリプトを最適化する

分類Dev

mysqlの結合テーブルのビューでインデックスを最適化する

分類Dev

複数の列インデックスを使用してMERGEを最適化する方法

Related 関連記事

  1. 1

    PostgreSQLのインデックスでクエリを最適化する方法

  2. 2

    numpyndarrayのインデックス作成操作を最適化する

  3. 3

    インデックスを使用してmySqlクエリのパフォーマンスを最適化する

  4. 4

    「ソートインデックスの作成」でスタックするSQLクエリを最適化する方法

  5. 5

    Elasticsearchインデックスを最適化する

  6. 6

    複数の列/マルチインデックスでパンダクエリを最適化する

  7. 7

    mysqlインデックスを最適化するための問題

  8. 8

    MySQLクエリ、インデックスがある場合のイベントを最適化するにはどうすればよいですか?

  9. 9

    デストラクタのサイズを最適化する

  10. 10

    MongoDbで複合インデックス検索を最適化するためのアルゴリズム

  11. 11

    インデックス クエリの最適化 = SQL

  12. 12

    スカイボックスレンダリングを最適化するOpenGL

  13. 13

    複合インデックスを使用したMySQLクエリの最適化

  14. 14

    複合インデックスを使用した更新クエリの最適化

  15. 15

    null、false、およびtrueのクエリに対する複合mongoインデックスの最適化

  16. 16

    Excelでインデックス一致の問題を最適化する最も効率的な方法

  17. 17

    最適化のためにこのSQLクエリにインデックスを付ける

  18. 18

    MySQL-関連するカスケードクエリのセットの最適なインデックス

  19. 19

    MySql-インデックスを使用してクエリを最適化する方法は?

  20. 20

    インデックスを使用して選択クエリを最適化する方法

  21. 21

    MySQLインデックスを最適化して1秒未満でクエリを実行する

  22. 22

    検索パフォーマンスを最適化するためのPostgreSQLjsonbインデックス作成

  23. 23

    SQLテーブルのパフォーマンスを最適化する-インデックス作成

  24. 24

    PostgreSQLGINインデックスでクエリを最適化する方法が機能しない

  25. 25

    mysqlテーブルインデックスを最適化する

  26. 26

    リストの最後のインデックスに値を追加する(LISP)

  27. 27

    バッチスクリプトを最適化する

  28. 28

    mysqlの結合テーブルのビューでインデックスを最適化する

  29. 29

    複数の列インデックスを使用してMERGEを最適化する方法

ホットタグ

アーカイブ