(57)【特許請求の範囲】
【請求項１】
１以上のプロセッサにより実行可能な命令を有するメモリと、
前記メモリに接続され、前記命令を実行するよう動作可能な前記１以上のプロセッサと、
を有するシステムであって、
前記１以上のプロセッサは、前記命令が実行されると、
ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスするステップと、
前記ｎ個の変数を、各グループが
【数２２】
0005987289.tif 000116
個の順序付けされた集合を有する
【数２３】
0005987289.tif 000117
個のグループに分離するステップと、
前記
【数２４】
0005987289.tif 000118
個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの
【数２５】
0005987289.tif 000119
個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定するステップと、
前記
【数２６】
0005987289.tif 000120
個のグループに対応する
【数２７】
0005987289.tif 000121
個のローカルに最適な変数順序から、
【数２８】
0005987289.tif 000122
個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択するステップと、
を実行するよう動作可能であり、
ｎが偶数であるとき、前記
【数２９】
0005987289.tif 000123
個のグループのそれぞれの前記
【数３０】
0005987289.tif 000124
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、
ｎが奇数であるとき、前記
【数３１】
0005987289.tif 000125
個のグループのそれぞれの第１集合を除く前記
【数３２】
0005987289.tif 000126
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記
【数３３】
0005987289.tif 000127
個のグループのそれぞれにおける前記第１集合は、前記ｎ個の変数の１個を有し、前記
【数３４】
0005987289.tif 000128
個のグループにおける前記グループの
【数３５】
0005987289.tif 000129
個の順序付けされた集合において同一位置の順序を有するシステム。
【請求項２】
ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスするステップと、
前記ｎ個の変数を、各グループが
【数３６】
0005987289.tif 000130
個の順序付けされた集合を有する
【数３７】
0005987289.tif 000131
個のグループに分離するステップと、
前記
【数３８】
0005987289.tif 000132
個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの
【数３９】
0005987289.tif 000133
個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定するステップと、
前記
【数４０】
0005987289.tif 000134
個のグループに対応する
【数４１】
0005987289.tif 000135
個のローカルに最適な変数順序から、
【数４２】
0005987289.tif 000136
個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択するステップと、
を１以上のコンピュータシステムに実行させるプログラムを格納する非一時的なコンピュータ可読記憶媒体であって、
ｎが偶数であるとき、前記
【数４３】
0005987289.tif 000137
個のグループのそれぞれの前記
【数４４】
0005987289.tif 000138
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、
ｎが奇数であるとき、前記
【数４５】
0005987289.tif 000139
個のグループのそれぞれの第１集合を除く前記
【数４６】
0005987289.tif 000140
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記
【数４７】
0005987289.tif 000141
個のグループのそれぞれにおける前記第１集合は、前記ｎ個の変数の１個を有し、前記
【数４８】
0005987289.tif 000142
個のグループにおける前記グループの
【数４９】
0005987289.tif 000143
個の順序付けされた集合において同一位置の順序を有する記憶媒体。
【請求項３】
ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスする手段と、
前記ｎ個の変数を、各グループが
【数５０】
0005987289.tif 000144
個の順序付けされた集合を有する
【数５１】
0005987289.tif 000145
個のグループに分離する手段と、
前記
【数５２】
0005987289.tif 000146
個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの
【数５３】
0005987289.tif 000147
個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定する手段と、
前記
【数５４】
0005987289.tif 000148
個のグループに対応する
【数５５】
0005987289.tif 000149
個のローカルに最適な変数順序から、
【数５６】
0005987289.tif 000150
個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択する手段と、
を有するシステムであって、
ｎが偶数であるとき、前記
【数５７】
0005987289.tif 000151
個のグループのそれぞれの前記
【数５８】
0005987289.tif 000152
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、
ｎが奇数であるとき、前記
【数５９】
0005987289.tif 000153
個のグループのそれぞれの第１集合を除く前記
【数６０】
0005987289.tif 000154
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記
【数６１】
0005987289.tif 000155
個のグループのそれぞれにおける前記第１集合は、前記ｎ個の変数の１個を有し、前記
【数６２】
0005987289.tif 000156
個のグループにおける前記グループの
【数６３】
0005987289.tif 000157
個の順序付けされた集合において同一位置の順序を有するシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に二分決定図（Ｂｉｎａｒｙ  Ｄｅｃｉｓｉｏｎ  Ｄｉａｇｒａｍ：ＢＤＤ）に関する。
【背景技術】
【０００２】
二分決定図（ＢＤＤ）は、ブール関数を表現するのに使用されるデータ構造である。既約順序付き二分決定図（Ｒｅｄｕｃｅｄ  Ｏｒｄｅｒｅｄ  Ｂｉｎａｒｙ  Ｄｅｃｉｓｉｏｎ  Ｄｉａｇｒａｍ：ＲＯＢＤＤ）は、冗長なノードを有さず、変数が同型的なサブグラフを有し、ルートから終端ノードまでの各パスに沿って同じ順序で現れる最適化された二分決定図（ＢＤＤ）である。ＢＤＤのサイズは、それが表現するブール関数と当該関数の変数の順序との双方によって決定される。この結果、ＢＤＤのサイズは変数の順序が変わるに従ってしばしば大きく変更されるため、変数の順序付けは重大な最適化問題を示す。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明の課題は、上記問題点に鑑み、ペア単位変数グループ化を利用してＢＤＤの最適な変数順序を決定する方法及びシステムを提供することである。
【課題を解決するための手段】
【０００４】
本開示の一実施例では、計算装置が、ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスするステップと、前記ｎ個の変数を、各グループがｘ個（ｘは、ｎ／２又はｎ／２が整数でないときは切り上げたもの）個の順序付けされた集合を有するｎ！／２ｘ個のグループに分離し、前記ｎ！／２ｘ個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの２ｘ個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定し、前記２ｘ個のグループに対応するｎ！／２ｘ個のローカルに最適な変数順序から、ｎ！／２ｘ個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択する。ｎが偶数であるとき、各グループの順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、ｎが奇数であるとき、各グループの第１集合を除く順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記第１集合は、前記ｎ個の変数の１個を有し、前記グループにおける順序付けされた集合において同一位置の順序を有する。
【発明の効果】
【０００５】
本発明によると、ペア単位変数グループ化を利用してＢＤＤの最適な変数順序を決定する方法及びシステムを提供することができる。
【図面の簡単な説明】
【０００６】
【図１】図１は、従来の４つの変数を有するブール関数を表現するＢＤＤを示す。
【図２】図２は、従来の４つの変数を有するブール関数を表現する最適化されたＢＤＤを示す。
【図３】図３は、従来の変数の順序が異なる同一のブール関数を表現するＢＤＤを示す。
【図４】図４は、従来の変数の順序が異なる同一のブール関数を表現するＢＤＤを示す。
【図５】図５は、従来の４つの変数を有する関数を表現するＢＤＤに適用される一例となるＢＤＤ変数リオーダ処理を示す。
【図６】図６は、従来の２，３及び４つの変数をそれぞれ有する関数を表現するＢＤＤに適用される単純変更アルゴリズムを示す。
【図７】図７は、従来の８つの変数を有する関数を表現するＢＤＤに適用されるシフトアルゴリズムを示す。
【図８】図８は、従来の８つの変数を有する関数を表現するＢＤＤに適用されるウィンドウアルゴリズムを示す。
【図９】図９は、８つのレイヤを有するＢＤＤに適用される最大パラレル化のコンセプトの一例を示す。
【図１０】図１０は、６つのレイヤを有するＢＤＤに適用される非明示的列挙のコンセプトの一例を示す。
【図１１Ａ】図１１Ａは、パラレル置換アルゴリズムの一例を示す。
【図１１Ｂ】図１１Ｂは、６つの変数に対応する６つのレイヤを有するＢＤＤに適用されるパラレル置換アルゴリズムを示す。
【図１２Ａ】図１２Ａは、４つの変数に対応する４つのレイヤを有するＢＤＤの一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｂ】図１２Ｂは、４つの変数に対応する４つのレイヤを有するＢＤＤの一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｃ】図１２Ｃは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｄ】図１２Ｄは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｅ】図１２Ｅは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｆ】図１２Ｆは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｇ】図１２Ｇは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｈ】図１２Ｈは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｉ】図１２Ｉは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｊ】図１２Ｊは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｋ】図１２Ｋは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｌ】図１２Ｌは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｍ】図１２Ｍは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｎ】図１２Ｎは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｏ】図１２Ｏは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｐ】図１２Ｐは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｑ】図１２Ｑは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｒ】図１２Ｒは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｓ】図１２Ｓは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｔ】図１２Ｔは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｕ】図１２Ｕは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｖ】図１２Ｖは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｗ】図１２Ｗは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｘ】図１２Ｘは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｙ】図１２Ｙは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１２Ｚ】図１２Ｚは、４つの変数に対応する４つのレイヤを有するＢＤＤのさらなる一例となる最適レイヤ交換スケジュールを示す。
【図１３Ａ】図１３Ａは、ＢＤＤの変数のペア毎のグループ化の一例を示す。
【図１３Ｂ】図１３Ｂは、４つの変数のペア毎のグループ化を示す。
【図１４Ａ】図１４Ａは、ＢＤＤの変数の再帰的分離の一例を示す。
【図１４Ｂ】図１４Ｂは、８つの変数の再帰的分離を示す。
【図１５Ａ】図１５Ａは、パラレルウィンドウアルゴリズムの一例を示す。
【図１５Ｂ】図１５Ｂは、１２個の変数に対応する１２個のレイヤを有するＢＤＤに適用されるパラレルウィンドウアルゴリズムを示す。
【図１６】図１６は、６つの変数に対応する６つのレイヤを有するＢＤＤに適用される最大パラレル化によるウィンドウアルゴリズムの一例を示す。
【図１７Ａ】図１７Ａは、パラレルシフトアルゴリズムの一例を示す。
【図１７Ｂ】図１７Ｂは、９つの変数を有する９つのレイヤを有するＢＤＤに適用されるパラレルシフトアルゴリズムを示す。
【図１８】図１８は、一例となる計算装置を示す。
【発明を実施するための形態】
【０００７】
以下、図面に基づいて本発明の実施の形態を説明する。
【０００８】
二分決定図（ＢＤＤ）は、ブール関数を表現するのに使用されるデータ構造である。ＢＤＤは、１以上の内部の決定ノードと２つの終端ノードとを有するルートのある有向アサイクリックグラフとしてグラフ表現されてもよい。各決定ノードは、ブール関数の異なる変数を表し、典型的にはグラフ内で丸の記号により示される。２つの終端ノードである０終端ノードと１終端ノードとは、典型的には、グラフ内で正方形の記号により示される。各決定ノードは、典型的には、グラフ内で破線として示される０エッジと、グラフ内で実線として示される１エッジとを有する。各エッジは、他の決定ノード又は終端ノードの１つに接続されてもよい。
【０００９】
グラフ内の各パスは、１以上の決定ノードとそれらに関連するエッジとによって形成され、最終的に０終端ノード又は１終端ノードに導かれる。あるパスを形成する各決定ノードは、ブール関数の異なる変数を表す。すなわち、１つのパス上の何れの２つの決定ノードも同一の変数を表すものでない。０終端ノードに導かれるパスは、当該パス上の決定ノードにより表される変数に割り当てられた各値に対してブール関数がＦＡＬＳＥとなることを示し、１終端ノードに導かれるパスは、当該パス上の決定ノードにより表される変数に割り当てられた各値に対してブール関数がＴＲＵＥとなることを示す。
【００１０】
図１は、４つの変数ｘ１，ｘ２，ｘ３，ｘ４を有するブール関数を表現する一例となるＢＤＤ１００を示す。ＢＤＤ１００により表現されるブール関数は４つの変数を有するため、ＢＤＤ１００は、高々４つの決定ノードレイヤ、すなわち、レイヤ１〜４を有する。すなわち、ＢＤＤ１００には各レイヤが少なくとも１つの決定ノードを有する高々４つのレイヤがある。より詳細には、図１において、変数ｘ１を表す決定ノードはＢＤＤ１００のレイヤ１にあり、変数ｘ２を表す決定ノードはＢＤＤ１００のレイヤ２にあり、変数ｘ３を表す決定ノードはＢＤＤ１００のレイヤ３にあり、変数ｘ４を表す決定ノードはＢＤＤ１００のレイヤ４にある。決定ノードとそれらの関連するエッジとにより形成されるＢＤＤ１００の各パスは、０終端ノード又は１終端ノードの何れかに導かれ、それぞれがブール関数がＦＡＬＳＥ又はＴＲＵＥと評価されることを示す。理解を容易にするため、図１では、０終端ノードと１終端ノードは複数示されることに留意されたい。
【００１１】
実際、ＢＤＤ１００は、ＢＤＤ１００のノードのいくつかが冗長であり、ＢＤＤ１００の一部が同型的（ｉｓｏｍｏｒｐｈｉｃ）であるとき、ブール関数の最適化された表現とはならない。例えば、０終端ノードで終了するパス１０２，１０４を考える。パス１０２，１０４上の決定ノードを検討することによって、変数ｘ３を表す決定ノード１５２がそれの１エッジに沿って分岐する限り、変数ｘ４を表す決定ノード１５４が何れの分岐に進むかにかかわらず、ブール関数はＦＡＬＳＥとなることが判断される。従って、決定ノード１５４は、０終端ノードと置換されてもよい。同様に、パス１１２，１１４，１１６，１１８はすべて１終端ノードで終端する。これら４つのパス上の決定ノードを検討することによって、変数ｘ２を表す決定ノード１６２がそれの１エッジに沿って分岐する限り、変数ｘ３を表す決定ノード１６４と、変数ｘ４を表す決定ノード１６６，１６８とが何れの分岐に進むかにかかわらず、ブール関数はＴＲＵＥになることが判断される。従って、決定ノード１６４，１６６，１６８は、１終端ノードと置換されてもよい。他の例として、変数ｘ４を表す決定ノード１７２，１７４を考える。決定ノード１７２，１７４は共に、０エッジが０終端ノードに導かれ、１エッジが１終端ノードに導かれる。従って、それらは互いに重複する、すなわち、同型的である。従って、それらの一方はＢＤＤ１００から削除されてもよい。図２は、ＢＤＤ１００により表現されるものと同一のブール関数を表現する、ＢＤＤ１００より最適化された一例となるＢＤＤ２００を示す。ＢＤＤ２００は、ＢＤＤ１００の冗長な決定ノードと同型的な部分とを削除した結果として、より少ないノードを使用して同一のブール関数を表現している。
【００１２】
冗長な決定ノードと同型的な部分グラフとが削除され、ＢＤＤのすべてのパスに沿ってルートから終端ノードまで同じ順序で決定ノードが出現するＢＤＤは、既約順序付け二分決定図（ＲＯＢＤＤ）と呼ばれる。ＲＯＢＤＤの効果は、それがある関数と変数の順序についてカノニカル（ｃａｎｏｎｉｃａｌ）であり、関数等価性チェックや関数テクノロジーマッピングなどの各種の実際的なアプリケーションにおいて有用であることである。
【００１３】
ＲＯＢＤＤは、２つの重要な性質を有する。第１に、ＲＯＢＤＤは順序付けされている。すなわち、任意の非終端ノードｖに対して、ｌｏｗ（ｖ）及びｈｉｇｈ（ｖ）もまた非終端ノードである場合、ｉｎｄｅｘ（ｌｏｗ（ｖ））＝π（ｋ）とｉｎｄｅｘ（ｈｉｇｈ（ｖ））＝π（ｑ）が成り立つような（ただし、ｋ＞π−１（ｉｎｄｅｘ（ｖ））、ｑ＞π−１（ｉｎｄｅｘ（ｖ））である）固定的な順序π｛１，．．．，ｎ｝→｛ｘ１，．．．，ｘｎ｝が存在する。第２に、ＲＯＢＤＤは既約である。すなわち、ｌｏｗ（ｖ）＝ｈｉｇｈ（ｖ）となるような非終端ノード
【００１４】
【数１】
0005987289.tif 000002
が存在せず、ｖ及びｖ’をルートとする部分ＢＤＤが同型的なものとなるような２つの非終端ノードｖ，ｖ’が存在しない。ここで、非終端ノードとは決定ノードである。例えば、図２において、ＢＤＤ２００は、それが４つの変数を有するブール関数を表現するとき、４つのレイヤを有する。ＢＤＤ２００は順序付けされているため、各レイヤはある変数に対応する決定ノードを含む。例えば、レイヤ２は、変数ｘ２のみに対応する決定ノードを有し、他の変数（ｘ１，ｘ３又はｘ４など）に対応する決定ノードを有さない。
【００１５】
ブール関数ｆ（ｘ１，．．．，ｘｎ）は、２以上のブール関数ｆ１（ｘ１，．．．，ｘｎ）からｆｍ（ｘ１，．．．，ｘｎ）に分割又はパーティション（ｐａｒｔｉｔｉｏｎ）されてもよい。各ブール関数ｆ１からｆｍは、オリジナルのブール関数ｆのパーティションとみなされてもよい。各ブール関数ｆ１からｆｍがＢＤＤにより表現される場合、オリジナルのブール関数ｆを表すＢＤＤは、ｆのパーティション（すなわち、ｆ１からｆｍ）を表すすべてのＢＤＤの論理ＯＲをとることによって取得されてもよい。ある実施例では、ブール関数ｆ１からｆｍを表すＢＤＤのそれぞれはＲＯＢＤＤであってもよく、オリジナルのブール関数ｆを表すＢＤＤに関するパーティションされた既約順序付け二分決定図（ＰＯＢＤＤ）と呼ばれてもよい。
［ＢＤＤ変数の順序］
ＢＤＤのサイズは、それが表現するブール関数と当該関数の変数の選択された順序との双方によって決定される。ＢＤＤのサイズは、それの各レイヤのすべてのサイズの合計である。ある実施例では、ＢＤＤのサイズは、ＢＤＤの決定ノードの個数に関して表されてもよい。同様に、ＢＤＤのレイヤのサイズは、当該レイヤにおける決定ノードの個数に関して表されてもよい。
【００１６】
変数ｘ１，．．．，ｘｎの順序付けに応じてＢＤＤにより表現されるブール関数ｆ（ｘ１，．．．，ｘｎ）が与えられると、グラフのノードの個数は、ｎに関してベストケースでは線形であり、ワーストケースでは指数的である。例えば、変数順序ｘ１＜ｘ３＜・・・＜ｘ２ｎ−１＜ｘ２＜ｘ４＜・・・＜ｘ２ｎを用いたブール関数ｆ（ｘ１，．．．，ｘｎ）＝ｘ１ｘ２＋ｘ３ｘ４＋・・・＋ｘ２ｎ−１ｘ２ｎに対して、図３に示されるように、ＢＤＤは、ブール関数を表現するため２ｎ＋１個のノードを必要とする。他方、変数順序ｘ１＜ｘ２＜ｘ３＜ｘ４＜・・・＜ｘ２ｎ−１＜ｘ２ｎを用いると、図４に示されるように、ＢＤＤは、同じブール関数を表現するのに２ｎ個のノードしか必要としない。この例が示すように、変数順序は、ＢＤＤのサイズがそれの変数順序の変化に従ってしばしば大きく変動するため、ＢＤＤに対して決定的な最適化問題を示す。
【００１７】
ＢＤＤのあるレイヤが与えられると、第１変数（ｘ１など）が当該レイヤに配置されるとき、当該レイヤは１つのサイズを有する。第２変数（ｘ２など）が同じレイヤに配置されると、当該レイヤは他の異なるサイズを有する。さらに、あるレイヤ（レイヤ３など）に配置されるある変数（ｘ３など）を有するＢＤＤの当該レイヤが与えられると、変数に関するレイヤのサイズは、当該レイヤより上位のレイヤ（レイヤ１及び２など）及び下位のレイヤ（レイヤ４など）に配置される特定の変数に依存する。従って、例えば、変数ｘ３がレイヤ３に配置される場合、変数ｘ１，ｘ２がレイヤ１，２に配置され、変数ｘ４がレイヤ４に配置されると、変数ｘ３に関するレイヤ３は１つのサイズを有する。しかしながら、変数ｘ４，ｘ１がレイヤ１，２に配置され、変数ｘ２がレイヤ４に配置されると、変数ｘ３に関するレイヤ３は、変数ｘ３がレイヤ３にあっても、他の異なるサイズを有する可能性がある。
【００１８】
ＢＤＤ変数の順序付けに関する研究がなされてきた。ＢＤＤ変数の順序付けの目標は、一般に必要とされるＢＤＤノードの個数が最小化され、関数を表現するＢＤＤのサイズを低減できるように、関数の変数の最適な又は実質的に最適な変数順序を求めることである。一般に、ＢＤＤのサイズが最小となるＢＤＤの最適な変数順序を求めるため、ＢＤＤのサイズが最小となる変数の順序置換が求められるように、ＢＤＤの変数の必ずしも可能な全てではないが多数の順序の置換を調べることが必要であるかもしれない。この順序の置換は、ＢＤＤの最適な変数順序をもたらす。変数の具体的な各順序の置換はＢＤＤの異なる変数順序を示すことに留意されたい。しかしながら、実際には、ＢＤＤの変数の可能性のある全ての順序の置換を求め、ＢＤＤの可能性のある全ての変数の順序を求めることは、ｎ個の変数の関数を表現するＢＤＤに対してこれらの変数の可能性のある順序の置換はｎ！（ｎの階乗であり、ｎ！＝１×２×・・・×ｎ）通り存在するため、要求される時間とリソースに関して大変コストのかかるものとなる。
【００１９】
ＢＤＤの変数の異なる順序の置換を調べるため、ＢＤＤの変数が、適切なリオーダアルゴリズム（Ｒｅｏｒｄｅｒｉｎｇ  Ａｌｇｏｒｉｔｈｍ）を用いてリオーダされてもよい。それらの最もシンプルな形式では、リオーダアルゴリズムは、ＢＤＤの変数の現在の順序の置換を他の異なる順序の置換に変換する。ＢＤＤの最後の順序の置換は、例えば、ある人によって指定されてもよいし（例えば、ある設計仕様又はパフォーマンス基準などに従って）、又はＢＤＤが使用されるアプリケーションに基づき決定されてもよい。ＢＤＤ変数のリオーダアルゴリズム又は処理に関する研究の大多数は、ＢＤＤの２つの連続するレイヤはＢＤＤの残りに影響を与えることなく効率的にスワップ又は交換可能であるという性質を利用する。ＢＤＤの２つのレイヤを交換することによって、これら２つのレイヤにおける２つの対応する変数の順序はまた交換され、これにより、各交換によってＢＤＤの変数の２つをリオーダすることができる。従って、変数リオーダアルゴリズムは、あるターゲット目標に到達するまで、ローカルな交換を適用することによって所与のＢＤＤを変換する。
【００２０】
図５は、ＢＤＤのための一例となる変数リオーダ処理を示す。これは、最も一般的に使用されるリオーダアルゴリズムの１つであり、ＢＤＤの２つの連続するレイヤの交換を繰り返し実行することによって、各変数をそれの正しい最終位置に移動させるものである。説明の簡単化のため、リオーダアルゴリズムは、任意数の変数を有する関数を表現するＢＤＤに適用されてもよいが、４つの変数を有する関数を表現するＢＤＤ５００を用いて説明される。以降において、図面の水平方向のラインはＢＤＤレイヤを表し、垂直方向のラインはレイヤの交換を表す。４つの変数があるため、ＢＤＤ５００は、レイヤ１〜４に対応する４つの水平方向のラインを示す。まず、ＢＤＤ５００は、変数１がレイヤ１にあり、変数２がレイヤ２にあり、変数３がレイヤ３にあり、変数４はレイヤ４にある第１変数順序を有する。初期的な第１変数順序と異なって、変数１がレイヤ４にあり、変数２がレイヤ３にあり、変数３がレイヤ２にあり、変数４がレイヤ１にある第２変数順序を実現するため、ＢＤＤ５００の４つの変数をリオーダすることが所望されると仮定する。
【００２１】
変数１をレイヤ４に移すため、リオーダアルゴリズムはまず、レイヤ１とレイヤ２とを交換する（すなわち、スワップ５０１）。スワップ５０１の後、変数２はレイヤ１にあり、変数１はレイヤ２にある。次に、レイヤ２とレイヤ３とが交換され（すなわち、スワップ５０２）、その後、変数３がレイヤ２にあり、変数１がレイヤ３にある。最後に、レイヤ３とレイヤ４とが交換される（すなわち、スワップ５０３）。この時点では、変数１は所望の位置であるレイヤ４にあり、変数４はレイヤ３にある。変数２をレイヤ３に移すため（ここで、スワップ５０１によって、変数２は現在レイヤ１にある）、レイヤ１とレイヤ２とが再び交換され（すなわち、スワップ５０４）、その後に、変数３がレイヤ１にあり、変数２がレイヤ２にある。次に、レイヤ３とレイヤ４とが交換される（すなわち、スワップ５０５）。この時点では、変数２が所望の位置であるレイヤ３にあり、変数４がレイヤ２にある。変数３をレイヤ２に移すため（ここで、変数３は現在レイヤ１にある）、レイヤ１とレイヤ２とが交換される（すなわち、スワップ５０６）。この時点では、変数３はレイヤ２にあり、変数４はレイヤ１にある。所望の第２変数順序がＢＤＤ５００に対して実現され、リオーダアルゴリズムが終了される。
【００２２】
図５に示されるように、ＢＤＤ５００の４つの変数を第１変数順序から第２変数順序にリオーダするために（すなわち、ＢＤＤを第１変数順序置換から第２変数順序置換に変換するため）、合計で６回のレイヤスワップを要する。ＢＤＤの２つの連続するレイヤはＢＤＤの残りに影響を与えることなく交換可能である。従って、連続するレイヤの分離されたペアは、連続するレイヤの１つのペアの交換が他の何れのレイヤにも影響を与えず、従って他の何れの連続するレイヤのペアにも影響を与えないため、同時に交換されてもよい。ＢＤＤの連続するレイヤのペアは、互いに隣り合う何れか２つのレイヤである（例えば、１≦ｉ≦ｎ−１に対して、レイヤｉとレイヤｉ＋１など）。連続するレイヤの２つの互いに素であるペアは、共通するレイヤを共有しない連続するレイヤの２つのペアである（例えば、一方のペアがレイヤｉとレイヤｉ＋１であり、他方のペアがレイヤｉ＋２とレイヤｉ＋３など）。
【００２３】
図５において、レイヤ３とレイヤ４との間のスワップ５０３は、レイヤ１とレイヤ２との間のスワップ５０４に続く。レイヤ３，４とレイヤ１，２とは、これら２つのレイヤのペアが共通するレイヤを共有しないため、連続するレイヤの互いに素である２つのペアである。従って、スワップ５０３と５０４とは、これらのスワップが互いに影響を与えないため（すなわち、これら２つのスワップは互いの結果に依存しない）、同時に（すなわち、パラレルに）実行されてもよい。他方、レイヤ１とレイヤ２との間のスワップ５０１は、レイヤ２とレイヤ３との間のスワップ５０２に続く。レイヤ１，２とレイヤ２，３とは、これら２つのペアが共通するレイヤ２を共有するため、連続するレイヤの２つの互いに素なペアでない。従って、スワップ５０１と５０２とは、スワップ５０２がその実行前にスワップ５０１の結果を必要とするため、同時には実行できない。
［変数リオーダアルゴリズム］
ＢＤＤの変数順序は、ＢＤＤにより表現される関数の何れの変数がＢＤＤの何れのレイヤに配置されるか示す。ＢＤＤの最適な変数順序は、ＢＤＤの変数の可能性のある全ての変数の順序の置換に対してＢＤＤのサイズが最小となる、ＢＤＤにより表現される関数の変数の順序付けである。一般に、ＢＤＤは、１以上の最適な変数順序を有する可能性がある。ｎ個の変数を有する関数を表現するＢＤＤが与えられると、それの最適な変数順序を求めるのに利用可能な異なるアルゴリズム又は処理が存在する。
・単純変更アルゴリズム
ＢＤＤの最適な変数順序を決定するのに一般的に使用されるアルゴリズムは、“単純変更（ｐｌａｉｎ  ｃｈａｎｇｅ）”と呼ばれる転置ネットワークアルゴリズムに基づく。これは、当該アルゴリズムが所与のＢＤＤに対して正確に最適な変数順序を決定可能であるという理由のため（すなわち、最小サイズを有するＢＤＤをもたらすＢＤＤの変数順序）、イグザクトアルゴリズム（ｅｘａｃｔ  ａｌｇｏｒｉｔｈｍ）である。単純変更アルゴリズムによって、ＢＤＤの変数の可能性のある全ての順序の置換が取得され、これにより、ＢＤＤが最小サイズを有する変数順序を検出することができる。この変数順序は、ＢＤＤの最適な変数順序とみなされる。ｎ個の変数の関数を表現するＢＤＤに対して、単純変更アルゴリズムは、可能性のある全てのｎ！個の変数順序の置換をカバーするため、ＢＤＤの連続する２つのレイヤの間の（ｎ！−１）回のスワップが実行されることを要求する。ＢＤＤは常に初期的な変数順序を有し、１つの変数順序の置換はレイヤスワップを要することなくすでに取得されていることに留意されたい。その後、ＢＤＤのｎ個の変数は、適切なリオーダアルゴリズムを用いて最適な変数順序を実現することによってリオーダされる。
【００２４】
図６は、２，３及び４個の変数をそれぞれ有する関数を表現するＢＤＤに適用される、レイヤスワップが実行される単純変更アルゴリズムを示す。図６において、ＢＤＤ６１０は、２つの変数（すなわち、ｎ＝２）に対応する２つのレイヤを有する。ＢＤＤ６１０の２つの変数に対して２つの可能性のある変数順序の置換があり（すなわち、２！）、２つの変数の２つの可能性のある順序の置換を取得するのに１回のレイヤスワップを要する。ＢＤＤ６１０に対して最適な変数順序を決定するため、初期的な第１変数順序を有するＢＤＤ６１０のサイズが決定及び記録される。２つのレイヤは、第２の可能性のある変数順序を取得するため交換される。第２変数順序を有するＢＤＤ６１０のサイズがまた決定及び記録される。その後、これら２つのサイズが比較され、より小さなサイズをもたらす変数順序が、ＢＤＤ６１０の最適な変数順序として選択される。
【００２５】
ＢＤＤ６２０は、３つの変数（すなわち、ｎ＝３）に対応する３つのレイヤを有する。ＢＤＤ６２０の３つの変数に対して６つの可能性のある変数順序の置換があり（すなわち、３！）、３つの変数の６つの可能性のある変数順序の置換を取得するため、５回のレイヤスワップを要する。ＢＤＤ６２０に対して最適な変数順序を決定するため、６つの異なる変数順序に対応するＢＤＤ６２０の６つのサイズが個別に決定及び記録される。その後、６つのサイズが比較され、最小サイズをもたらす変数順序が、ＢＤＤ６２０の最適な変数順序として選択される。
【００２６】
ＢＤＤ６３０は、４つの変数（すなわち、ｎ＝４）に対応する４つのレイヤを有する。ＢＤＤ６３０の４つの変数に対して２４個の可能性のある変数順序の置換がある（すなわち、４！）。ＢＤＤ６１０，６２０に関して説明されるものと同様の処理が、ＢＤＤ６３０に対して最適な変数順序を決定するために適用される。この場合、２４個の異なる変数順序に対応するＢＤＤ６３０の２４個のサイズがあり、最小サイズをもたらす変数順序が、ＢＤＤ６３０の最適な変数順序として選択される。
【００２７】
単純変更アルゴリズムは、（ｎ−１）個の変数のレイヤスワップシーケンスからｎ個の変数のレイヤスワップシーケンスを構成することによって帰納的に実行される。ｎ個の変数に対して、レイヤスワップ（１，２），（２，３），．．．，（ｎ−１，ｎ）及び（ｎ−１，ｎ），（ｎ−２，ｎ−１），．．．，（１，２）が、（ｎ−１）個の変数のレイヤスワップのシーケンスからのレイヤスワップ間に交互に加えられる。従って、３つの変数のレイヤスワップシーケンスは、２つの変数のレイヤスワップシーケンスから構成される。レイヤ１とレイヤ２との間のＢＤＤ６２０のスワップ６２３は、ＢＤＤ６１０のスワップ６１１に対応する。また、ＢＤＤ６２０において、レイヤ１とレイヤ２との間のスワップ（すなわち、スワップ６２１）と、レイヤ２とレイヤ３との間のスワップ（すなわち、スワップ６２２）とがスワップ６２１の前に加えられ、レイヤ２とレイヤ３との間のスワップ（すなわち、スワップ６２４）と、レイヤ１とレイヤ２との間のスワップ（すなわち、スワップ６２５）とがスワップ６２１の後に加えられる。同様に、４つの変数のレイヤスワップシーケンスが、３つの変数のレイヤスワップシーケンスから構成される。ＢＤＤ６３０のスワップ６３１，６３２，６３３，６３４，６３５はそれぞれ、ＢＤＤ６２０のスワップ６２１，６２２，６２３，６２４，６２５に対応する。また、ＢＤＤ６３０において、レイヤ１とレイヤ２との間のスワップ、レイヤ２とレイヤ３との間のスワップ、レイヤ３とレイヤ４との間のスワップ、レイヤ３とレイヤ４との間のスワップ、レイヤ２とレイヤ３との間のスワップ及びレイヤ１とレイヤ２との間のスワップが、スワップ６３１，６３２，６３３，６３４，６３５の間に交互に加えられる。
【００２８】
図６に示されるように、実行されるレイヤスワップの大部分は、それらの直前のレイヤスワップに依存するため、単純変更アルゴリズムは効率的にパラレル化することができない。
・シフトアルゴリズム
ＢＤＤの実質的に最適な変数順序を決定するヒューリスティックなアルゴリズムがある。ヒューリスティックアルゴリズムは、ＢＤＤのサイズがそれの最小値となるＢＤＤの最適な変数順序を常に決定することができるとは限らないが、ＢＤＤのサイズが、所望の閾値以下など十分小さなＢＤＤの実質的に最適な変数順序を決定することができる。広く利用されるヒューリスティックアルゴリズムは、シフトアルゴリズム（Ｓｈｉｆｔｉｎｇ  Ａｌｇｏｒｉｔｈｍ）である。それは、ＢＤＤの各変数に対して最適な位置を独立に求めることによって実行される。ＢＤＤの各変数は、当該変数が配置される初期的なレイヤにより近いエンドレイヤに移動（シフト）される。その後、変数は、ＢＤＤの反対のエンドレイヤに移動される。変数が新たなレイヤに移動させる毎に、変数が現在配置されているレイヤのサイズ（例えば、当該レイヤ上の決定ノードの個数に関する）が決定及び記録される。従って、変数をＢＤＤの１つのエンドレイヤから他のエンドレイヤに移動させることによって、これらのレイヤにおける変数による全てのレイヤのサイズが決定される。最小のサイズを有するレイヤが、当該変数に対する最適なレイヤ（すなわち、位置）とみなされる。その後、変数は、当該変数に関してＢＤＤのサイズがローカルに最小となる最適なレイヤに移される。
【００２９】
図７は、８つの変数を有する関数を表現するＢＤＤ７００の変数の１つである変数５に適用されるシフト処理を示す。ＢＤＤ７００は、８つのレイヤを有することになる。初期的には、変数５はレイヤ５にある。ＢＤＤ７００の２つのエンドレイヤは、ＢＤＤ７００が合計で８つのレイヤを有するため、レイヤ１とレイヤ８とになる。レイヤ８がレイヤ５により近い。従って、変数５は、それがレイヤ８上にくるまで、１回に１つのレイヤずつ下方にまず移動される。その後、変数５は、レイヤ１上にくるまで、再び１回に１つのレイヤずつ上方に移動される。変数５をあるレイヤから他の隣接するレイヤに移動させるため、これら２つのレイヤが交換されることに留意されたい。例えば、変数５をレイヤ５からレイヤ６に移動させるため、レイヤ５とレイヤ６とが交換される。変数５がレイヤ８にまず移動し、その後にレイヤ１に戻るのに１０回のレイヤスワップを要する。これを実行することによって、変数５が配置された各レイヤのサイズが決定され、最小サイズを有するレイヤが変数５の最適なレイヤとして選択される。変数５の最適レイヤがレイヤ４であると仮定する。このとき、変数５はレイヤ１からレイヤ４まで移動され、さらに３回のレイヤスワップを要することになる。
【００３０】
同一の処理が、各変数に適用され、当該変数の最適な位置が決定される。各変数は、初期的にそれに従属する決定ノードの個数に基づき選択されてもよい。例えば、アルゴリズムは、それに従属する決定ノードの個数が初期的に最大となる変数から開始され、上述した処理を用いてこの最初の変数に対してＢＤＤにおける最適な位置（すなわち、レイヤ）を決定し、最初の変数をそれの最適レイヤに移動させるようにしてもよい。その後、アルゴリズムは、初期的にそれに従属する決定ノードの個数が２番目に最大となる他の変数に対して上記処理を繰り返してもよい。以下同様にして、すべての変数が各自の最適レイヤに移動されるまで、又はＢＤＤの合計サイズが所望又は所定の閾値より小さくなるまで、又は変数位置の調整がもはやＢＤＤの合計サイズを有意に減少させなくなるまで（例えば、２つの連続する変数位置の調整の間のＢＤＤのサイズの差分が所定の閾値未満になるなど）、続けられる。シフトアルゴリズムもまた、所与の変数のシフトに要する各レイヤスワップがその直前のものに依存するため、パラレル化することができない。
［ウィンドウアルゴリズム］
他のヒューリスティックアルゴリズムは、ウィンドウアルゴリズム（Ｗｉｎｄｏｗ  Ａｌｇｏｒｉｔｈｍ）である。一般に、ウィンドウアルゴリズムは、ＢＤＤに対するグローバルに最適な変数順序を検出することはできないが、高速な実行時間という所望の性質を有する。ｎ個の変数を有する関数を表現するＢＤＤに対して、サイズｋの“ウィンドウ”が使用される（ただし、２≦ｋ＜ｎ）。アルゴリズムは、レイヤの最適な順序付け［１．．．ｋ］，［２．．．ｋ＋１］，［３．．．ｋ＋２］，．．．，［ｎ−ｋ＋１．．．ｎ］を繰り返しかつ順次に検出する。すなわち、各ウィンドウに対して、ウィンドウ内のｋ個の連続するレイヤの最適な順序が決定され、ウィンドウ内のｋ個の連続するレイヤが各自の最適な順序に従ってリオーダされる。これは、図６に関して上述された単純変更アルゴリズムを用いて実行されてもよい。当該処理は、ＢＤＤの合計サイズが所望又は所定の閾値未満になるまで、又はウィンドウ内の変数のさらなる調整がＢＤＤの合計サイズをもはや有意に減少させなくなるまで、又はさらなるサイズの改善が可能でなくなるまで、各ウィンドウに繰り返しかつ順次に適用される（例えば、単純変更アルゴリズムを繰り返し用いて）。
【００３１】
図８は、８つの変数を有する関数を表現するＢＤＤ８００に適用されるウィンドウアルゴリズムを示す。ＢＤＤは、８つのレイヤを有することになる。本例では、ウィンドウサイズｋは３となるよう選択される。従って、まずレイヤ１からレイヤ３が、それらの最適な順序に従ってリオーダされる（単純変更アルゴリズムなどを用いて）。次に、レイヤ２からレイヤ４が、それらの最適な順序に従ってリオーダされる。以下同様に実行される。ウィンドウがレイヤ６からレイヤ８まで下方に移動すると、必要に応じて、ウィンドウは再びレイヤ１から再開されてもよい。ウィンドウアルゴリズムはサブセットとして単純変更アルゴリズムを利用するため、それは、典型的にはパラレル化できない。
・パラレル変数リオーダアルゴリズム
ＢＤＤに対して最適な又は実質的に最適な変数順序を決定し、その最適な又は実質的に最適な変数順序に従ってＢＤＤの変数をリオーダするいくつかの既存の変数リオーダアルゴリズムが存在するが、図６〜８に示されるように、それらは何れも効率的にパラレル化することができない。他方、最適な又は実質的に最適な変数順序に従ってＢＤＤの変数をリオーダすることは、特にＢＤＤの変数の個数が十分多いときには、大変コストのかかるものとなる（例えば、時間及びヒューマンリソース又はマシーンリソースなどに関して）。例えば、単純変更アルゴリズムが示すように、ｎ個の変数を有する関数を表現するＢＤＤに対して、それの最適な変数順序を決定するには合計で（ｎ！−１）回のレイヤスワップを要する。実際のアプリケーションでは、ＢＤＤはしばしば数百又は数千のレイヤを有している。
【００３２】
このため、本開示の各種実施例は、リオーダ処理を効率的にパラレル化することによって、既存のアルゴリズムに対して有意に改善する、ＢＤＤのための複数の変数リオーダアルゴリズムを提供する。各種実施例で説明されるパラレル変数リオーダアルゴリズムの設計の基礎には、２つの主要なコンセプトがある。ｎ個のレイヤを有する所与のＢＤＤに対して、２つの連続するレイヤ（例えば、レイヤｊとレイヤｊ＋１など）の間でローカルスワップを実行することは、ＢＤＤのその他のレイヤ（すなわち、レイヤ１〜レイヤｊ−１，レイヤｊ＋２〜レイヤｎ）を変更したり、又は影響を与えない。この性質は、再帰的に適用可能である。ある実施例では、互いに依存しない全てのレイヤスワップが、同時に実行されてもよい。
【００３３】
例えば、８つのレイヤを有するＢＤＤ９００を示す図９を検討する。８つのレイヤは、連続するレイヤの複数の互いに素であるペアにグループ化されてもよい。ある実施例では、あるタイプのグループ化に従って、レイヤ１とレイヤ２とがペアとされ、レイヤ３とレイヤ４とがペアとされ、レイヤ５とレイヤ６とがペアとされ、レイヤ７とレイヤ８とがペアとされてもよい。このタイプのグループ化によると、ＢＤＤ９００の８つのレイヤは、連続するレイヤの４つの互いに素であるペアにグループ化される。連続するレイヤの２つのペアは、それらが共通のレイヤを共有しない場合に“互いに素である（ｄｉｓｊｏｉｎｔ）”とみなれる。例えば、レイヤ１とレイヤ２のペアと、レイヤ３とレイヤ４のペアとは、共通のレイヤを共有していない。レイヤ１とレイヤ２との交換は、レイヤ３〜レイヤ８に影響を与えない。同様に、レイヤ３とレイヤ４との交換は、レイヤ１〜レイヤ２とレイヤ５〜レイヤ８とに影響を与えない。以下同様である。このため、連続するレイヤの４つの互いに素であるペアは、各ペア間に相互依存性がないため、同時に交換されてもよい。あるいは、他のタイプのグループ化によると、レイヤ２とレイヤ３とがペアとされ、レイヤ４とレイヤ５とがペアとされ、レイヤ６とレイヤ７とがペアとされてもよい。このタイプのグループ化によると、ＢＤＤ９００の８つのレイヤが、連続するレイヤの３つの互いに素であるペアにグループ化される。再び、レイヤ２とレイヤ３との交換は、レイヤ１とレイヤ４〜レイヤ８に影響を与えない。レイヤ４とレイヤ５との交換は、レイヤ１〜レイヤ３とレイヤ６〜レイヤ８とに影響を与えない。以下同様である。このため、連続するレイヤの３つの互いに素なペアは、各ペアの間に相互依存性がないため、同時に交換されてもよい。
【００３４】
一般化のため、ｎ個の変数に対応するｎ個のレイヤを有する任意のＢＤＤが与えられると（ただし、ｎは３以上の任意の偶数又は奇数）、ｎ個のレイヤを連続するレイヤの互いに素なペアにグループ化するのに少なくとも２つの方法がある。例えば、ｎ＝４である場合、４つのレイヤは｛１，２｝及び｛３，４｝としてグループ化されてもよい。他方、ｎ＝５である場合、５つのレイヤをグループ化する１つの方法は、｛１，２｝及び｛３，４｝であり、他の方法は、｛１，２｝及び｛４，５｝であり、第３の方法は、｛２，３｝及び｛４，５｝である。第１タイプのグループ化によると、各ペアは、奇数レイヤｊｏｄｄと偶数レイヤｊｅｖｅｎとを含む（ただし、１≦ｊｏｄｄ≦ｎ−１に対して、ｊｅｖｅｎ＝ｊｏｄｄ＋１）。このようにグループ化された全てのペアは、“奇数グループ化ペア”又は“第１グループ化ペア”と呼ばれ、同時に交換されてもよい。第２タイプのグループ化によると、各ペアは、偶数レイヤｊｅｖｅｎと奇数レイヤｊｏｄｄとを含む（ただし、２≦ｊｅｖｅｎ≦ｎ−１に対して、ｊｏｄｄ＝ｊｅｖｅｎ＋１）。このようにグループ化された全てのペアは、“偶数グループ化ペア”又は“第２グループ化ペア”と呼ばれ、同様に同時に交換されてもよい。ある実施例では、第１タイプのグループ化に従って取得された全ての第１グループ化ペアと、第２タイプのグループ化に従って取得された全ての第２グループ化ペアとが、繰り返しかつ交互に交換されてもよい。
【００３５】
例えば、図９において、第１の繰り返し中（ｔ＝１）、全ての奇数グループ化ペア（すなわち、第１グループ化ペア）がパラレルに（すなわち、同時に）交換される。第２の繰り返し中（ｔ＝２）、全ての偶数グループ化ペア（すなわち、第２グループ化ペア）がパラレルに交換される。第３の繰り返し中（ｔ＝３）、全ての奇数グループ化ペアが再びパラレルに交換される。当該処理が、所望の結果が取得されるまで、全ての奇数グループ化ペアと全ての偶数グループ化ペアとの交換が交互に続けられる。
【００３６】
一般化のため、ある実施例では、上記処理は、奇数の各繰り返し（繰り返し１，３，５，．．．など）中に全ての奇数グループ化ペアを同時に交換し、偶数の各繰り返し（繰り返し２，４，６，．．．など）中に全ての偶数グループ化ペアを同時に交換する。あるいは、他の実施例では、上記処理は、奇数の各繰り返し中に全ての偶数グループ化ペアを同時に交換し、偶数の各繰り返し中に全ての奇数グループ化ペアを同時に交換してもよい。
【００３７】
第２のコンセプトは、“置換の非明示的列挙（ｉｍｐｌｉｃｉｔ  ｅｎｕｍｅｒａｔｉｏｎ  ｏｆ  ｐｅｒｍｕｔａｔｉｏｎｓ）”と呼ばれてもよい。６つのレイヤを有するＢＤＤ１０００を示す図１０を検討する。これら６つのレイヤは、レイヤ１とレイヤ２、レイヤ３とレイヤ４及びレイヤ５とレイヤ６の連続するレイヤの３つの互いに素なペアにグループ化されると仮定する。これらの連続するレイヤの互いに素なペアは、順次又は同時に交換されてもよい。３回のレイヤスワップの前に、ＢＤＤ１０００の変数順序が｛１，２，３，４，５，６｝である場合（すなわち、変数１がレイヤ１にあり、変数２がレイヤ２にあり、変数３がレイヤ３にあるなど）、３回のレイヤスワップ後には、ＢＤＤ１０００の変数順序は｛２，１，４，３，６，５｝になる（すなわち、変数２がレイヤ１にあり、変数１がレイヤ２にあり、変数４がレイヤ３にあり、変数３がレイヤ４にあり、変数６がレイヤ５にあり、変数５がレイヤ６にある）。
【００３８】
ある実施例では、以下の観察ができる。すなわち、各レイヤスワップの実行はＢＤＤ１０００の残りの構成とサイズとに影響を与えないため、これらのスワップの何れか一部を実行することにより取得される置換のサイズは、ＢＤＤ全体に対して対応する完全な変数順序を明示的に生成することなく計算できる。例えば、ＢＤＤ１０００によると、３回のレイヤスワップ前に、変数１がレイヤ１にあり、変数２がレイヤ２にあり、変数３がレイヤ３にあり、変数４がレイヤ４にあり、変数５がレイヤ５にあり、変数６がレイヤ６にある６つのレイヤのサイズが個別に決定される。３回のスワップの後、変数２はレイヤ１にあり、変数１がレイヤ２にあり、変数４がレイヤ３にあり、変数３がレイヤ４にあり、変数６がレイヤ５にあり、変数５がレイヤ６にある６つのレイヤのサイズが再び決定される。従って、連続するレイヤの互いに素な各ペアに対して、２つのレイヤが交換される前のサイズと、２つのレイヤが交換された後のサイズとの２つのサイズが存在する。ＢＤＤ１０００の６つのレイヤに対して、連続するレイヤの３つの互いに素なペアが存在する。
【００３９】
より詳細には、レイヤ１とレイヤ２に対して、レイヤ１とレイヤ２とが交換される前に、変数１及び２を有するレイヤ１及び２のサイズが決定されてもよい。レイヤ１とレイヤ２とが交換された後、変数２及び１を有するレイヤ１及び２のサイズが決定されてもよい。同様に、レイヤ３とレイヤ４に対して、レイヤ３とレイヤ４とが交換される前に、変数３及び４を有するレイヤ３及び４のサイズが決定されてもよい。レイヤ３とレイヤ４とが交換された後、変数４及び３を有するレイヤ３及び４のサイズが決定されてもよい。また、レイヤ５とレイヤ６に対して、レイヤ５とレイヤ６とが交換される前に、変数５及び６を有するレイヤ５及び６のサイズが決定されてもよい。レイヤ５とレイヤ６とが交換された後、変数６及び５を有するレイヤ５及び６のサイズが決定されてもよい。
【００４０】
連続するレイヤの３つの互いに素なペアのサイズの異なる組み合わせは、対応する変数順序を明示的に生成することなく、ＢＤＤ１０００の異なる変数順序のサイズをもたらす。例えば、変数順序｛１，２，４，３，５，６｝（すなわち、変数１がレイヤ１にあり、変数２がレイヤ２にあり、変数４がレイヤ３にあり、変数３がレイヤ４にあり、変数５がレイヤ５にあり、変数６がレイヤ６にある）のサイズを非明示的に決定するため、ある実施例は、（１）変数１及び２をそれぞれ有するレイヤ１及び２のサイズ（レイヤ１とレイヤ２とを交換する前に取得された）、（２）変数４及び３をそれぞれ有するレイヤ３及び４のサイズ（レイヤ３とレイヤ４とを交換した後に取得された）、及び（３）変数５及び６をそれぞれ有するレイヤ５及び６のサイズ（レイヤ５とレイヤ６とを交換する前に取得された）の和を計算してもよい。３つのレイヤスワップの前後の何れにおいて３つ全てのサイズが決定される。他の例として、変数順序｛２，１，３，４，６，５｝のサイズを非明示的に決定するため、ある実施例は、（１）変数２及び１をそれぞれ有するレイヤ１及び２のサイズ（レイヤ１とレイヤ２とを交換した後に取得される）、（２）変数３及び４をそれぞれ有するレイヤ３及び４のサイズ（レイヤ３とレイヤ４とを交換した後に取得される）、及び（３）変数６及び５をそれぞれ有するレイヤ５及び６のサイズ（レイヤ５とレイヤ６とを交換した後に取得される）の和を計算してもよい。
【００４１】
ＢＤＤ１００のケースでは、レイヤスワップの前後に取得された連続するレイヤの３つの互いに素なペアのサイズを合成することによって、７つのさらなる変数順序のサイズが、連続するレイヤの３つの互いに素なペアに関する３つのレイヤスワップにより計算されてもよい。ＢＤＤ１０００は初期的には変数順序｛１，２，３，４，５，６｝を有するため、この変数順序のサイズは既知であり、計算される必要がないことに留意されたい。図１０は、３つのスワップの前後に取得される連続するレイヤの３つの互いに素なペアの異なるサイズを合成することによってサイズが決定されるＢＤＤ１０００の８つ全ての異なる変数順序を示す。６つの変数（すなわち、連続するレイヤの３つの互いに素なペア）に対して、８つの組み合わせが存在する（ここで、変数順序の１つ｛１，２，３，４，５，６｝がレイヤスワップ前の初期的な順序である）。一般化するため、ｎ個の変数に対応するｎ個のレイヤを有する任意のＢＤＤが与えられると、ｋ個のレイヤスワップがパラレルに実行される場合（すなわち、連続するレイヤのｋ個の互いに素なペアが存在する）、（２ｋ−１）個の変数順序のサイズが非明示的に計算可能である。ここで、レイヤスワップ前のＢＤＤの初期的な変数順序のサイズは非明示的な計算を要することなく直接的に取得できるため、“−１”が存在することに留意されたい。しかしながら、一般には、連続するレイヤのｋ個の互いに素なペアが与えられると、２ｋ個の異なる変数順序のサイズは、連続するレイヤのｋ個の互いに素なペアを交換することによって決定されてもよい。
【００４２】
各種実施例において説明されるＢＤＤのパラレル変数リオーダアルゴリズムは、パラレル化の最大化と置換の非明示的列挙とのコンセプトに依拠する。ＢＤＤのための既存の変数リオーダアルゴリズムは、実行されるスワップの大部分が相互依存しているため、パラレル化できない。従って、ある実施例は、交換が不要な連続するレイヤのペアの間の相互依存が最小限になるように（例えば、連続するレイヤの互いに素なペアを形成するなどによって）、レイヤスワップ処理を構成しようとし、これにより、連続するレイヤの複数のペアをパラレルに交換する可能性を増加させることができる。
［パラレル置換アルゴリズム］
ある実施例では、スワップネットワークの深さが最小となるスワップのスケジュールが所望される。ｎ個の変数に対応するｎ個のレイヤを有する所与のＢＤＤが初期的に第１の変数順序を有すると仮定すると、異なる第２の変数順序に従ってＢＤＤのｎ個の変数をリオーダすることが所望される。第２の変数順序は、何れか適切な手段によって取得されてもよい（例えば、ある人により指定されたり、設計仕様要求やアプリケーション基準に従って決定されるなど）。ある実施例では、所与の置換（すなわち、変数順序）を現在の変数置換に適用することが、変数の識別子に課されるトータルの順序が所望される最終的な置換によって定義される場合、ソーティングの問題と等価になる。
【００４３】
ある実施例では、ＢＤＤの第１の変数順序（すなわち、ＢＤＤが現在有する変数順序）が恒等置換である、すなわち、各変数ｉ（１≦ｉ≦ｎ）がレイヤｉにあると仮定する。所望される第２の変数順序は、π（ｉ）として規定され、すなわち、各変数ｉ（１≦ｉ≦ｎ）がレイヤπ（ｉ）にある。ＢＤＤが最終的に第２の変数順序を有するように、ＢＤＤのｎ個の変数をリオーダすることが目標である。図１１Ａは、第１の変数順序を初期的に有するＢＤＤのｎ個の変数を第２の変数順序に従ってリオーダするパラレル置換アルゴリズムの一例を示す。図１１Ｂは、６つの変数に対応する６つのレイヤを有するＢＤＤ１１００に適用されるパラレル置換アルゴリズムを示す。図１１Ａに示されるステップは、一例としてＢＤＤ１１００を用いて説明される。
【００４４】
図９に関して上述されたように、ｎ個の変数に対応するｎ個のレイヤを有する任意のＢＤＤが与えられると、ｎ個のレイヤを連続するレイヤの互いに素なペアにグループ化するための２つの方法がある。第１には、ｎ個のレイヤが、各ペアが奇数レイヤに続いて偶数レイヤを含む奇数グループ化ペア（第１グループ化ペアとも呼ばれる）にグループ化されてもよい。第２に、ｎ個のレイヤが、各ペアが偶数レイヤに続いて奇数レイヤを含む偶数グループ化ペア（第２グループ化ペアとも呼ばれる）にグループ化されてもよい。全ての奇数グループ化ペアは、それらが互いに素であるため（すなわち、共通のレイヤを共有しない）、同時に交換されてもよい。同様に、全ての偶数グループ化ペアは、それらが互いに素であるため、同時に交換されてもよい。パラレル置換アルゴリズムは、この性質を利用する。
【００４５】
ある実施例では、ＢＤＤのｎ個のレイヤは、奇数グループ化ペアと偶数グループ化ペアに繰り返しかつ交互にグループ化され、現在の繰り返し中の２つのレイヤの現在の順序が第２の変数順序により指定される順序と異なる場合、各レイヤペアは交換される。より詳細には、一例として図１１Ｂの６つの変数に対応する６つのレイヤを有するＢＤＤ１１００を利用する。ＢＤＤ１１００は、初期的には恒等置換｛１，２，３，４，５，６｝（すなわち、各変数ｉ（１≦ｉ≦６）がレイヤｉにある）である第１の変数順序を有する。所望される第２の変数順序は｛６，３，４，５，１，２｝（すなわち、変数６がレイヤ１にあり、変数３がレイヤ２にあり、変数４がレイヤ３にあると仮定する。これは、π（６）＜π（３）＜π（４）＜π（５）＜π（１）＜π（２）を意味する。
【００４６】
ある実施例では、第１の繰り返し中（すなわち、ｔ＝１）、ＢＤＤ１１００の６つのレイヤは、図１１Ａのステップ１１０１に示されるように、レイヤ１とレイヤ２、レイヤ３とレイヤ４及びレイヤ５とレイヤ６の３つの奇数グループ化ペアにグループ化される。これらは、ペア間で共通のレイヤを共有していないため、連続するレイヤの互いに素なペアである。従って、３つの奇数グループ化ペアは、図１１Ａのステップ１１０２に示されるように、同時に交換されてもよい。レイヤ１とレイヤ２に対して、変数１は現在レイヤ１にあり、変数２は現在レイヤ２にある。従って、レイヤ１及び２にある２つの変数の現在の順序は｛１，２｝であり、変数１及び２について第２の変数順序によって指定される順序とすでに一致している（すなわち、変数２の前に変数１があり、π（１）＜π（２）を意味する）。従って、この繰り返し中にはレイヤ１とレイヤ２とを交換する必要はない。同様に、レイヤ３とレイヤ４に対して、変数３は現在レイヤ３にあり、変数４は現在レイヤ４にある。従って、レイヤ３及び４にある２つの変数の現在の順序は｛３，４｝であり、変数３及び４について第２の変数順序により指定された順序にすでに一致している）すなわち、π（３）＜π（４））。従って、この繰り返し中にレイヤ３とレイヤ４とを交換する必要はない。他方、レイヤ５とレイヤ６に対して、変数５は現在レイヤ５にあり、変数６は現在レイヤ６にある。レイヤ５及び６における２つの変数の現在の順序は｛５，６｝であり、変数５及び６について第２の変数順序により指定される順序と異なっている（すなわち、π（５）＞π（６））。従って、レイヤ５とレイヤ６とはこの繰り返し中に交換され、その後、変数６はレイヤ５にあり、変数５はレイヤ６にある。第１の繰り返し中に１つのみのレイヤスワップしか必要でなかったため、パラレル化の必要はない。しかしながら、複数のレイヤスワップが繰り返し中に必要とされる場合、それらはパラレルに実行されてもよい。レイヤのグループ化は、結果として得られる連続するレイヤのペアが互いに素であることを保障するためである。
【００４７】
各繰り返し後、当該処理は、図１１Ａのステップ１１０３に示されるように、第２の変数順序が実現されたか決定する。実現された場合、当該処理は成功し終了される。そうでない場合、当該処理は次の繰り返しに続く。ＢＤＤ１１００に対して、第１の繰り返し後、変数順序は｛１，２，３，４，６，５｝になる。従って、所望される第２の変数順序は実現されず、もう１回繰り返しが必要とされる。
【００４８】
ある実施例では、第２の繰り返し中（すなわち、ｔ＝２）、ＢＤＤ１１００の６つのレイヤが、図１１Ａのステップ１１０４に示されるように、レイヤ２とレイヤ３、及びレイヤ４とレイヤ５の２つの偶数グループ化ペアにグループ化される。再び、これらは、ペア間で共通のレイヤを共有していないため、連続するレイヤの互いに素なペアである。従って、２つの偶数グループ化ペアは、図１１Ａのステップ１１０５に示されるように、同時に交換されてもよい。レイヤ２とレイヤ３について、変数２が現在レイヤ２にあり、変数３が現在レイヤ３にある。レイヤ２及び３の２つの変数の現在の順序は、｛２，３｝であり、変数２及び３について第２の変数順序により指定されている順序（すなわち、π（２）＞π（３））と異なっている。このため、レイヤ２とレイヤ３とは当該繰り返し中に交換され、その後に、変数３はレイヤ２にあり、変数２はレイヤ３にある。同様に、レイヤ４とレイヤ５について、変数４が現在レイヤ４にあり、変数６が現在レイヤ５にある。レイヤ４及び５の２つの変数の現在の順序は、｛４，６｝であり、変数４及び６について第２の変数順序により指定された順序（すなわち、π（４）＞π（６））と異なっている。このため、レイヤ４とレイヤ５とは当該繰り返し中に交換され、その後に、変数６はレイヤ４にあり、変数４はレイヤ５にある。２つのレイヤスワップが当該繰り返し中に必要とされるため、ある実施例では、それらはパラレルに実行されてもよい。
【００４９】
再び各繰り返し後、当該処理は、図１１Ａのステップ１１０６に示されるように、第２の変数順序が実現されたか判断する。実現された場合、当該処理は成功し終了する。そうでない場合、当該処理は次の繰り返しを続ける。ＢＤＤ１１００に対して、第２の繰り返し後、変数順序は｛１，３，２，６，４，５｝になる。従って、所望される第２の変数順序は実現されず、もう１回繰り返しが必要とされる。第３及び第５の繰り返し中に実行されるステップは、第１の繰り返しのものと同様であり、第４及び第６の繰り返し中に実行されるステップは、第２の繰り返しのものと同様である。
【００５０】
図１１Ｂに示されるように、ＢＤＤ１１００に対して、第２の変数順序が実現されるまで６つの変数をリオーダするのに合計で６回の繰り返しを要する。奇数の各繰り返し中（すなわち、繰り返し１，３，５）、ＢＤＤ１１００の６つのレイヤは、互いに素である連続するレイヤの奇数グループ化ペアにグループ化される。偶数の各繰り返し中（すなわち、繰り返し２，４，６）、６つのレイヤは、互いに素である連続するレイヤの偶数グループ化ペアにグループ化される。第３の繰り返し中（すなわち、ｔ＝３）、レイヤ１とレイヤ２、及びレイヤ３とレイヤ４が同時に交換される。第４の繰り返し中（すなわち、ｔ＝４）、レイヤ２とレイヤ３、及びレイヤ４とレイヤ５は同時に交換される。第５の繰り返し中（すなわち、ｔ＝５）、レイヤ１とレイヤ２、レイヤ３とレイヤ４、及びレイヤ５とレイヤ６が同時に交換される。第６の繰り返し中（すなわち、ｔ＝６）、レイヤ４とレイヤ５とが交換される。
【００５１】
しかしながら、ＢＤＤ１１００は、パラレル置換アルゴリズムの一例である。あるいは、奇数の各繰り返し中に、６つのレイヤが互いに素である連続するレイヤの偶数グループ化ペアにグループ化され、偶数の各繰り返し中に、６つのレイヤが互いに素である連続するレイヤの奇数グループ化ペアにグループ化されてもよい。レイヤのグループ化が連続する繰り返しにおいて交互に実行される限り、アルゴリズムはそれの目標を実現することができる。各繰り返し中に、レイヤのペアは、レイヤに現在ある変数の順序が所望される第２の変数順序により指定される対応する変数の順序と異なっているか、又は一致しているかに依存して、交換されてもよい。
【００５２】
一般化のため、ｎ個の変数に対応するｎ個のレイヤを有するＢＤＤが与えられ、ＢＤＤは初期的には、各変数ｉ（１≦ｉ≦ｎ）がレイヤｉにある第１の変数順序を有し、各変数ｉ（１≦ｉ≦ｎ）がレイヤπ（ｉ）にある、π（ｉ）として規定されるＢＤＤの第２の変数順序が与えられると、第２の変数順序に従ってＢＤＤのｎ個の変数をリオーダするため、ある実施例では、パラレル置換アルゴリズムは繰り返し処理を実行する。奇数の各繰り返し中、ｎ個のレイヤは、第１のグループ化スキームに従って第１のタイプの連続するレイヤの互いに素なペアにグループ化される。偶数の各繰り返し中、ｎ個のレイヤは、第２のグループ化スキームに従って第２のタイプの連続するレイヤの互いに素なペアにグループ化される。各繰り返し中、２つのレイヤに現在ある２つの変数の順序が第２の変数順序により指定される２つの変数の順序と異なっている場合に限って、連続するレイヤのペアが交換される。すなわち、２つの連続するレイヤｊ１，ｊ２について、ある繰り返し中に、変数ｉ１が現在レイヤｊ１にあり、変数ｉ２が現在レイヤｊ２にあると仮定する。このとき、π（ｉ１）＞π（ｉ２）である場合に限って、レイヤｊ１とレイヤｊ２とが当該繰り返し中に交換される。ある実施例では、各繰り返し中に実行される全てのレイヤスワップは、パラレルに（すなわち、同時に）実行される。
【００５３】
ある実施例では、ｎ個の変数に対応するｎ個のレイヤを有する任意のＢＤＤに対して、ＢＤＤが初期的には第１の変数順序を有するとき、パラレル置換アルゴリズムを利用して、第２の変数順序を実現するためにＢＤＤのｎ個の変数をリオーダするため、高々ｎ回のレイヤスワップの繰り返し（各繰り返しはまた、“レベル”と呼ばれてもよい）を要する。さらに、ｎ回の繰り返し中に、高々
【００５４】
【数２】
0005987289.tif 000003
（すなわち、ｎ（ｎ−１）／２に等しい“ｎ個から２つを選ぶ”）回のレイヤスワップを要する。パラレル置換アルゴリズムは、ｎ回未満の繰り返しにおいて何れかの置換を実現可能な他のレイヤ交換スケジュールがないとき、パラレルに最適である。比較において、既存の変数リオーダアルゴリズムはまた、高々
【００５５】
【数３】
0005987289.tif 000004
回のレイヤスワップを必要とするが、
【００５６】
【数４】
0005987289.tif 000005
回の繰り返しを必要とするかもしれない。
【００５７】
図１１Ａに関して上述されたパラレル置換アルゴリズムは、ＢＤＤと特にＲＯＢＤＤとの異なるパーティション又は分割の間の置換を変換するのに利用されてもよい。実際のアプリケーションでは、ＢＤＤ又は通常はＲＯＢＤＤはしばしば、数千又は数百万のノードを有する。従って、このような大規模なＢＤＤ又はＲＯＢＤＤを格納することは、大きな記憶スペースを必要とする。この問題を解決するため、大規模なＢＤＤ又はＲＯＢＤＤはしばしば２以上のサブＢＤＤに分割され、各サブＢＤＤが実質的にＢＤＤとなる。オリジナルのＢＤＤは、サブＢＤＤの論理ＯＲをとることによって取得されてもよい。記憶スペースの必要をさらに減少させるため、各サブＢＤＤの変数は、当該サブＢＤＤの最適な又は実質的に最適な変数順序に従ってリオーダされてもよい。そのようにして、サブＢＤＤが格納される。しかしながら、各サブＢＤＤは実質的にＢＤＤ自体であるため、あるサブＢＤＤの最適な又は実質的に最適な変数順序は、他のサブＢＤＤの最適な又は実質的に最適な変数順序と異なる可能性がある。
【００５８】
ＢＤＤに関して処理が実行される必要があるとき、サブＢＤＤは、オリジナルのＢＤＤを構成するため合成されてもよい。あるいは、個々のサブＢＤＤに関してこれらの処理が実行されてもよい。何れのケースでも、これらの処理を実行するとき、関係する全てのサブＢＤＤは同じ変数順序を有する必要がある。それぞれが異なる変数順序を有する合計でｍ個（ｍ≧２）のサブＢＤＤが存在する場合、（ｍ−１）個のサブＢＤＤの変数がリオーダされる必要がある。
【００５９】
ある実施例では、各ＢＤＤがｎ個の変数に対応するｎ個のレイヤを有する第１ＢＤＤと第２ＢＤＤとの２つのＢＤＤがあると仮定する。第１ＢＤＤは、現在第１の変数順序を有する。第２ＢＤＤは、第１ＢＤＤの第１の変数順序と異なる第２の変数順序を現在有する。さらに、第１ＢＤＤと第２ＢＤＤとが第３ＢＤＤの２つのパーティション（すなわち、２つのサブＢＤＤ）であると仮定する（すなわち、第１ＢＤＤと第２ＢＤＤとが一緒になって第３ＢＤＤを構成する）。必要に応じて、第１ＢＤＤのｎ個の変数が、図１１Ａに関して上述されたパラレル置換アルゴリズムを用いて、第２ＢＤＤの第２の変数順序に従ってリオーダされてもよい。あるいは、第２ＢＤＤのｎ個の変数が、パラレル置換アルゴリズムを用いて第１ＢＤＤの第１の変数順序に従ってリオーダされてもよい。何れのケースでも、変数のリオーダ後、第１ＢＤＤと第２ＢＤＤは共に同じ変数順序を有する。その後、それらは第３ＢＤＤを構成するため合成されるか、又は第１ＢＤＤと第２ＢＤＤに関して個別に処理が実行されてもよい。当該処理は、ＢＤＤが３以上のサブＢＤＤに分割される場合も同様に適用されてもよい。１つのサブＢＤＤが、所望される変数順序を有するサブＢＤＤとして選択される。その他のサブＢＤＤのそれぞれの変数が、パラレル置換アルゴリズムを用いて選択されたサブ」ＢＤＤの変数順序に従ってリオーダされる。
［４つの変数を有するＢＤＤの最適なレイヤ交換スケジュール］
図９に示されるように、ｎ個の変数に対応するｎ個のレイヤを有する任意のＢＤＤが与えられると、高々ｎ／２回のレイヤスワップが各繰り返し中にパラレルに実行可能であるため、実現可能な最大パラレル化はｎ／２である。従って、各繰り返し中に（すなわち、各レベルにおいて）ｎ／２回のレイヤスワップを配置することが所望される。これは置換アルゴリズムのケースに対して可能であるが、同時に、当該処理がイグザクト又はヒューリスティックアルゴリズムのセマティックを尊重する必要があるときは、常に可能であるとは限らない。
【００６０】
イグザクトリオーダのケースでは、ある実施例では、最適な変数順序を決定するために可能性のある全ての変数の置換を実行するために、（ｎ！−１）回のレイヤスワップを実行するのに（ｎ！−１）回未満の繰り返しを必要とする交換スケジュールを決定することが望ましい（例えば、単純変更アルゴリズムのケースなど）。ある実施例は、上述された非明示的置換のコンセプトに基づき交換スケジュールを決定してもよい。
【００６１】
ある実施例は、４個の変数に対応する４つのレイヤを有するＢＤＤを検討し、当該ＢＤＤの最適なレイヤ交換スケジュールを決定する。ここで、２又は３個の変数に対応する２又は３つのレイヤを有するＢＤＤについては、図６などに示されるように、２つのスワップがパラレルには実行できない。
【００６２】
図１２Ａ〜１２Ｂは、４つの変数に対応する４つのレイヤを有するＢＤＤ１２００の一例となる最適なレイヤ交換スケジュールを示す。１３回の繰り返し中に合計で１９回のレイヤスワップが実行される。同じ繰り返しに属する全てのレイヤスワップはパラレルに実行可能であることに留意されたい。従って、第１の繰り返し中（すなわち、第１レベルにおいて）、レイヤ１とレイヤ２及びレイヤ３とレイヤ４が同時に交換される。第２の繰り返し中、レイヤ２とレイヤ３とが交換される。第３の繰り返し中、レイヤ１とレイヤ２及びレイヤ３とレイヤ４が同時に交換される。以下同様に実行される。例えば、ＢＤＤ１２００の初期的な変数順序は｛１，２，３，４｝であると仮定する。各繰り返しの前後の変数順序は、図１２ＢのＢＤＤ１２００により示される。レイヤスワップの１３回の繰り返しの経過後、ＢＤＤ１２００の最終的な変数順序は｛２，３，４，１｝である。１３回の繰り返し中、４つの変数が４つのレイヤ間で移動される。
【００６３】
４つの変数に対して、合計で２４（すなわち、４！）個の可能な変数順序がある。最適な変数順序を決定するため、２４個の可能な変数順序のサイズが決定される必要があり、これにより、最小サイズを有する変数順序が選択される。しかしながら、非明示的列挙のコンセプトに基づき、２４個の可能な変数順序の２４個のサイズを決定するため、２４個の可能な変数順序が明示的に生成される必要はない。
【００６４】
一例としてＢＤＤ１２００を用いて、ＢＤＤ１２００の初期的な変数順序は｛１，２，３，４｝であると仮定する。変数１及び２をそれぞれ有するレイヤ１及び２のサイズｓ１，２１，２が決定され、変数３及び４をそれぞれ有するレイヤ３及び４のサイズｓ３，４３，４が決定されてもよい。第１の繰り返し中（すなわち、ｔ＝１）、レイヤ１とレイヤ２及びレイヤ３とレイヤ４がパラレルに交換される。第１の繰り返し後、ＢＤＤ１２００の変数順序は｛２，１，４，３｝となる。変数２及び１をそれぞれ有するレイヤ１及び２のサイズｓ２，１１，２が決定され、変数４及び３をそれぞれ有するレイヤ３及び４のサイズｓ４，３３，４が決定されてもよい。第１の繰り返し後、４つの変数順序のサイズが計算される。すなわち、（１）変数順序｛１，２，３，４｝のサイズは、ｓ１，２１，２とｓ３，４３，４の和であり（｛１，２，３，４｝はＢＤＤ１２００の初期的な変数順序であるため、当該変数順序のサイズは、実際にはレイヤスワップを要することなく知られているＢＤＤ１２００の初期的なサイズであることに留意されたい）、（２）変数順序｛２，１，３，４｝のサイズは、ｓ２，１１，２とｓ３，４３，４の和であり、（３）変数順序｛１，２，４，３｝のサイズは、ｓ１，２１，２とｓ４，３３，４の和であり、（４）変数順序｛２，１，４，３｝のサイズは、ｓ２，１１，２とｓ４，３３，４の和である。しかしながら、実際には、第１の繰り返しに関して取得された４つの変数順序の４つのサイズ全てを明示的に計算する必要はないかもしれない。ある実施例は、レイヤ１とレイヤ２についてサイズｓ１，２１，２とｓ２，１１，２との小さい方を選択し、レイヤ３とレイヤ４についてサイズｓ３，４３，４とｓ４，３３，４との小さい方を選択し、第１の繰り返しに関して取得された４つの変数順序の最小のサイズをもたらす変数順序を決定し、以降の繰り返し中の比較のためにそれまでの最小サイズをもたらす変数順序を記録するようにしてもよい。
【００６５】
第２の繰り返し中（すなわち、ｔ＝２）、レイヤ２とレイヤ３とが交換される。第２の繰り返し後、変数順序は｛２，４，１，３｝となる。第２の繰り返しの目的は、第１の繰り返しに関して説明された処理と同様に、レイヤ１とレイヤ２及びレイヤ３とレイヤ４が同時に交換され、より多くの変数順序のサイズが非明示的置換のコンセプトに基づき計算される他の繰り返しについて４つの変数を配置することである。
【００６６】
第３の繰り返し前、変数２及び４をそれぞれ有するレイヤ１及び２のサイズｓ２，４１，２が決定され、変数１及び３をそれぞれ有するレイヤ３及び４のサイズｓ１，３３，４が決定されてもよい。第３の繰り返し中（すなわち、ｔ＝３）、レイヤ１とレイヤ２及びレイヤ３とレイヤ４がパラレルに交換される。第３の繰り返し後、ＢＤＤ１２００の変数順序は｛４，２，３，１｝である。変数４及び２をそれぞれ有するレイヤ１及び２のサイズｓ４，２１，２が決定され、変数３及び１をそれぞれ有するレイヤ３及び４のサイズｓ３，１３，４が決定されてもよい。第３の繰り返し後、他の４つの変数順序のサイズが計算される。すなわち、（１）変数順序｛２，４，１，３｝のサイズはｓ２，４１，２とｓ１，３３，４との和であり、（２）変数順序｛２，４，３，１｝のサイズはｓ２，４１，２とｓ３，１３，４との和であり、（３）変数順序｛４，２，１，３｝のサイズはｓ４，２１，２とｓ１，３３，４との和であり、（４）変数順序｛４，２，３，１｝のサイズはｓ４，２１，２とｓ３，１３，４との和である。再び実際には、第３の繰り返しに関して取得された４つの変数順序の４つのサイズの全てを明示的に計算する必要はないかもしれない。ある実施例は、レイヤ１とレイヤ２についてサイズｓ２，４１，２とｓ４，２１，２との小さい方を選択し、レイヤ３とレイヤ４についてサイズｓ１，３３，４とｓ３，１３，４との小さい方を選択し、第３の繰り返しに関して取得されたこれら４つの変数順序に対して最小のサイズをもたらす変数順序を決定する。第３の繰り返しに関して取得された４つの変数順序の最小のサイズが、第１の繰り返しに関して取得された４つの変数順序の最小のサイズと比較される。ここまでに最小のサイズをもたらす第１又は第３の繰り返しからの変数順序が、以降の繰り返し中の比較のために記録されてもよい。
【００６７】
第４の繰り返し中（すなわち、ｔ＝４）、レイヤ２とレイヤ３とが交換される。第５の繰り返し中（すなわち、ｔ＝５）、レイヤ１とレイヤ２とが交換される。第５の繰り返し後、変数順序は｛４，３，２，１｝である。第４及び第５の繰り返しの目的は、第１及び第３の繰り返しに関して説明された処理と同様に、レイヤ１とレイヤ２及びレイヤ３とレイヤ４が同時に交換され、より多くの変数順序のサイズが非明示的置換のコンセプトに基づき計算される他の繰り返しのために４つの変数を配置することである。
【００６８】
ＢＤＤ１２００を検討すると、レイヤ１とレイヤ２及びレイヤ３とレイヤ４が同時に交換されるさらなる４つの繰り返しがある（すなわち、第６、第９、第１１及び第１３の繰り返し）。これらの繰り返しのそれぞれにおいて、第１及び第３の繰り返しと同様に、４つの一意的な変数順序のサイズが非明示的列挙のコンセプトに基づき計算されてもよい。ＢＤＤ１２００を検討すると、レイヤ１とレイヤ２及びレイヤ３とレイヤ４が同時に交換される合計で６つの繰り返し（すなわち、第１、第３、第６、第９、第１１及び第１３の繰り返し）が存在する。これら６つの繰り返しのそれぞれは、非明示的列挙のコンセプトに基づき４つの変数順序のサイズを提供する。従って、これら６つの繰り返しは、列挙又は置換繰り返し（ｅｎｕｍｅｒａｔｉｏｎ  ｏｒ  ｐｅｒｍｕｔａｔｉｏｎ  ｉｔｅｒａｔｉｏｎ）と呼ばれてもよい。これら６つの列挙繰り返しの間にあるその他の繰り返しは（すなわち、第２、第４、第５、第７、第８、第１０及び第１２の繰り返し）、以降の列挙繰り返しのため変数を再配置する。
【００６９】
ある実施例では、各列挙繰り返しの後、列挙繰り返しに関して取得された４つの変数順序のうち最小のサイズをもたらす変数順序が選択され、それのサイズ（すなわち、列挙繰り返しに関して取得された４つの変数順序のサイズの最小のもの）が、以前の繰り返し中に取得及び記録された変数順序の最小サイズと比較され、より小さなサイズをもたらす変数順序が、これまでの最小サイズをもたらした変数順序として記録される。従って、第１３の繰り返しの終了時には、第１３の繰り返しに関して取得された４つの変数順序の最小のサイズと、以前の繰り返し中に決定及び記録された最小サイズとの比較結果として選択された変数順序が、２４個の可能な全ての変数順序のうちで最小のサイズをもたらすため、ＢＤＤ１２００の最適な変数順序となる。
【００７０】
図１２Ａ〜１２Ｂに示される最適なレイヤ交換スケジュールと、４つの変数に対応する４つのレイヤを有するＢＤＤに適用される単純変更アルゴリズムなどとを比較する。４つの変数に対して可能な全ての変数の置換を取得するため、単純変更アルゴリズムは、パラレル化なしでは２３回の繰り返しに、又はフルにパラレル化すると１８回の繰り返しに含まれる２３回のレイヤスワップを必要とする一方、図１２Ａ〜１２Ｂに示されるレイヤ交換スケジュールは、１９回のレイヤスワップによる１３回の繰り返ししか必要としない。明らかに、図１２Ａ〜１２Ｂに示されるレイヤ交換スケジュールは、より少ない繰り返し及びレイヤスワップ回数しか必要とせず、これにより完了までの時間が短縮されるため、単純変更アルゴリズムより改良されている。
【００７１】
図１２Ａ〜１２Ｂは、４つの変数を有するＢＤＤに対して最適な変数順序を決定するため、１３回の繰り返し中に１９回のレイヤスワップが実行されることを要求する最適なレイヤ交換スケジュールの一例を示す。各自が１３回の繰り返し中に実行される１９回のレイヤスワップを用いて、４つの変数を有するＢＤＤに対して最適な変数順序を決定する約６０個の異なる最適なレイヤ交換スケジュールがある。図１２Ａ〜１２Ｂに示されるレイヤ交換スケジュールと同様に、最適なレイヤ交換スケジュールのそれぞれは、レイヤ１とレイヤ２及びレイヤ３とレイヤ４がパラレルに交換される６つの列挙繰り返しを含む。６つの列挙繰り返しのそれぞれについて、４つの変数順序のサイズが非明示的列挙のコンセプトに基づき計算されてもよい。列挙繰り返しの間にある繰り返しは、変数を再配置する。図１２Ｃは、最適なレイヤ交換スケジュールの他の例を示す。再び、最適なレイヤ交換スケジュールのそれぞれは、非明示的列挙のコンセプトに基づき、４つの変数を有するＢＤＤの最適な変数順序を決定するのに利用されてもよく、当該処理は、図１２Ａ〜１２Ｂに関して説明されたものと同様である。
［ＢＤＤ変数のペア単位グループ化］
ｎ＝２ｋ（すなわち、ｎは偶数）であると仮定する。ｎ個の数の集合｛１，．．．，ｎ｝を２つの要素からなるｋ個の順序付けされた集合のｎ！／２ｋ個のグループに分ける又は分離する方法は、ｎ！／２ｋ個存在する（すなわち、各集合には２つの要素が存在し、各グループにはｋ個の集合が存在する）。各グループは、ｎ個の変数のセパレーションと呼ばれてもよい。例えば、ｎ＝４のケースに対して（すなわち、ｋ＝２）、｛１，２，３，４｝を２つの要素からなる２つの順序付けされた集合の６つの一意的なグループに分離する方法は６通り存在する。以下において、４つの変数を２つの要素からなる２つの順序付けされた集合の６つの一意的なグループに分離される４つの変数が示される。
【００７２】
グループ１：｛１，２｝｛３，４｝
グループ２：｛１，３｝｛２，４｝
グループ３：｛１，４｝｛２，３｝
グループ４：｛２，３｝｛１，４｝
グループ５：｛２，４｝｛１，３｝
グループ６：｛３，４｝｛１，２｝
２つの要素からなるｋ個の集合の各グループ内において、各要素は１回しか出現しないことに留意されたい。例えば、上記６つのタイプのセパレーションの各セパレーション内では、第１の集合にある数が出現した場合、それは第２の集合には出現しない。その逆に、第２の集合にある数が出現した場合、それは第１の集合には出現しない。ある実施例では、このコンセプトをＢＤＤの変数に適用すると、要素は変数に等価である。２つの変数の各集合はＢＤＤの変数の２つを含み、各グループはｋ個の順序付けされた集合を含む。２つの変数の各集合内では、２つの変数の順序は無関係である（例えば、｛１，２｝は｛２，１｝と同じとみなされる）。しかしながら、２つの変数のｋ個の順序付けされた集合のそれぞれについては、順序は重要である。従って、［｛１，２｝｛３，４｝］は、［｛３，４｝｛１，２｝］と同じでないとみなされる。従って、セパレーション自体を順序づける方法は、ｎ！／２ｋ通り存在する。各グループは２つの変数のｋ個の順序付けされた集合から構成され、２つの変数は変数のペアと呼ばれるため、ＢＤＤ変数を分離する当該方法は、ＢＤＤ変数の“ペア単位グループ化”と呼ばれてもよい。
【００７３】
６つの変数を有するＢＤＤのケースでは（すなわち、ｎ＝６，ｋ＝３）、６つの変数を２つの変数からなる３つの順序付けされた集合に分離する方法は９０通り存在する（すなわち、９０個の一意的なグループ）。以下において、６つの変数のペア単位セパレーションのいくつかのグループの具体例が示される。
【００７４】
グループ１：｛１，２｝｛３，４｝｛５，６｝
グループ２：｛１，３｝｛２，４｝｛５，６｝
グループ３：｛２，４｝｛１，３｝｛５，６｝
グループ４：｛２，５｝｛１，６｝｛３，４｝
グループ５：｛３，４｝｛１，５｝｛２，６｝
グループ６：｛３，６｝｛１，２｝｛４，５｝
グループ７：｛４，５｝｛２，３｝｛１，６｝
グループ８：｛４，６｝｛１，５｝｛２，３｝
グループ９：｛５，６｝｛１，２｝｛３，４｝
ある実施例では、２つの変数からなるｋ個の順序付けされた集合の各グループがＢＤＤのある変数順序とみなされると仮定する。例えば、４つの変数のケースでは、グループ１は変数順序｛１，２，３，４｝を提供する（すなわち、変数１，２，３，４はそれぞれレイヤ１，２，３，４にある）。グループ２は変数順序｛１，３，２，４｝を提供する（すなわち、変数１，３，２，４はそれぞれレイヤ１，２，３，４にある）。グループ３は変数順序｛１，４，２，３｝を提供する（すなわち、変数１，４，２，３はそれぞれレイヤ１，２，３，４にある）。以下同様である。６つの変数のケースでは、グループ１は変数順序｛１，２，３，４，５，６｝を提供する（すなわち、変数１，２，３，４，５，６はそれぞれレイヤ１，２，３，４，５，６にある）グループ３は変数順序｛２，４，１，３，５，６｝を提供する（すなわち、変数２，４，１，３，５，６はそれぞれレイヤ１，２，３，４，５，６にある）。グループ５は変数順序｛３，４，１，５，２，６｝を提供する（すなわち、変数３，４，１，５，２，６はそれぞれレイヤ１，２，３，４，５，６にある）。以下同様である。
【００７５】
一例として４つの変数のケースを用いて、ＢＤＤが４つのレイヤを有する。レイヤ１とレイヤ２及びレイヤ３とレイヤ４が、連続するレイヤの２つの互いに素なペアを構成する。従って、図９に関して上述されたように、レイヤ１とレイヤ２及びレイヤ３とレイヤ４は同時に交換されてもよい。変数順序｛１，２，３，４｝を提供する、４つの変数のケースのグループ１［｛１，２｝｛３，４｝］を検討する。レイヤ１とレイヤ２及びレイヤ３とレイヤ４が交換された場合、レイヤスワップ後、変数順序は｛２，１，４，３｝になる。図１０に関して上述されたように、非明示的列挙のコンセプトを利用して、レイヤ１とレイヤ２のサイズがレイヤ１とレイヤ２の交換の前後に決定され、レイヤ３とレイヤ４のサイズがレイヤ３とレイヤ４の交換の前後に決定される場合、４つの変数（すなわち、｛１，２，３，４｝，｛２，１，３，４｝，｛１，２，４，３｝及び｛２，１，４，３｝）のサイズが、レイヤ１とレイヤ２のサイズとレイヤ３とレイヤ４のサイズとを組み合わせることによって計算されてもよい。同一の処理が、その他の５つのグループのそれぞれに適用されてもよい。例えば、４つの変数のケースのグループ２［｛１，３｝｛２，４｝］について、レイヤスワップ後、グループ２により提供される変数順序は｛１，３，２，４｝になる。レイヤスワップ後、変数順序は｛３，１，４，２｝になる。再び、レイヤ１とレイヤ２のサイズがレイヤ１とレイヤ２の交換前後に決定され、レイヤ３とレイヤ４のサイズがレイヤ３とレイヤ４の交換前後に決定される場合、４つの変数順序（すなわち、｛１，３，２，４｝，｛３，１，２，４｝，｛１，３，４，２｝及び｛３，１，４，２｝）のサイズが計算されてもよい。従って、一意的な各グループは、レイヤ１とレイヤ２及びレイヤ３とレイヤ４を交換することによって、４つの異なる変数順序のサイズを提供する。６つの一意的なグループによって、４つの変数を有するＢＤＤの２４個の全ての変数順序のサイズが計算される。最小のサイズを有する変数順序が、ＢＤＤの最適な変数順序となる。
【００７６】
ＢＤＤが６つのレイヤを有する６つの変数のケースを検討する。レイヤ１とレイヤ２、レイヤ３とレイヤ４及びレイヤ５とレイヤ６が、連続するレイヤの３つの互いに素なペアを構成する。従って、レイヤ１とレイヤ２、レイヤ３とレイヤ４及びレイヤ５とレイヤ６が同時に交換されてもよい。各グループは、異なる変数順序を提供する。例えば、６つの変数のケースのグループ７は、変数順序｛４，５，２，３，１，６｝を提供する。
【００７７】
レイヤ１とレイヤ２のサイズがレイヤ１とレイヤ２の交換前後に決定され、レイヤ３とレイヤ４のサイズがレイヤ３とレイヤ４の交換前後に決定され、レイヤ５とレイヤ６のサイズがレイヤ５とレイヤ６の交換前後に決定される場合、ＢＤＤの８つの変数順序のサイズは、レイヤ１とレイヤ２のサイズ、レイヤ３とレイヤ４のサイズ及びレイヤ５とレイヤ６のサイズを非明示的列挙コンセプトに基づき合成することによって計算されてもよい。実際、９０個の一意的なグループのそれぞれは、レイヤ１とレイヤ２、レイヤ３とレイヤ４及びレイヤ５とレイヤ６を交換することによって、８つの異なる変数順序のサイズを提供し、これにより、６つの変数を有するＢＤＤの２７０個の全ての可能な変数順序のサイズを提供することができる。再び、最小のサイズを有する変数順序が、ＢＤＤの最適な変数順序となる。
【００７８】
当該処理は、ｎ個の変数に対応するｎ個のレイヤを有するＢＤＤに同様に適用されてもよい（ただし、ｎは３以上の任意の奇数又は偶数である）。ｎが奇数であるとき、２つの変数の代わりに１つのみの変数を有する各グループの集合が存在することになる。例えば、ｎ＝５（すなわち、奇数）である場合、５つの変数のペア単位セパレーションのいくつかのグループは、以下のようになる。
【００７９】
グループ１：｛１，２｝｛３，４｝｛５｝
グループ２：｛１，３｝｛４，５｝｛２｝
グループ３：｛２，４｝｛１，５｝｛３｝
グループ４：｛１，５｝｛３，４｝｛２｝
各グループの変数の集合は順序付けされているため（すなわち、各グループの集合の順序は、変数リオーダアルゴリズムに関連する）、ある実施例では、ｎが奇数であり、１つのみの変数を有する１つの集合が各グループに存在するとき、各グループにおいてその他の２つの変数の集合に対するこの１つの変数の集合の相対的な位置は関連し、全てのグループにおいて同一であるべきである。例えば、１つの変数の集合は、全てのグループにおいて最後の集合となってもよいし、又は、全てのグループにおいて１番目の集合となってもよいし、全ての集合において２番目の集合などとなってもよい。すなわち、各グループにおいて、１つの変数の集合がその他の２つの変数の集合に関して実際に配置される位置（１番目、２番目、３番目又は最後など）は無関係であるが、１つの変数の集合は全てのグループにおいてその他の２つの変数の集合に関して同じ位置に配置される必要がある。
【００８０】
一般化のため、ある実施例では、ｎ個の変数が、
【００８１】
【数５】
0005987289.tif 000006
個の一意的なグループに分離されてもよく、各グループは、
【００８２】
【数６】
0005987289.tif 000007
個の順序付けされた集合から構成される。ｎが偶数であるとき、各グループの全ての集合はそれぞれ２つの変数を有している。ｎが奇数であるとき、各グループの１つの集合を除く全ての集合はそれぞれ２つの変数を有し、各グループの１つの集合は１つの変数を有する。各グループは、ＢＤＤの
【００８３】
【数７】
0005987289.tif 000008
個の異なる変数順序のサイズを、非明示的列挙コンセプトに基づき（すなわち、連続するレイヤの
【００８４】
【数８】
0005987289.tif 000009
個の互いに素なペアを同時に交換し、連続するレイヤの互いに素なペアのサイズを決定し、これらのサイズを合成することによって）提供してもよい。最後の全ての可能な変数順序において最小のサイズを有する変数順序が、ＢＤＤの最適な変数順序となる。
【００８５】
ある実施例では、２つの変数又は１つの変数の
【００８６】
【数９】
0005987289.tif 000010
個の順序付けされた集合の
【００８７】
【数１０】
0005987289.tif 000011
個の一意的なグループが構成されると、当該グループにより提供される
【００８８】
【数１１】
0005987289.tif 000012
個の異なる変数順序において最小のサイズをもたらす変数順序が決定される。この変数順序は、当該グループ内のローカルに最適な変数順序である。その後、
【００８９】
【数１２】
0005987289.tif 000013
個のグループからの
【００９０】
【数１３】
0005987289.tif 000014
個のローカルに最適な変数順序が、ＢＤＤの最小のサイズをもたらす変数順序を選択するため比較される。これが、ＢＤＤの最適な変数順序となる。図１３Ａは、ＢＤＤ変数のペア単位のグループの一例を示す。
【００９１】
ある実施例では、２つの変数又は１つの変数の
【００９２】
【数１４】
0005987289.tif 000015
個の順序付けされた集合の
【００９３】
【数１５】
0005987289.tif 000016
個の一意的なグループが構成されると、各グループに対して、当該グループ内のローカルに最適な変数順序を可能な限り効率的に決定することが望ましい。４つの変数を有するＢＤＤのケースでは、４つの変数を分離することから得られる６つのグループが以下のようになると仮定する。
【００９４】
グループ１：｛１，２｝｛３，４｝
グループ２：｛２，４｝｛１，３｝
グループ３：｛３，４｝｛２，１｝
グループ４：｛４，１｝｛２，３｝
グループ５：｛１，３｝｛４，２｝
グループ６：｛３，２｝｛１，４｝
２つの変数の各集合内では２つの変数の順序は関係がないため、［｛４，１｝｛２，３｝］及び［｛１，４｝｛２，３｝］は、２つの一意的なグループでなく同一のグループとみなされる。再び、２つの変数の２つの集合はそれぞれ、異なる変数順序を提供する。図１２Ａ〜１２Ｂに関して上述された最適なレイヤ交換スケジュールが、６つのグループから取得された異なる変数順序のサイズを効率的に決定するため利用されてもよい。４つの変数が上記の６つのグループに分離される場合、図１２Ａ〜１２Ｂに示される例や交換スケジュールは、非明示的列挙コンセプトに基づき２４個の可能な変数順序のサイズを決定するのに利用されてもよい。
【００９５】
図１３Ｂにおいて、４つの変数のレイヤ交換スケジュールは、図１２Ｂに示されたものと同じである。しかしながら、これら６つのグループに対応する変数順序のみがマークされる。図１３Ｂが示唆するように、上述されるような２つの変数の６つの一意的なグループ又は２つの順序付けされた集合は、レイヤ１とレイヤ２及びレイヤ３とレイヤ４の双方が交換される６回の繰り返し前の６つの変数順序に対応する。２つの変数又は１つの変数の
【００９６】
【数１６】
0005987289.tif 000017
個の順序付けされた集合の
【００９７】
【数１７】
0005987289.tif 000018
個のグループ（すなわち、セパレーション）に分離されるｎ個の変数のより一般的なケースでは、ある実施例において、一意的な各グループは、全てのレイヤスワップ（１，２），（３，４），．．．，（ｎ−１，ｎ）が実行されるイグザクトレイヤ交換スケジュールの繰り返しに対応する。これらの繰り返しの間において、ある実施例は、２つのグループに対応する２つの変数順序を結合するため、パラレル置換アルゴリズムを利用する。例えば、パラレル置換アルゴリズムに関して、２つのグループの１番目のグループから導出される変数順序は初期的な変数順序とみなされ、２つのグループの２番目のグループから導出される変数順序は、終了時の変数順序とみなされてもよい。ある実施例は、レイヤスワップの高々ｎ回の繰り返しが、２つのグループ間で実行される必要がある。
【００９８】
図１３Ｂは、上記の分離順序について、６つの分離段階とパラレル置換段階とを示す。各分離段階は、２つの変数のｎ／２個の順序付けされた集合のグループに対応する。６つの分離段階はＳ１〜Ｓ６と記される。これら分離段階の間の５つのパラレル置換段階はＰ１〜Ｐ５と記される。各分離段階は、１回のレイヤスワップの繰り返しに対応する。しかしながら、リンクする各パラレル置換段階は、４つの変数のケースでは１〜４回のレイヤスワップの繰り返しを含む。従って、最適化の目的は、パラレル置換段階により求められる繰り返しの回数を最小化する分離段階を検出することであり、これはパラレルに最適なレイヤ交換スケジュールに対応する。上述されるように、図１２Ａ〜１２Ｂに示されるレイヤ交換スケジュールは、４つの変数を有するＢＤＤについて最適なスケジュールである。従って、ある実施例では、このスケジュールは、パラレル置換段階により求められる繰り返しの回数を最小化する分離順序を決定するため、４つの変数を有するＢＤＤに適用されてもよい。
【００９９】
ある実施例では、この最適化は、ｎの具体的な各値に対してオフラインに１回実行される。ある実施例は、網羅的アプローチを利用して、最適な分離順序を検出してもよい。にもかかわらず、網羅的アプローチが適用可能でないか実際的でないくらい大きい場合、ある実施例は、何れかの分離順序から開始し、その後にそれのローカルに最適な位置が検出されるまで、各分離を左右に独立に移すようにしてもよい。各パラレル置換段階は、高々ｎ回の繰り返しを必要とする。従って、各分離順序は、高々
【０１００】
【数１８】
0005987289.tif 000019
回の繰り返し（すなわち、
【０１０１】
【数１９】
0005987289.tif 000020
回の繰り返し）に及ぶレイヤ交換スケジュールに対応する。単純変更アルゴリズムは（ｎ！−１）回の繰り返し、又はパラレルなケースでは少なくとも（ｎ！−（ｎ−１）！）回の繰り返しを必要とするため、図１３Ａに示される処理は、指数的により少ないレイヤスワップの繰り返ししか必要とせず、従って指数的により少ないレイヤスワップしか必要としない。実際には、最適な分離順序は、具体例から観察されるような
【０１０２】
【数２０】
0005987289.tif 000021
よりも有意に少ない繰り返ししか必要としない。
［ＢＤＤ変数の再帰的分離］
ある実施例では、ｎ個の変数を有する任意のＢＤＤが与えられると（ｎは、３以上の任意の奇数又は偶数）、ｎ個の変数は、各グループが、
【０１０３】
【数２１】
0005987289.tif 000022
個の順序付けされた集合から構成される
【０１０４】
【数２２】
0005987289.tif 000023
個の一意的なグループに分離されてもよい。再び、ｎが偶数であるとき、各グループの全ての集合はそれぞれｎ個の変数のうちの２つを有する。ｎが奇数であるとき、各グループの１つの集合を除く全ての集合がそれぞれｎ個の変数のうちの２つを有し、各グループの１つの集合がｎ個の変数のうちの１つを有する。再び、各集合内の変数順序は無関係であり、各グループ内の集合の順序が関係する。ある実施例では、ｎが２の冪乗であるより具体的なケースでは（すなわち、ｎは２により繰り返し除すことができる）、ｎ個の変数は、再帰的アルゴリズムを用いて２つの変数のｎ／２個の順序付けされた集合の
【０１０５】
【数２３】
0005987289.tif 000024
個のグループに分離されてもよい。より詳細には、ｎ個の変数の集合が与えられると、１回目の繰り返し中に、ある実施例は、当該集合を各集合がｎ／２個の変数を有する２つの順序付けされた変数の集合の一意的なグループに分離してもよい。２回目の繰り返し中に、ある実施例はさらに、各グループ内の個々の集合を２以上の順序付けされた変数の集合に分離し、これにより、各集合がｎ／４個の変数を有する４つの順序付けされた変数の集合のさらなるグループが構成されてもよい。以下同様である。各繰り返し中、既存のグループかから個々の集合を分離することによって構成される新たなグループが、前の繰り返しから取得された既存のグループと置き換えられる。この再帰的処理は、各グループ内の各集合が２つの変数のｎ／２個の順序付けされた集合を有するまで続けられるようにしてもよい。
【０１０６】
４つの変数を有するＢＤＤの最適な変数順序が、例えば、図１２Ａ〜１２Ｃに示される最適なレイヤ交換スケジュールなどを用いて効率的に決定されるため、再帰的処理は実際的には、各グループ内の各集合が４つの変数を有するまで続けられるようにしてもよい。その後に、図１２Ａ〜１２Ｃに関して上述された処理が、４つの変数の各集合についてローカルに最適な変数順序を決定するため利用されてもよい。
【０１０７】
図１４Ａは、ｎ個の変数を分離するのに用いられる再帰的処理の一例を示す。図１４Ｂは、８つの変数に適用される再帰的処理を示す。一例としてｎ＝８を使用する。１回目の繰り返し中、８つの変数は、各グループが２つの順序付けされた集合から構成され、各集合が４つの変数から構成される複数の一意的なグループに分離されてもよい。例えば、１回目の繰り返し後、これらのグループのいくつかは以下のようになるかもしれない。
【０１０８】
グループ１：｛１，２，３，４｝｛５，６，７，８｝
グループ２：｛１，２，３，５｝｛４，６，７，８｝
グループ３：｛１，２，３，６｝｛４，５，７，８｝など
本開示において全てをリストするための２以上のグループが存在する。２回目の繰り返し中、各グループ内には、４つの変数の各集合が再び、各グループが２つの順序付けされた集合から構成され、各集合が２つの変数から構成される複数の一意的なグループに分離される。例えば、２回目の繰り返し後、集合｛１，２，３，４｝は、２つの変数の２つの集合の６つのグループを構成する。同様に、集合｛５，６，７，８｝は、２つの変数の２つの集合の他の６つのグループを構成する。集合｛１，２，３，５｝は、２つの変数の２つの集合のさらなる他の６つのグループを構成する。以下同様である。
【０１０９】
２回目の繰り返し後、各グループ内の各集合は２つの変数を有する。従って、再帰は終了される。ｎが８より大きな数である場合、より多くの繰り返しが必要とされる。最後の繰り返し後、図１４Ｂにおいて、各行に沿った変数の集合が、２つの変数の４つの順序付けされた集合の一意的なグループを構成し、各グループは、８つの変数のＢＤＤの一意的な変数順序を提供する。ＢＤＤの最適な変数順序は、図１３Ａに関して説明されたものと同様の処理を利用して決定されてもよい。より詳細には、ある実施例は、非明示的列挙コンセプトを用いて各グループ内のローカルに最適な変数順序を決定し、その後に全てのグループに対応する全てのローカルに最適な変数のうち最小のサイズをもたらすローカルに最適な変数順序を選択することによって、ＢＤＤの最適な変数順序を決定するようにしてもよい。
【０１１０】
すなわち、ある実施例では、ｎ個の変数の集合が与えられると（ｎは、２より大きな任意の奇数又は偶数）、既存の集合は、一方の集合がｎ個の変数のうちの
【０１１１】
【数２４】
0005987289.tif 000025
個を有し、他方の集合がｎ個の変数のうちの
【０１１２】
【数２５】
0005987289.tif 000026
個を有する２つの新たな変数集合に分離される。ｎ個の変数のそれぞれは、新たな２つの集合の双方でなく、何れか一方に属する。ｎが偶数であるとき、新たな２つの集合は同数の変数を有する。ｎが奇数であるとき、新たな２つの集合は１つの変数だけ異なる。既存の変数集合を新たな２つの変数集合に分離する上記方法は、図１４Ａに示される再帰的処理の各繰り返し中に、各グループの各変数集合に同様に適用される。
【０１１３】
一般に、ｎ個の変数を各集合が
【０１１４】
【数２６】
0005987289.tif 000027
を有する２つの順序付けされた集合に分離するため、各グループが
【０１１５】
【数２７】
0005987289.tif 000028
個の変数の２つの順序付けされた集合から構成される
【０１１６】
【数２８】
0005987289.tif 000029
個の一意的なグループが存在する（すなわち、ｎ個の変数を分離するのに、
【０１１７】
【数２９】
0005987289.tif 000030
個の異なる方法が存在する）。この再帰は、ｎ個の変数が各グループが２つ又は１つの変数の
【０１１８】
【数３０】
0005987289.tif 000031
個の順序付けされた集合を含む複数の一意的なグループ（すなわち、セパレーション）に分離されるまで続けられる。すなわち、各部分集合が２つ又は１つの変数を有するまで、
【０１１９】
【数３１】
0005987289.tif 000032
個の変数の各部分集合に対して、当該アルゴリズムが再帰的に実行される。各グループ内では、各変数は集合の１つにおいて１回しか出現しない。
【０１２０】
上述されるように、４つの変数を有するＢＤＤの最適な変数順序は、例えば、図１２Ａ〜１２Ｚに示されるアルゴリズムの何れかを用いて決定されてもよい。ある実施例では、ｎ個の変数を分離するための再帰は、各グループの各集合が４以下の変数を有するようになるまで続けられる。その後、各グループの各集合のローカルに最適な変数順序が、例えば、図１２Ａ〜１２Ｚに示されるアルゴリズムの何れかを用いて決定されてもよい。各グループについて、それのローカルに最適な変数順序は、当該グループの各集合のローカルに最適な変数順序を用いて決定される。その後、ＢＤＤに対して、それの最適な変数順序が、各グループのローカルに最適な変数順序を用いて決定される。
【０１２１】
ｎ＝５のケースについて（すなわち、５つの変数）、上述されたｎ個の変数を分離する方法に基づき、ある実施例では、５つの変数が、各グループ内において１つの集合が２つの変数を有し、１つの集合が３つの変数を有する２つの順序付けされた集合のグループに分離される。その後、５つの変数の最適な変数順序が、当該グループを用いて決定される。しかしながら、ある実施例では、５つの変数を各グループ内において１つの集合が４つの変数を有し、１つの集合が１つの変数を有する２つの順序付けされた集合のグループに分離することがより効率的であることが、実験により示唆されている。各グループの４つの変数の各集合のローカルに最適な変数順序が、例えば、図１２Ａ〜１２Ｚに示されるアルゴリズムの何れかを用いて決定されてもよい。各グループについて、それのローカルに最適な変数順序が、当該グループの４つの変数の集合のローカルに最適な変数順序を用いて決定される。５つの変数のケースの最適な変数順序が、各グループのローカルに最適な変数順序を用いて決定される。
【０１２２】
ある実施例では、ｎ個の変数を分離するための再帰が、各グループの各集合が５以下の変数を有するようになるまで続けられる。その後、各グループの４つの変数の各集合のローカルに最適な変数順序が、例えば、図１２Ａ〜１２Ｚに示されるアルゴリズムの何れかを用いて決定されてもよい。各グループの５つの変数の各集合のローカルに最適な変数順序が、５つの変数のケースについて上述された方法を用いて決定されてもよい。各グループについて、それのローカルに最適な変数順序は、当該グループの各集合のローカルに最適な変数順序を用いて決定される。その後、ＢＤＤについて、それの最適な変数順序が、各グループのローカルに最適な変数順序を用いて決定される。
【０１２３】
ある実施例では、このコンセプトはさらに以下のように一般化されてもよい。ｎ個の変数を分離するための再帰は、各グループの各集合がｋ個以下（１≦ｋ＜ｎ）の変数を有するようになるまで続けられてもよい。ある実施例では、ｋは所定のものであってもよい（例えば、ｋは２，３，４又は５など）。各グループの各集合のローカルに最適な変数順序は、何れか適切なアルゴリズムを用いて決定されてもよい。各グループのローカルに最適な変数順序は、当該グループの各集合のローカルに最適な変数順序を用いて決定される。そして、ＢＤＤの最適な変数が、各グループのローカルに最適な変数順序を用いて決定される。
【０１２４】
ある実施例では、分離段階は、４つの変数のケースについて図１３Ａ〜１３Ｂに関して上述されたようなものと同様の方法により、順序付けされ、パラレル置換段階とリンクされる。必要とされる繰り返しは、再帰
【０１２５】
【数３２】
0005987289.tif 000033
により取得され、これは既存のイグザクトアルゴリズムの要求される繰り返しより改善されていることが示される。
【０１２６】
ｎ個の変数を分離するための当該再帰的アルゴリズムと図１３Ａ〜１３Ｂに関して上述された非再帰的アルゴリズムとを比較すると、再帰的アルゴリズムはｎ個の変数を有するＢＤＤの最適な変数順序を決定するのに高々４ｎ回のレイヤスワップの繰り返ししか必要としない一方、非再帰的アルゴリズムはｎ個の変数を有するＢＤＤの最適な変数順序を決定するのに高々
【０１２７】
【数３３】
0005987289.tif 000034
回のレイヤスワップの繰り返しを必要とする。４より大きなｎに対して、再帰的アルゴリズムがより効率的なものとなる。
［パラレルウィンドウアルゴリズム］
図８に関して説明されたウィンドウアルゴリズムでは、ｎ個の変数を有する関数を表現するＢＤＤに対して、サイズｋ（２≦ｋ＜ｎ）の“ウィンドウ”が選択される。当該アルゴリズムは、レイヤ［１．．．ｋ］，［２．．．ｋ＋１］，［３．．．ｋ＋２］．．．［ｎ−ｋ＋１．．．ｎ］の最適な順序を繰り返し順次検出する。既存のウィンドウアルゴリズムは、単純変更アルゴリズムを利用して、各ウィンドウ内の変数をそれのローカルな最適順序に従ってリオーダする。
【０１２８】
ある実施例では、既存のウィンドウアルゴリズムは、パラレル化により改善される。ある実施例は、ｋ（ｋ＝４など）のウィンドウサイズを選択する。このとき、ウィンドウはｋ個の連続するレイヤから構成される。その後、各ウィンドウ内において、ｋ個の連続するレイヤにおけるｋ個の変数のローカルに最適な変数順序が決定され、ｋ個の変数が、何れか適切なＢＤＤ変数リオーダアルゴリズムを利用して、それのローカルに最適な変数順序又はローカルに実質的に最適な変数順序に従ってリオーダされる。さらに、ｋ個の連続するレイヤの複数の互いに素なウィンドウがパラレルに処理されてもよい。２つのウィンドウは、それらが共通のレイヤを共有しない場合に互いに素である。
【０１２９】
ある実施例では、ｎ個の変数に対応するｎ個のレイヤを有するＢＤＤについて、サイズｋ（ｋ＝４など）のウィンドウによって、各繰り返し中に、ｎ個のレイヤが高々
【０１３０】
【数３４】
0005987289.tif 000035
個の互いに素なウィンドウにグループ化される（例えば、ｋ＝４である場合、ウィンドウ１はレイヤ１〜４を含み、ウィンドウ２はレイヤ５〜８を含み、ウィンドウ３はレイヤ９〜１２を含むなどである）。
【０１３１】
【数３５】
0005987289.tif 000036
個の互いに素なウィンドウが、適切なＢＤＤ変数リオーダアルゴリズムを用いてパラレルにリオーダされてもよい（例えば、単純変更アルゴリズムや変数の集合の最適な変数順序を決定する上述されたアルゴリズムの何れかなど）。例えば、ｋ＝４である場合、各ウィンドウのローカルに最適な変数順序を決定するため、４つの変数を有するＢＤＤに対する変数リオーダアルゴリズムに基づく最適レイヤ交換スケジュールが利用されてもよい。
【０１３２】
異なる繰り返しの間に、ｎ個のレイヤが異なってグループ化されてもよい。ある実施例では、例えば、ｎが４により割り切れる場合、１回目の繰り返し中に、ウィンドウはレイヤ｛１．．．４｝，レイヤ｛５．．．８｝，．．．，レイヤ｛ｎ−３．．．ｎ｝となる。２回目の繰り返し中、ウィンドウはレイヤ｛２．．．５｝，レイヤ｛６．．．９｝，．．．，レイヤ｛ｎ−６．．．ｎ−３｝となる。３回目の繰り返し中、ウィンドウはレイヤ｛３．．．６｝，レイヤ｛７．．．１０｝，．．．，レイヤ｛ｎ−５．．．ｎ−２｝となる。４回目の繰り返し中、ウィンドウはレイヤ｛４．．．７｝，レイヤ｛８．．．１｝，．．．，レイヤ｛ｎ−４．．．ｎ−１｝となる。５〜８回目の繰り返しのウィンドウは、１〜４回目の繰り返しのウィンドウと同じになり、以下同様である。当該処理は、収束するまで続けられる（例えば、ＢＤＤの合計サイズが所望又は所定の閾値以下になるまで、又は変数位置のさらなる調整がＢＤＤの合計サイズをもはや有意に減少させなくなるまで）。
【０１３３】
図１５Ａは、パラレルウィンドウリオーダアルゴリズムの一例を示す。図１５Ｂは、１２個の変数に対応する１２個のレイヤを有する一例となるＢＤＤ１５００に適用されるサイズ４の一例となるウィンドウを利用したパラレルウィンドウリオーダアルゴリズムを示す。図１５Ａの各ステップは、一例としてＢＤＤ１５００を用いて説明される。１回目の繰り返し中（すなわち、ｔ＝１）、図１５Ａのステップ１５０２に示されるように、１２個のレイヤが４つの連続するレイヤの３つの互いに素な集合に分離される。従って、ウィンドウは、レイヤ｛１．．．４｝、レイヤ｛５．．．８｝及びレイヤ｛９．．．１２｝となる。これら３つのウィンドウは、それぞれが４つの変数を有するＢＤＤに対する最適リオーダアルゴリズム又は他の何れか適切な変数リオーダアルゴリズムを用いて、図１５Ａのステップ１５０４に示されるように、パラレルにリオーダされる。全てのウィンドウがリオーダされた後、ＢＤＤ１５００の現在のサイズが決定される。ＢＤＤ１５００の現在のサイズが所望の閾値未満である場合、当該処理は、図１５Ａのステップ１５０６に示されるように終了される。そうでない場合、もう１回繰り返しが実行される。例えば、２回目の繰り返し中（すなわち、ｔ＝２）、１２個のレイヤが４つの連続するレイヤの２つの互いに素な集合に分離される。従って、ウィンドウは、レイヤ｛２．．．５｝及びレイヤ｛６．．．９｝となる。これら２つのウィンドウは、同様にしてパラレルにリオーダされてもよい。３回目の繰り返し中（すなわち、ｔ＝３）、ウィンドウは、レイヤ｛３．．．６｝及びレイヤ｛７．．．１０｝となり、これら２つのウィンドウは、同様にしてパラレルにリオーダされてもよい。４回目の繰り返し中（すなわち、ｔ＝４）、ウィンドウは、レイヤ｛４．．．７｝及びレイヤ｛８．．．１１｝となり、これら２つのウィンドウは、同様にしてパラレルにリオーダされてもよい。５回目の繰り返し中、１回目の繰り返しと同様に、グループ化が戻ってレイヤ１から再び開始される。所望の変数順序が取得されるまで（例えば、ＢＤＤのサイズが十分小さくなるなど）、以下同様に実行される。
【０１３４】
ある実施例では、各繰り返し中、ＢＤＤのｎ個のレイヤがｋ個の連続するレイヤの複数の互いに素な集合に分離される。しかしながら、各繰り返し中に構成されるｋ個の連続するレイヤの互いに素な集合は、現在の繰り返しの直前の繰り返し中に構成されたｋ個の連続するレイヤの互いに素な集合とは異なる。この結果、ｎ個のレイヤは、図１５Ｂに示されるように、各繰り返し中に異なって分離及びグループ化される。
【０１３５】
実際のアプリケーションでは、サイズ４以下のウィンドウが最も一般的に利用される。しかしながら、図１５Ｂに示される上記処理は、任意のサイズ（サイズｋなど）のウィンドウに適用するよう拡張されてもよい。一般的なケースでは、ｋのウィンドウサイズによると、ある実施例は、（ａ＋１）×ｋ＋ｂ≦ｎとなるａと、
【０１３６】
【数３６】
0005987289.tif 000037
となるｂとに対する繰り返しで交互にレイヤ［ａ×ｋ＋１＋ｂ，（ａ＋１）×ｋ＋ｂ］に対して対応するイグザクトリオーダアルゴリズムを適用してもよい。
［最大パラレル化を利用したウィンドウアルゴリズム］
図１５Ｂに関して上述されるように、複数のウィンドウ内の変数をパラレルにリオーダすることに加えて、各ウィンドウ内において、ｋ個の連続するレイヤにおけるｋ個の変数のリオーダは、図９に関して上述されるような最大パラレル化コンセプトを利用してもよい。
【０１３７】
図１６は、ウィンドウサイズ６を使用して、１つのウィンドウ内のｋ個の連続するレイヤにおける変数をリオーダする具体例を示す。ある実施例では、奇数の各繰り返し中、ｋ個のレイヤが連続するレイヤの互いの素な奇数グループ化ペアにグループ化され、偶数の各繰り返し中、ｋ個のレイヤが連続するレイヤの互いに素な偶数グループ化ペアにグループ化され、又はその反対のグループ化がされる。各繰り返し中、連続するレイヤの互いに素な全てのペアが同時に交換される。このアルゴリズムは、ウィンドウアルゴリズムの構成を維持する。所与のｋに対して、当該アルゴリズムは、逆の置換によりそれのｋ個の入力を移すのに必要な全てのレイヤスワップを実行する。ここで、パラレル置換アルゴリズムと構造的に類似している。しかしながら、このケースでは、全てのレイヤスワップは各繰り返し中に無条件に実行される。さらに、各繰り返し中に、非明示的に検出された全ての置換のサイズが計算される。最小のサイズの置換が維持（記録など）される。ｋ個のレイヤに対する全てのレイヤスワップの終了後、パラレル置換アルゴリズムは、最小のサイズの置換にｋ個のレイヤを戻すのに利用されてもよい。再び、ある実施例は、ＢＤＤが所望のサイズに達するまで、レイヤが異なる繰り返し中に異なってグループ化される処理を繰り返す。
［パラレルシフトアルゴリズム］
図７に関して上述されたシフトアルゴリズムの主な短所は、それが本来的に順次的なものであることである。ＢＤＤの変数は、それらが配置されるレイヤのサイズに従って順序付けされる。シフトアルゴリズムのこの短所を軽減するため、ある実施例は、１回に１つの変数をシフトさせるのでなく、ｋ個の変数を同時にシフト（移動）させる。しかしながら、ｋ個の変数のそれぞれは、図７に示されるものと同様の方法によりシフトされてもよい。ある実施例では、ｎ個の変数に対応するｎ個のレイヤを有するＢＤＤが与えられると、ｎ個の変数は、繰り返し処理を利用してそれらの最適なレイヤに移動される。各繰り返し中、現在の繰り返し中に最大のサイズを現在有しているｋ個のレイヤのｋ個の変数が、それらのローカルに最適なレイヤ（すなわち、位置）にシフトされる。ｋ個の変数の各集合について、シフトがｋ個の変数に対して同時に実行される。例えば、ｋ個の最大となるレイヤのｋ個の変数がまず同時にシフトされ、その後に２番目に大きなｋ個のレイヤのｋ個の変数が同時にシフトされ、以下同様に実行される。同時のレイヤスワップの各繰り返し後、非明示的に生成された全ての置換のサイズが計算される。集合の全ての変数に対してシフトが実行されると、パラレル置換アルゴリズムは、ローカルに最小となるものに順序を戻すのに利用される。当該アルゴリズムは、全ての変数の集合について継続され、収束するまで繰り返される。
【０１３８】
図１７Ａは、パラレルシフトアルゴリズムの一例を示す。ある実施例では、１回目の繰り返し中、図１７Ａのステップ１７０２に示されるように、ＢＤＤのｎ個のレイヤにおいて最大のサイズを同時に有するｋ個のレイヤが選択される。選択されたｋ個のレイヤに現在は位置されているｋ個の変数は、当該繰り返し中に同時にシフトされる。ｋ個の変数は、図１７Ｂのステップ１７０４に示されるように、各自のローカルに最適なレイヤにパラレルに移動される。これを実行するため、ｋ個の変数のそれぞれは、図７に関して上述された処理を利用して、自らのローカルに最適なレイヤにシフトされてもよい。例えば、各変数は、当該変数を有するｎ個のレイヤにおいて最小のサイズを現在もたらすレイヤを決定するため、ｎ個のレイヤを移動される。当該レイヤは、現在の繰り返し中に変数のローカルに最適なレイヤである。しかしながら、ある実施例は、ｋ個の変数をパラレルにシフトする。ｋ個全ての変数がそれらのローカルに最適なレイヤに配置された後、ＢＤＤの現在のサイズが決定される。ＢＤＤの現在のサイズが所望の閾値未満である場合、当該処理は、図１７Ａのステップ１７０６に示されるように終了される。そうでない場合、ステップ１７０２と１７０４とを実行することから構成されるもう１回の繰り返しが繰り返される。
【０１３９】
図１７Ｂは、３つの変数がパラレルにシフトされる一例となるＢＤＤ１７００に適用されるパラレルシフトアルゴリズムを示す。９個の変数があり、変数２，５，８が最大サイズを現在有する３つのレイヤの３つの変数である。変数２，５，８は、繰り返し処理において同時のレイヤ交換を利用して、それらのローカルに最適な位置に移動される。各繰り返し中、連続するレイヤのペアの交換が互いに影響を与えない限り、変数２，５，８がパラレルにシフトされてもよい。より詳細には、変数２は、それがレイヤ１に到達するまで上方に移動し、ＢＤＤ１７００の最後のレイヤであるレイヤ９に到達するまで下方に移動される。変数５は、それがレイヤ１に到達するまでまず上方に移動され、その後にレイヤ９に到達するまで下方に移動される。変数８は、それがレイヤ９に到達するまで下方に移動され、その後にレイヤ１に到達するまで上方に移動される。変数のいくつかは全てのレイヤを移動するのにより多くの繰り返しを必要とし、繰り返しの一部において、１つの変数をシフトすることが他の変数をシフトすることに影響を与える可能性があるが（例えば、６回目の繰り返し中、変数２は、変数８のシフトが変数２のシフトに干渉しないため、シフトすることができない）、繰り返しの大部分において、これら３つの変数は、効果的にパラレル化される（すなわち、連続するレイヤの３つの互いに素なペアを同時に交換することによって同時にシフトされる）。
【０１４０】
各変数が９つのレイヤ間を移動するため、当該変数が各レイヤにあるとき、当該レイヤのサイズが決定される。従って、変数２について、変数２が９つのレイヤにそれぞれあるときに決定される９つのサイズがある。９つのサイズのうちで最小のサイズを有するレイヤが、変数２のローカルに最適なレイヤである。同様に、変数５について、変数５が９つのレイヤにそれぞれあるときに決定された９つのサイズがある。第２の９つのサイズのうちで最小サイズを有するレイヤが、変数５のローカルに最適なレイヤとなる。従って、所与の変数について、変数が各レイヤにあるときに全てのレイヤ間で最小のサイズをもたらすレイヤが、現在の繰り返し中の当該レイヤのローカルに最適なレイヤとなる。
【０１４１】
ＢＤＤのサイズが十分小さくない場合、最大のサイズを現在有している３つのレイヤに配置された他の３つの変数が選択される。これら３つの変数は、変数２，５，８に関して上述されたものと同じ処理を用いて、それらのローカルに最適な位置に移動される。
【０１４２】
ＢＤＤは、多くの実用的なアプリケーションを有し、本開示に開示された各種アルゴリズムは、何れかのアプリケーションのＢＤＤにより利用されてもよい。例えば、集積回路（ＩＣ）設計の分野では、ＩＣはＢＤＤにより表現される関数を実現するのに利用されてもよい。ＩＣ設計が従属する必要がある性質は、ＢＤＤにより表現されてもよく、当該回路の設計をフォーマルベリフィケーションすることに関連して利用される。ヘルスケアの分野では、ＢＤＤは、医療センサにより収集されるデータを表すのに利用される。フォーマルベリフィケーションの分野では、ＢＤＤは、遷移関係又は到達可能な状態空間をそれら各自の性質と共にモデル化するのに利用されてもよい。ハードウェア及びソフトウェアシステムに関して、フォーマルベリフィケーション（ｆｏｒｍａｌ  ｖｅｒｉｆｉｃａｔｉｏｎ）は、形式的な数学方法を利用して、ある形式的仕様や性質に関してシステムの基礎となる意図されたアルゴリズムの正しさを証明又は反証するための処理である。これらのハードウェア及びソフトウェアシステムのベリフィケーションは、システムの抽象的な数学モデルに対するフォーマルプルーフを提供することによって実行され、数学モデルとシステムの性質との間の対応関係が構成により知られる。システムをモデル化するためしばしば利用される数学オブジェクトの具体例は、有限状態マシーン、ラベル付けされた遷移システム、Ｐｅｔｒｉネット、時間付きオートマトン、バイブリッドオートマトン、プロセス代数、操作的セマティック、表示的セマティック、公理的セマティック、Ｈｏａｒｅロジックなどのプログラミング言語のフォーマルセマティックである。
【０１４３】
ＢＤＤ、又はより詳細にはＢＤＤを構成するデータは、コンピュータ可読な非一時的記憶媒体に格納されてもよい。ＢＤＤの変数が本開示において開示されたアルゴリズムの何れかを用いてリオーダされるとき、当該データは、コンピュータ可読な非一時的記憶媒体により実現されるように変換される。
【０１４４】
ある実施例では、任意の整数の集合はブール関数として表現され、ブール関数はＢＤＤにより表現されてもよい。整数の集合が与えられると、ある実施例は、集合の最大の整数を表現するのに必要とされる最小数のビットを決定する。このビット数は、ブール関数の変数の個数である。その後、集合の各整数について、ブール関数はＴＲＵＥと評価され、集合にない任意の整数については、ブール関数はＦＡＬＳＥと評価される。
【０１４５】
例えば、整数の集合｛１，３，５，６｝を検討する。集合の最大の整数は６であり、３ビットを要する。従って、この整数の集合を表現するのに使用されるブール関数は、３つの変数ｘ１，ｘ２及びｘ３を必要する。以下のテーブルは、｛１，３，５，６｝を表現するのに利用されるときの３つの変数の値とブール関数の値とを示す。
【０１４６】
【表１】
0005987289.tif 000038
ある実施例は、１以上のコンピュータシステム上で実現されてもよい。図１８は、一例となるコンピュータシステム１８００を示す。ある実施例では、１以上のコンピュータシステム１８００が、ここに開示又は図示される１以上の方法の１以上のステップを実行する。ある実施例では、１以上のコンピュータシステム１８００は、ここに開示又は図示される機能を提供する。ある実施例では、１以上のコンピュータシステム１８００上で実行されるソフトウェアは、ここに開示又は図示される１以上の方法の１以上のステップを実行し、又はここに開示又は図示される機能を提供する。ある実施例は、１以上のコンピュータシステム１８００の１以上の部分を含む。
【０１４７】
本開示は、何れか適切な個数のコンピュータシステム１８００を想定する。本開示は、何れか適切な物理形態をとるコンピュータシステム１８００を想定する。例えば、限定することなく、コンピュータシステム１８００は、埋め込みコンピュータシステム、システム・オン・チップ（ＳＯＣ）、シングルボードコンピュータシステム（ＳＢＣ）（例えば、コンピュータ・オン・モジュール（ＣＯＭ）やシステム・オン・モジュール（ＳＯＭ）など）、デスクトップコンピュータシステム、ラップトップ若しくはノートブックコンピュータシステム、インタラクティブキオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、サーバ、又はこれらの２以上の組み合わせであってもよい。必要に応じて、コンピュータシステム１８００は、１以上のネットワークに１以上のクラウドコンポーネントを有する１以上のコンピュータシステム１８００を有し、単一の又は分散化され、複数の場所に及び、複数のマシーンに及び、クラウドに常駐するものであってもよい。必要に応じて、１以上のコンピュータシステム１８００は、実質的に空間的又は時間的制約なく、ここに開示又は図示される１以上の方法の１以上のステップを実行してもよい。例えば、限定することなく、１以上のコンピュータシステム１８００は、ここに開示又は図示される１以上の方法の１以上のステップをリアルタイムに又はバッチモードにより実行してもよい。１以上のコンピュータシステム１８００は、必要に応じて、ここに開示又は図示される１以上の方法の１以上のステップを異なる時点で又は異なる位置において実行するようにしてもよい。
【０１４８】
ある実施例では、コンピュータシステム１８００は、プロセッサ１８０２、メモリ１８０４、ストレージ１８０６、入出力（Ｉ／Ｏ）インタフェース１８０８、通信インタフェース１８１０及びバス１８１２を有する。本開示は、ある配置においてある個数のコンポーネントを有するコンピュータシステムを開示及び図示するが、本開示は、何れか適切な配置において何れか適切な個数の適切なコンポーネントを有する何れか適切なコンピュータシステムを想定する。
【０１４９】
ある実施例では、プロセッサ１８０２は、コンピュータプログラムを構成するものなど、命令を実行するためのハードウェアを有する。例えば、限定することなく、命令を実行するため、プロセッサ１８０２は、整数レジスタ、内部キャッシュ、メモリ１８０４又はストレージ１８０６から命令を抽出（又はフェッチ）し、それらを復号化及び実行し、１以上の結果を内部レジスタ、内部キャッシュ、メモリ１８０４又はストレージ１８０６に書き込む。ある実施例では、プロセッサ１８０２は、データ、命令又はアドレスのための１以上の内部キャッシュを有する。本開示は、必要に応じて、何れか適切な個数の何れか適切な内部キャッシュを有するプロセッサ１８０２を想定する。例えば、限定することなく、プロセッサ１８０２は、１以上の命令キャッシュ、１以上のデータキャッシュ及び１以上のＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）を有してもよい。命令キャッシュの命令は、メモリ１８０４又はストレージ１８０６における命令のコピーであってもよく、命令キャッシュは、プロセッサ１８０２によるこれらの命令の抽出を迅速化する。データキャッシュのデータは、プロセッサ１８０２において実行される移行の命令によるアクセスのため、又はメモリ１８０４又はストレージ１８０６への書き込みのため、プロセッサ１８０２において実行される以前の命令の結果や他の適切なデータに対して実行するため、プロセッサ１８０２において実行される命令のためのデータのメモリ１８０４又は１８０６へのコピーであってもよい。データキャッシュは、プロセッサ１８０２によるリード又はライト処理を迅速化する。ＴＬＢは、プロセッサ１８０２のための仮想アドレスの変換を迅速化する。ある実施例では、プロセッサ１８０２は、データ、命令又はアドレスのための１以上の内部レジスタを有する。本開示は、必要に応じて、何れか適切な個数の何れか適切な内部レジスタを含むプロセッサ１８０２を想定する。必要に応じて、プロセッサ１８０２は、１以上のＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）を有してもよいし、マルチコアプロセッサであってもよいし、又は１以上のプロセッサ１８０２を有してもよい。本開示はあるプロセッサを開示及び図示しているが、本開示は、何れか適切なプロセッサを想定する。
【０１５０】
ある実施例では、メモリ１８０４は、プロセッサ１８０２が実行する命令やプロセッサ１８０２が処理するデータを格納するためのメインメモリを有する。例えば、限定することなく、コンピュータシステム１８００は、ストレージ１８０６や他のソース（例えば、他のコンピュータシステム１８００など）からメモリ１８０４に命令をロードする。その後、プロセッサ１８０２は、メモリ１８０４から整数レジスタ又は内部キャッシュに命令をロードする。これらの命令を実行するため、プロセッサ１８０２は、内部レジスタ又は内部キャッシュから命令を抽出及び復号化する。命令の実行中又は実行後、プロセッサ１８０２は、１以上の結果（中間結果又は最終結果であってもよい）を内部レジスタ又は内部キャッシュに書き込む。プロセッサ１８０２は、その後にこれらの結果の１以上のメモリ１８０４に書き込む。ある実施例では、プロセッサ１８０２は、１以上の内部レジスタ若しくは内部キャッシュに又はメモリ１８０４にある命令しか実行せず（ストレージ１８０６などとは対照的に）、また１以上の内部レジスタ若しくは内部キャッシュに又はメモリ１８０４におけるデータに対してしか処理しない（ストレージ１８０６などとは対照的に）。１以上のメモリバス（それぞれがアドレスバスとデータバスとを含む）は、プロセッサ１８０２とメモリ１８０４とを結合する。バス１８１２は、後述されるように、１以上のメモリバスを有する。ある実施例では、１以上のメモリ管理ユニット（ＭＭＵ）は、プロセッサ１８０２とメモリ１８０４との間にあり、プロセッサ１８０２により要求されるメモリ１８０４へのアクセスを実行する。ある実施例では、メモリ１８０４は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を有する。このＲＡＭは、必要に応じて揮発性メモリであってもよい。必要に応じて、このＲＡＭは、ダイナミックＲＡＭ（ＤＲＡＭ）又はスタティックＲＡＭ（ＳＲＡＭ）であってもよい。本開示は、何れか適切なＲＡＭを想定する。メモリ１８０４は、必要に応じて１以上のメモリ１８０４を有してもよい。本開示はあるメモリを開示及び図示するが、本開示は、何れか適切なメモリを想定する。
【０１５１】
ある実施例では、ストレージ１８０６は、データや命令のためのマスストレージを有する。例えば、限定することなく、ストレージ１８０６は、ＨＤＤ、フロッピー（登録商標）ディスクドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープ、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ドライブ又はこれらの２以上の組み合わせを有してもよい。ストレージ１８０６は、必要に応じて、着脱可能な又は着脱不可な（又は固定された）メディアを有してもよい。ストレージ１８０６は、必要に応じて、コンピュータシステム１８００の内部又は外部にあってもよい。ある実施例では、ストレージ１８０６は不揮発性のソリッドステートメモリである。ある実施例では、ストレージ１８０６は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）を含む。必要に応じて、このＲＯＭは、マスクプログラムされたＲＯＭ、プログラマブルＲＯＭ（ＰＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ＥＰＲＯＭ）、ＥＡＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ａｌｔｅｒａｂｌｅ  ＲＯＭ）、フラッシュメモリ又はこれらの２以上の組み合わせであってもよい。本開示は、何れか適切な物理的形態をとるマスストレージ１８０６を想定する。ストレージ１８０６は、必要に応じて、プロセッサ１８０２とストレージ１８０６との間の通信を実現する１以上のストレージ制御ユニットを有してもよい。必要に応じて、ストレージ１８０６は１以上のストレージ１８０６を有する。本開示はあるストレージを開示及び図示するが、本開示は何れか適切なストレージを想定する。
【０１５２】
ある実施例では、Ｉ／Ｏインタフェース１８０８は、コンピュータシステム１８００と１以上のＩ／Ｏデバイスとの間の通信のための１以上のインタフェースを提供するハードウェア、ソフトウェア又はその方法を含む。コンピュータシステム１８００は、必要に応じて、これらのＩ／Ｏデバイスの１以上を有してもよい。これらのＩ／Ｏデバイスの１以上は、ユーザとコンピュータシステム１８００との間の通信を可能にする。例えば、限定することなく、Ｉ／Ｏデバイスは、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカー、スチルカメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、他の適切なＩ／Ｏデバイス又はこれらの２以上の組み合わせを有してもよい。Ｉ／Ｏデバイスは、１以上のセンサを有してもよい。本開示は、何れか適切なＩ／Ｏデバイスと何れか適切なＩ／Ｏインタフェース１８０８とを想定する。必要に応じて、Ｉ／Ｏインタフェース１８０８は、これらのＩ／Ｏデバイスの１以上を駆動するための１以上のデバイス又はプロセッサ１８０２を有効にするソフトウェアドライバを有してもよい。Ｉ／Ｏインタフェース１８０８は、必要に応じて、１以上のＩ／Ｏインタフェース１８０８を有してもよい。本開示はあるＩ／Ｏインタフェースを開示及び図示するが、本開示は、何れか適切なＩ／Ｏインタフェースを想定する。
【０１５３】
ある実施例では、通信インタフェース１８１０は、コンピュータシステム１８００と１以上の他のコンピュータシステム１８００又は１以上のネットワークとの間の通信（例えば、パケットベース通信など）のための１以上のインタフェースを提供するハードウェア、ソフトウェア又はその双方を含む。例えば、限定することなく、通信インタフェース１８１０は、イーサネット（登録商標）や他の有線ベースネットワーク、Ｗｉ−Ｆｉネットワークなどの無線ネットワークと通信するための無線ＮＩＣ（ＷＮＩＣ）や無線アダプタと通信するためのネットワークインタフェースコントローラ（ＮＩＣ）やネットワークアダプタを有してもよい。本開示は、何れか適切なネットワークや何れか適切な通信インタフェース１８１０とを想定する。例えば、限定することなく、コンピュータシステム１８００は、アドホックネットワーク、ＰＡＮ（Ｐｅｒｓｏｎａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＭＡＮ（Ｍｅｔｒｏｐｏｌｉｔａｎ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットの１以上の部分又はこれらの２以上の組み合わせと通信してもよい。これらのネットワークの１以上の１以上の部分は、有線又は無線であってもよい。例えば、コンピュータシステム１８００は、無線ＰＡＮ（ＷＰＡＮ）（例えば、ＢＬＵＥＴＯＯＴＨ  ＷＰＡＮなど）、Ｗｉ−Ｆｉネットワーク、Ｗｉ−ＭＡＸネットワーク、携帯電話ネットワーク（ＧＳＭ（Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）ネットワークなど）、他の適切な無線ネットワーク又はこれらの２以上の組み合わせと通信してもよい。コンピュータシステム１８００は、必要に応じて、これらのネットワークの何れかのための何れか適切な通信インタフェース１８１０を有してもよい。通信インタフェース１８１０は、必要に応じて、１以上の通信インタフェース１８１０を有してもよい。本開示はある通信インタフェースを開示及び図示するが、本開示は、何れか適切な通信インタフェースを想定する。
【０１５４】
ある実施例では、バス１８１２は、コンピュータシステム１８００のコンポーネントを互いに接続するハードウェア、ソフトウェア又はその双方を有する。例えば、限定することなく、バス１８１２は、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）や他のグラフィックスバス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＦＳＢ（Ｆｒｏｎｔ−Ｓｉｄｅ  Ｂｕｓ）、ＨＹＰＥＲＴＲＡＮＳＰＯＲＴ（ＨＴ）インターコネクト、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｉｎｆｉｎｉｂａｎｄインターコネクト、ＬＰＣ（Ｌｏｗ−Ｐｉｎ−Ｃｏｕｎｔ）バス、メモリバス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、ＰＣＩ−Ｘ（ＰＣＩ−Ｅｘｐｒｅｓｓ）バス、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）バス、ＶＬＢ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄ  Ａｓｓｏｃｉａｔｉｏｎ  ｌｏｃａｌ）バス、他の適切なバス、又はこれらの２以上の組み合わせを含むものであってもよい。バス１８１２は、必要に応じて、１以上のバス１８１２を有してもよい。本開示はあるバスを開示及び図示するが、本開示は、何れか適切なバス又はインターコネクトを想定する。
【０１５５】
ここでは、コンピュータ可読記憶媒体という表現は、１以上の非一時的な有形のコンピュータ可読記憶媒体が有する構成を含む。例えば、限定することなく、コンピュータ可読記憶媒体は、半導体ベース又は他の集積回路（ＩＣ）（例えば、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）又はＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  ＩＣ）など）、ハードディスク、ＨＤＤ、ハイブリッドハードドライブ（ＨＨＤ）、光ディスク、光ディスクドライブ（ＯＤＤ）、光磁気ディスク、光磁気ドライブ、フロッピー（登録商標）ディスク、フロッピー（登録商標）ディスクドライブ（ＦＤＤ）、磁気テープ、ホログラフィック記憶媒体、ソリッドステートドライブ（ＳＳＤ）、ＲＡＭドライブ、ＳＥＣＵＲＥ  ＤＩＧＩＴＡＬカード、ＳＥＣＵＲＥ  ＤＩＧＩＴＡＬドライブ、他の適切なコンピュータ可読記憶媒体又はこれらの２以上の組み合わせを含むものであってもよい。ここでは、コンピュータ可読記憶媒体という表現は、保護対象でない媒体を排除する。ここでは、コンピュータ可読記憶媒体という表現保護対象でない信号伝送（伝搬電気又は電磁気信号など）の一時的形態を排除する。非一時的コンピュータ可読記憶媒体は、揮発性、不揮発性又はこれらの組み合わせであってもよい。
【０１５６】
本開示は、何れか適切なストレージを実現する１以上のコンピュータ可読記憶媒体を想定する。ある実施例では、コンピュータ可読記憶媒体は、プロセッサ１８０２の１以上の部分（例えば、１以上の内部レジスタ又はキャッシュなど）、メモリ１８０４の１以上の部分、ストレージ１８０６の１以上の部分又はこれらの組み合わせを実現する。ある実施例では、コンピュータ可読記憶媒体は、ＲＡＭ又はＲＯＭを実現する。ある実施例では、コンピュータ可読記憶媒体は、揮発性又は永続的メモリを実現する。ある実施例では、１以上のコンピュータ可読記憶媒体はソフトウェアを具現化する。ここでは、ソフトウェアという表現は、１以上のアプリケーション、バイトコード、１以上のコンピュータプログラム、１以上の実行可能コード、１以上の命令、ロジック、マシーンコード、１以上のスクリプト、ソースコードなどを含むものであってもよい。ある実施例では、ソフトウェアは、１以上のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を有する。本開示は、何れか適切なプログラミング言語又はプログラミング言語の組み合わせにより表現若しくは記述される何れか適切なソフトウェアを想定する。ある実施例では、ソフトウェアは、ソースコード又はオブジェクトコードとして表現される。ある実施例では、ソフトウェアは、Ｃ、Ｐｅｒｌ、これらの適切な拡張などのより高いレベルのプログラミング言語により表現される。ある実施例では、ソフトウェアは、アセンブリ言語（又はマシーンコード）などのより低いレベルのプログラミング言語により表現される。ある実施例では、ソフトウェアはＪａｖａ(登録商標)により表現される。ある実施例では、ソフトウェアは、ＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）又は他の適切なマークアップ言語により表現される。
【０１５７】
本開示は、当業者が理解するここでの実施例に対する全ての変更、置換、変形及び改良を含む。同様に、必要に応じて、添付した請求項は、当業者が理解するここでの実施例に対する全ての変更、置換、変形及び改良を含む。
【０１５８】
以上、本発明の実施例について詳述したが、本発明は上述した特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１５９】
以下の説明に関し、さらに以下の付記を開示する。
（付記１）
ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスするステップと、
前記ｎ個の変数を、各グループが
【０１６０】
【数３７】
0005987289.tif 000039
個の順序付けされた集合を有する
【０１６１】
【数３８】
0005987289.tif 000040
個のグループに分離するステップと、
前記
【０１６２】
【数３９】
0005987289.tif 000041
個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの
【０１６３】
【数４０】
0005987289.tif 000042
個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定するステップと、
前記
【０１６４】
【数４１】
0005987289.tif 000043
個のグループに対応する
【０１６５】
【数４２】
0005987289.tif 000044
個のローカルに最適な変数順序から、
【０１６６】
【数４３】
0005987289.tif 000045
個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択するステップと、
を有する１以上の計算装置によって実行される方法であって、
ｎが偶数であるとき、前記
【０１６７】
【数４４】
0005987289.tif 000046
個のグループのそれぞれの前記
【０１６８】
【数４５】
0005987289.tif 000047
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、
ｎが奇数であるとき、前記
【０１６９】
【数４６】
0005987289.tif 000048
個のグループのそれぞれの第１集合を除く前記
【０１７０】
【数４７】
0005987289.tif 000049
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記
【０１７１】
【数４８】
0005987289.tif 000050
個のグループのそれぞれにおける前記第１集合は、前記ｎ個の変数の１個を有し、前記
【０１７２】
【数４９】
0005987289.tif 000051
個のグループにおける前記グループの
【０１７３】
【数５０】
0005987289.tif 000052
個の順序付けされた集合において同一位置の順序を有する方法。
（付記２）
前記
【０１７４】
【数５１】
0005987289.tif 000053
個のグループに対応する
【０１７５】
【数５２】
0005987289.tif 000054
個のローカルに最適な変数順序を決定するステップは、高々
【０１７６】
【数５３】
0005987289.tif 000055
個のレイヤスワップの繰り返しを要する、付記１記載の方法。
（付記３）
前記
【０１７７】
【数５４】
0005987289.tif 000056
個のグループのそれぞれにおける前記第１集合は、前記グループの
【０１７８】
【数５５】
0005987289.tif 000057
個の順序付けされた集合における最初の位置の順序を有する、付記１記載の方法。
（付記４）
前記
【０１７９】
【数５６】
0005987289.tif 000058
個のグループのそれぞれにおける前記第１集合は、前記グループの
【０１８０】
【数５７】
0005987289.tif 000059
個の順序付けされた集合における最後の位置の順序を有する、付記１記載の方法。
（付記５）
前記ＢＤＤの最適な変数順序に従って前記ＢＤＤのｎ個の変数をリオーダするステップをさらに有する、付記１記載の方法。
（付記６）
前記ＢＤＤは、非一時的なコンピュータ可読記憶媒体により実現されるデータであり、
前記最適な変数順序に従って前記ＢＤＤのｎ個の変数をリオーダするステップは、前記非一時的なコンピュータ可読記憶媒体により実現される前記ＢＤＤの１以上のデータを変換する、付記１記載の方法。
（付記７）
前記ＢＤＤにより表現される関数は、医療センサにより収集されるデータを表現する、付記１記載の方法。
（付記８）
電子回路の設計は、前記ＢＤＤにより表現される関数を実現する、付記１記載の方法。
（付記９）
前記ＢＤＤにより表現される関数は、電子回路が充足すべき前記電子回路の性質を規定する、付記１記載の方法。
（付記１０）
前記ＢＤＤにより表現される関数は、システムのフォーマルベリフィケーションに使用される１以上の遷移関係又は１以上の到達可能な状態空間を規定する、付記１記載の方法。
（付記１１）
１以上のプロセッサにより実行可能な命令を有するメモリと、
前記メモリに接続され、前記命令を実行するよう動作可能な前記１以上のプロセッサと、
を有するシステムであって、
前記１以上のプロセッサは、前記命令が実行されると、
ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスするステップと、
前記ｎ個の変数を、各グループが
【０１８１】
【数５８】
0005987289.tif 000060
個の順序付けされた集合を有する
【０１８２】
【数５９】
0005987289.tif 000061
個のグループに分離するステップと、
前記
【０１８３】
【数６０】
0005987289.tif 000062
個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの
【０１８４】
【数６１】
0005987289.tif 000063
個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定するステップと、
前記
【０１８５】
【数６２】
0005987289.tif 000064
個のグループに対応する
【０１８６】
【数６３】
0005987289.tif 000065
個のローカルに最適な変数順序から、
【０１８７】
【数６４】
0005987289.tif 000066
個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択するステップと、
を実行するよう動作可能であり、
ｎが偶数であるとき、前記
【０１８８】
【数６５】
0005987289.tif 000067
個のグループのそれぞれの前記
【０１８９】
【数６６】
0005987289.tif 000068
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、
ｎが奇数であるとき、前記
【０１９０】
【数６７】
0005987289.tif 000069
個のグループのそれぞれの第１集合を除く前記
【０１９１】
【数６８】
0005987289.tif 000070
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記
【０１９２】
【数６９】
0005987289.tif 000071
個のグループのそれぞれにおける前記第１集合は、前記ｎ個の変数の１個を有し、前記
【０１９３】
【数７０】
0005987289.tif 000072
個のグループにおける前記グループの
【０１９４】
【数７１】
0005987289.tif 000073
個の順序付けされた集合において同一位置の順序を有するシステム。
（付記１２）
前記
【０１９５】
【数７２】
0005987289.tif 000074
個のグループに対応する
【０１９６】
【数７３】
0005987289.tif 000075
個のローカルに最適な変数順序を決定するステップは、高々
【０１９７】
【数７４】
0005987289.tif 000076
個のレイヤスワップの繰り返しを要する、付記１１記載のシステム。
（付記１３）
前記
【０１９８】
【数７５】
0005987289.tif 000077
個のグループのそれぞれにおける前記第１集合は、前記グループの
【０１９９】
【数７６】
0005987289.tif 000078
個の順序付けされた集合における最初の位置の順序を有する、付記１１記載のシステム。
（付記１４）
前記
【０２００】
【数７７】
0005987289.tif 000079
個のグループのそれぞれにおける前記第１集合は、前記グループの
【０２０１】
【数７８】
0005987289.tif 000080
個の順序付けされた集合における最後の位置の順序を有する、付記１１記載のシステム。
（付記１５）
前記ＢＤＤの最適な変数順序に従って前記ＢＤＤのｎ個の変数をリオーダするステップをさらに有する、付記１１記載のシステム。
（付記１６）
前記ＢＤＤは、非一時的なコンピュータ可読記憶媒体により実現されるデータであり、
前記最適な変数順序に従って前記ＢＤＤのｎ個の変数をリオーダするステップは、前記非一時的なコンピュータ可読記憶媒体により実現される前記ＢＤＤの１以上のデータを変換する、付記１１記載のシステム。
（付記１７）
前記ＢＤＤにより表現される関数は、医療センサにより収集されるデータを表現する、付記１１記載のシステム。
（付記１８）
電子回路の設計は、前記ＢＤＤにより表現される関数を実現する、付記１１記載のシステム。
（付記１９）
前記ＢＤＤにより表現される関数は、電子回路が充足すべき前記電子回路の性質を規定する、付記１１記載のシステム。
（付記２０）
前記ＢＤＤにより表現される関数は、システムのフォーマルベリフィケーションに使用される１以上の遷移関係又は１以上の到達可能な状態空間を規定する、付記１１記載のシステム。
（付記２１）
ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスするステップと、
前記ｎ個の変数を、各グループが
【０２０２】
【数７９】
0005987289.tif 000081
個の順序付けされた集合を有する
【０２０３】
【数８０】
0005987289.tif 000082
個のグループに分離するステップと、
前記
【０２０４】
【数８１】
0005987289.tif 000083
個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの
【０２０５】
【数８２】
0005987289.tif 000084
個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定するステップと、
前記
【０２０６】
【数８３】
0005987289.tif 000085
個のグループに対応する
【０２０７】
【数８４】
0005987289.tif 000086
個のローカルに最適な変数順序から、
【０２０８】
【数８５】
0005987289.tif 000087
個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択するステップと、
を１以上のコンピュータシステムに実行させるソフトウェアを格納する非一時的なコンピュータ可読記憶媒体であって、
ｎが偶数であるとき、前記
【０２０９】
【数８６】
0005987289.tif 000088
個のグループのそれぞれの前記
【０２１０】
【数８７】
0005987289.tif 000089
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、
ｎが奇数であるとき、前記
【０２１１】
【数８８】
0005987289.tif 000090
個のグループのそれぞれの第１集合を除く前記
【０２１２】
【数８９】
0005987289.tif 000091
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記
【０２１３】
【数９０】
0005987289.tif 000092
個のグループのそれぞれにおける前記第１集合は、前記ｎ個の変数の１個を有し、前記
【０２１４】
【数９１】
0005987289.tif 000093
個のグループにおける前記グループの
【０２１５】
【数９２】
0005987289.tif 000094
個の順序付けされた集合において同一位置の順序を有する記憶媒体。
（付記２２）
前記
【０２１６】
【数９３】
0005987289.tif 000095
個のグループに対応する
【０２１７】
【数９４】
0005987289.tif 000096
個のローカルに最適な変数順序を決定するステップは、高々
【０２１８】
【数９５】
0005987289.tif 000097
個のレイヤスワップの繰り返しを要する、付記２１記載の記憶媒体。
（付記２３）
前記
【０２１９】
【数９６】
0005987289.tif 000098
個のグループのそれぞれにおける前記第１集合は、前記グループの
【０２２０】
【数９７】
0005987289.tif 000099
個の順序付けされた集合における最初の位置の順序を有する、付記２１記載の記憶媒体。
（付記２４）
前記
【０２２１】
【数９８】
0005987289.tif 000100
個のグループのそれぞれにおける前記第１集合は、前記グループの
【０２２２】
【数９９】
0005987289.tif 000101
個の順序付けされた集合における最後の位置の順序を有する、付記２１記載の記憶媒体。
（付記２５）
前記ＢＤＤの最適な変数順序に従って前記ＢＤＤのｎ個の変数をリオーダするステップをさらに有する、付記２１記載の記憶媒体。
（付記２６）
前記ＢＤＤは、非一時的なコンピュータ可読記憶媒体により実現されるデータであり、
前記最適な変数順序に従って前記ＢＤＤのｎ個の変数をリオーダするステップは、前記非一時的なコンピュータ可読記憶媒体により実現される前記ＢＤＤの１以上のデータを変換する、付記２１記載の記憶媒体。
（付記２７）
前記ＢＤＤにより表現される関数は、医療センサにより収集されるデータを表現する、付記２１記載の記憶媒体。
（付記２８）
電子回路の設計は、前記ＢＤＤにより表現される関数を実現する、付記２１記載の記憶媒体。
（付記２９）
前記ＢＤＤにより表現される関数は、電子回路が充足すべき前記電子回路の性質を規定する、付記２１記載の記憶媒体。
（付記３０）
前記ＢＤＤにより表現される関数は、システムのフォーマルベリフィケーションに使用される１以上の遷移関係又は１以上の到達可能な状態空間を規定する、付記２１記載の記憶媒体。
（付記３１）
ｎ個（ｎ≧２）の変数を有する関数を表現する二分決定図（ＢＤＤ）であって、前記ｎ個の変数にそれぞれ対応するｎ個のレイヤを有するＢＤＤにアクセスする手段と、
前記ｎ個の変数を、各グループが
【０２２３】
【数１００】
0005987289.tif 000102
個の順序付けされた集合を有する
【０２２４】
【数１０１】
0005987289.tif 000103
個のグループに分離する手段と、
前記
【０２２５】
【数１０２】
0005987289.tif 000104
個のグループのそれぞれについて、前記グループ内で取得される前記ＢＤＤの
【０２２６】
【数１０３】
0005987289.tif 000105
個の異なる変数順序において最小のサイズをもたらすローカルに最適な変数順序を決定する手段と、
前記
【０２２７】
【数１０４】
0005987289.tif 000106
個のグループに対応する
【０２２８】
【数１０５】
0005987289.tif 000107
個のローカルに最適な変数順序から、
【０２２９】
【数１０６】
0005987289.tif 000108
個のローカルに最適な変数順序において最小のサイズをもたらす前記ＢＤＤの最適な変数順序を選択する手段と、
を有するシステムであって、
ｎが偶数であるとき、前記
【０２３０】
【数１０７】
0005987289.tif 000109
個のグループのそれぞれの前記
【０２３１】
【数１０８】
0005987289.tif 000110
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、
ｎが奇数であるとき、前記
【０２３２】
【数１０９】
0005987289.tif 000111
個のグループのそれぞれの第１集合を除く前記
【０２３３】
【数１１０】
0005987289.tif 000112
個の順序付けされた集合のそれぞれは、前記ｎ個の変数の２個を有し、前記
【０２３４】
【数１１１】
0005987289.tif 000113
個のグループのそれぞれにおける前記第１集合は、前記ｎ個の変数の１個を有し、前記
【０２３５】
【数１１２】
0005987289.tif 000114
個のグループにおける前記グループの
【０２３６】
【数１１３】
0005987289.tif 000115
個の順序付けされた集合において同一位置の順序を有するシステム。
【符号の説明】
【０２３７】
１００  二分決定図（ＢＤＤ）
１８００  コンピュータシステム
１８０２  プロセッサ
１８０４  メモリ
１８０６  ストレージ
１８０８  入出力（Ｉ／Ｏ）インタフェース
１８１０  通信インタフェース
１８１２  バス
【図１】
0005987289.tif 000158
【図２】
0005987289.tif 000159
【図３】
0005987289.tif 000160
【図４】
0005987289.tif 000161
【図５】
0005987289.tif 000162
【図６】
0005987289.tif 000163
【図７】
0005987289.tif 000164
【図８】
0005987289.tif 000165
【図９】
0005987289.tif 000166
【図１０】
0005987289.tif 000167
【図１１Ａ】
0005987289.tif 000168
【図１１Ｂ】
0005987289.tif 000169
【図１２Ａ】
0005987289.tif 000170
【図１２Ｂ】
0005987289.tif 000171
【図１２Ｃ】
0005987289.tif 000172
【図１２Ｄ】
0005987289.tif 000173
【図１２Ｅ】
0005987289.tif 000174
【図１２Ｆ】
0005987289.tif 000175
【図１２Ｇ】
0005987289.tif 000176
【図１２Ｈ】
0005987289.tif 000177
【図１２Ｉ】
0005987289.tif 000178
【図１２Ｊ】
0005987289.tif 000179
【図１２Ｋ】
0005987289.tif 000180
【図１２Ｌ】
0005987289.tif 000181
【図１２Ｍ】
0005987289.tif 000182
【図１２Ｎ】
0005987289.tif 000183
【図１２Ｏ】
0005987289.tif 000184
【図１２Ｐ】
0005987289.tif 000185
【図１２Ｑ】
0005987289.tif 000186
【図１２Ｒ】
0005987289.tif 000187
【図１２Ｓ】
0005987289.tif 000188
【図１２Ｔ】
0005987289.tif 000189
【図１２Ｕ】
0005987289.tif 000190
【図１２Ｖ】
0005987289.tif 000191
【図１２Ｗ】
0005987289.tif 000192
【図１２Ｘ】
0005987289.tif 000193
【図１２Ｙ】
0005987289.tif 000194
【図１２Ｚ】
0005987289.tif 000195
【図１３Ａ】
0005987289.tif 000196
【図１３Ｂ】
0005987289.tif 000197
【図１４Ａ】
0005987289.tif 000198
【図１４Ｂ】
0005987289.tif 000199
【図１５Ａ】
0005987289.tif 000200
【図１５Ｂ】
0005987289.tif 000201
【図１６】
0005987289.tif 000202
【図１７Ａ】
0005987289.tif 000203
【図１７Ｂ】
0005987289.tif 000204
【図１８】
0005987289.tif 000205