SlideShare a Scribd company logo
12/10/16                                               Study/PFDS/7-Eliminating Amortization




     Study/PFDS/7-Eliminating Amortization

     7 Eliminating Amortization
              これまでは、操作列全体が効率良くシンプルであることに注目してきた。
     Raman[92] によると・・・

              個々の操作の実行時間が極端に長くならないことが重要な応用分野が存在する
              このような分野では、ならしデータ構造よりもワーストケースのデータ構造が多くの場合望ましい。
               1. リアルタイムシステム
               2. 並列システム - 高価な操作により他のプロセッサを待たせることになる
               3. インタラクティブシステム - しばしばスピードよりも一貫性が重視される
               4. 永続データ構造

     しかし、ならし解析は永続データ構造と相性が良いことがこれまでの議論で分かっている

              ならしデータ構造はワーストケースよりも単純なので、
              ワーストケースで最初から作るよりも
              いったんならしデータ構造を設計した後で、
              ワーストケースに変換するほうが簡単な場合が時々ある。

     「スケジューリングの手法とは」
              遅延コンポーネントをシステマティックに評価(force)して、
              遅延の実行時間があまり長くならないようにすることで、
              遅延ならしデータ構造をワーストケースのデータ構造に変換する手法
              すべてのオブジェクトをスケジュールと呼ばれる要素で拡張して、
              遅延コンポーネントが評価される順序を規則づける。




kinug.com/wiki/Study/PFDS/7-Eliminating Amortization                                           1/5
12/10/16                                               Study/PFDS/7-Eliminating Amortization


     7.1 Scheduling
     「ならしデータ構造とワーストケースのデータ構造との違い」

              ワーストケースのデータ構造では、
              操作内のすべての計算がその操作の間に実行される。
              ならしデータ構造では、
              操作内の一部の計算が後の操作の時に実行される。
     このことから見て、

              完全な遅延評価言語でインプリメントされた場合、
              多くの計算が必要以上に遅延されることから、
              ならしとみなすことができる。
              真のワーストケースのデータ構造をあらわすためには、
              正格な言語(strict language)が必要である。

     「遅延評価と正格評価の両方をサポートする言語を用いた複合的アプローチ」(の提案)

              内部で遅延評価を行うワーストケースのデータ構造
              遅延された慣らしデータ構造を元に、
              すべての操作が割り当てられた時間内に実行されるように修正を加える


     「遅延の本質コストを定義」(準備)
              まずは、以下の仮定の下で各遅延の本質コストを定義する
                 他のすべての遅延が評価済みでメモ化されている
                 他のすべての遅延がO(1)
              これは unshared cost に類似




kinug.com/wiki/Study/PFDS/7-Eliminating Amortization                                           2/5
12/10/16                                               Study/PFDS/7-Eliminating Amortization


     「最初のステップ」(コストの調節)
              全ての遅延の本質コストを要求された限界よりも小さくする
                 例えば次のような方法
                    基本的なアルゴリズムを変更
                    モノリシックな関数のみに対応した表現をインクリメンタルなものに書換える
                    (例:遅延リスト(suspended lists)→ストリーム(streams))

     「連鎖反応」(コストが高くなるケース)
              遅延が他の遅延に依存している場合には計算に時間がかかる
              例
              (・・・((s1 ++ s2) ++ s3) ++ ・・・) ++ sk
                    一番外側の ++ から返される遅延を評価すると、
                    全ての ++ を一気に実行する連鎖反応が起きる。
                    →O(k)

     注:ドミノ倒し

              一つのドミノを倒すコストが O(1) だとしても、
              全てのドミノを倒すコストはずっと大きい




kinug.com/wiki/Study/PFDS/7-Eliminating Amortization                                           3/5
12/10/16                                               Study/PFDS/7-Eliminating Amortization


     「二つ目のステップ」(評価のスケジューリング)
              遅延を評価する時点で、
              その遅延が依存する他の遅延が全て評価され
              メモ化済みであるようにする。
              ->数珠繋ぎの評価を回避

     注:ドミノ倒し

              ドミノを倒したときに、次のドミノがすでに倒れているようにしておく。
              そうすると個々のドミノを倒すコストは小さい

     手順:

              全てのオブジェクトを schedule と呼ぶ追加の要素で拡張
              schedule は、オブジェクトに含まれる全ての未評価の遅延へのポインタを
              (少なくとも概念的に)含む。
              schedule に評価済みの遅延が含まれても問題はない(早くなるだけ)。
              全ての操作は、そのオブジェクトに対して行われる他の全ての操作に加えて、
              スケジュールに含まれる最初の少しの遅延を評価する。
              このとき評価する遅延の数はならし解析によって決められる(governed)。
                   多くの場合、全ての遅延はO(1)時間を実行に要するので、
                   その操作のならしコストに比例した数の遅延を評価する。
                   データ構造によっては、スケジュールの管理(方法?)は自明でない。
                   この手法を適用するために、新しい遅延をスケジュールに加えたり、
                   評価すべき次の遅延を取得したりするために、
                   定められたワーストケース境界以上の時間を要することはできない。




kinug.com/wiki/Study/PFDS/7-Eliminating Amortization                                           4/5
12/10/16                                               Study/PFDS/7-Eliminating Amortization


     まとめ
              個々の操作の実行時間を一定以内に抑えたい
              ならしの手法で作ったアルゴリズムを変換する方法を提案する
               1. 操作の本質コストを定義
               2. 各操作のコストを要求仕様に合わせる
                     アルゴリズムの変更
                     インクリメンタルな処理を行えるようにする
               3. 遅延の評価タイミングの制御
                     オブジェクトを「スケジュール」要素で拡張して
                     未評価の遅延へのポインタを保持させる
                     各操作で「スケジュール」に含まれる遅延を前もって消化




kinug.com/wiki/Study/PFDS/7-Eliminating Amortization                                           5/5

More Related Content

Similar to 7 eliminating amortization

VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-Takeshi Yamamuro
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 sandai
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...Insight Technology, Inc.
 
FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理fisuda
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisitedUptime Technologies LLC (JP)
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06ohtsuchi
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 sandai
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
Principles of Transaction Processing Second Edition 9章 4~9節
Principles of Transaction Processing Second Edition 9章 4~9節Principles of Transaction Processing Second Edition 9章 4~9節
Principles of Transaction Processing Second Edition 9章 4~9節Yuichiro Saito
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!guestc06e54
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
Elastic7.12 release-new-features-on-0428
Elastic7.12 release-new-features-on-0428Elastic7.12 release-new-features-on-0428
Elastic7.12 release-new-features-on-0428Shotaro Suzuki
 
SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-Takeshi Yamamuro
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Toshi Harada
 
RDS(MySQL)の利用と注意点
RDS(MySQL)の利用と注意点RDS(MySQL)の利用と注意点
RDS(MySQL)の利用と注意点Hiroyasu Suzuki
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Hiraku Toyooka
 

Similar to 7 eliminating amortization (20)

VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
 
FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)
 
Principles of Transaction Processing Second Edition 9章 4~9節
Principles of Transaction Processing Second Edition 9章 4~9節Principles of Transaction Processing Second Edition 9章 4~9節
Principles of Transaction Processing Second Edition 9章 4~9節
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
Elastic7.12 release-new-features-on-0428
Elastic7.12 release-new-features-on-0428Elastic7.12 release-new-features-on-0428
Elastic7.12 release-new-features-on-0428
 
SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
RDS(MySQL)の利用と注意点
RDS(MySQL)の利用と注意点RDS(MySQL)の利用と注意点
RDS(MySQL)の利用と注意点
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
 

Recently uploaded

Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)keikoitakurag
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )iwashiira2ctf
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptxssuserbefd24
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一瑛一 西口
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdfAyachika Kitazaki
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521Satoshi Makita
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptxyassun7010
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayersToru Tamaki
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...atsushi061452
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose EstimationToru Tamaki
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizesatsushi061452
 

Recently uploaded (11)

Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 

7 eliminating amortization

  • 1. 12/10/16 Study/PFDS/7-Eliminating Amortization Study/PFDS/7-Eliminating Amortization 7 Eliminating Amortization これまでは、操作列全体が効率良くシンプルであることに注目してきた。 Raman[92] によると・・・ 個々の操作の実行時間が極端に長くならないことが重要な応用分野が存在する このような分野では、ならしデータ構造よりもワーストケースのデータ構造が多くの場合望ましい。 1. リアルタイムシステム 2. 並列システム - 高価な操作により他のプロセッサを待たせることになる 3. インタラクティブシステム - しばしばスピードよりも一貫性が重視される 4. 永続データ構造 しかし、ならし解析は永続データ構造と相性が良いことがこれまでの議論で分かっている ならしデータ構造はワーストケースよりも単純なので、 ワーストケースで最初から作るよりも いったんならしデータ構造を設計した後で、 ワーストケースに変換するほうが簡単な場合が時々ある。 「スケジューリングの手法とは」 遅延コンポーネントをシステマティックに評価(force)して、 遅延の実行時間があまり長くならないようにすることで、 遅延ならしデータ構造をワーストケースのデータ構造に変換する手法 すべてのオブジェクトをスケジュールと呼ばれる要素で拡張して、 遅延コンポーネントが評価される順序を規則づける。 kinug.com/wiki/Study/PFDS/7-Eliminating Amortization 1/5
  • 2. 12/10/16 Study/PFDS/7-Eliminating Amortization 7.1 Scheduling 「ならしデータ構造とワーストケースのデータ構造との違い」 ワーストケースのデータ構造では、 操作内のすべての計算がその操作の間に実行される。 ならしデータ構造では、 操作内の一部の計算が後の操作の時に実行される。 このことから見て、 完全な遅延評価言語でインプリメントされた場合、 多くの計算が必要以上に遅延されることから、 ならしとみなすことができる。 真のワーストケースのデータ構造をあらわすためには、 正格な言語(strict language)が必要である。 「遅延評価と正格評価の両方をサポートする言語を用いた複合的アプローチ」(の提案) 内部で遅延評価を行うワーストケースのデータ構造 遅延された慣らしデータ構造を元に、 すべての操作が割り当てられた時間内に実行されるように修正を加える 「遅延の本質コストを定義」(準備) まずは、以下の仮定の下で各遅延の本質コストを定義する 他のすべての遅延が評価済みでメモ化されている 他のすべての遅延がO(1) これは unshared cost に類似 kinug.com/wiki/Study/PFDS/7-Eliminating Amortization 2/5
  • 3. 12/10/16 Study/PFDS/7-Eliminating Amortization 「最初のステップ」(コストの調節) 全ての遅延の本質コストを要求された限界よりも小さくする 例えば次のような方法 基本的なアルゴリズムを変更 モノリシックな関数のみに対応した表現をインクリメンタルなものに書換える (例:遅延リスト(suspended lists)→ストリーム(streams)) 「連鎖反応」(コストが高くなるケース) 遅延が他の遅延に依存している場合には計算に時間がかかる 例 (・・・((s1 ++ s2) ++ s3) ++ ・・・) ++ sk 一番外側の ++ から返される遅延を評価すると、 全ての ++ を一気に実行する連鎖反応が起きる。 →O(k) 注:ドミノ倒し 一つのドミノを倒すコストが O(1) だとしても、 全てのドミノを倒すコストはずっと大きい kinug.com/wiki/Study/PFDS/7-Eliminating Amortization 3/5
  • 4. 12/10/16 Study/PFDS/7-Eliminating Amortization 「二つ目のステップ」(評価のスケジューリング) 遅延を評価する時点で、 その遅延が依存する他の遅延が全て評価され メモ化済みであるようにする。 ->数珠繋ぎの評価を回避 注:ドミノ倒し ドミノを倒したときに、次のドミノがすでに倒れているようにしておく。 そうすると個々のドミノを倒すコストは小さい 手順: 全てのオブジェクトを schedule と呼ぶ追加の要素で拡張 schedule は、オブジェクトに含まれる全ての未評価の遅延へのポインタを (少なくとも概念的に)含む。 schedule に評価済みの遅延が含まれても問題はない(早くなるだけ)。 全ての操作は、そのオブジェクトに対して行われる他の全ての操作に加えて、 スケジュールに含まれる最初の少しの遅延を評価する。 このとき評価する遅延の数はならし解析によって決められる(governed)。 多くの場合、全ての遅延はO(1)時間を実行に要するので、 その操作のならしコストに比例した数の遅延を評価する。 データ構造によっては、スケジュールの管理(方法?)は自明でない。 この手法を適用するために、新しい遅延をスケジュールに加えたり、 評価すべき次の遅延を取得したりするために、 定められたワーストケース境界以上の時間を要することはできない。 kinug.com/wiki/Study/PFDS/7-Eliminating Amortization 4/5
  • 5. 12/10/16 Study/PFDS/7-Eliminating Amortization まとめ 個々の操作の実行時間を一定以内に抑えたい ならしの手法で作ったアルゴリズムを変換する方法を提案する 1. 操作の本質コストを定義 2. 各操作のコストを要求仕様に合わせる アルゴリズムの変更 インクリメンタルな処理を行えるようにする 3. 遅延の評価タイミングの制御 オブジェクトを「スケジュール」要素で拡張して 未評価の遅延へのポインタを保持させる 各操作で「スケジュール」に含まれる遅延を前もって消化 kinug.com/wiki/Study/PFDS/7-Eliminating Amortization 5/5