binary-decision-diagram 3.2.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +211 -31
- package/dist/cjs/src/abstract-node.js +7 -4
- package/dist/cjs/src/abstract-node.js.map +1 -1
- package/dist/cjs/src/branches.d.ts +4 -1
- package/dist/cjs/src/branches.js +10 -9
- package/dist/cjs/src/branches.js.map +1 -1
- package/dist/cjs/src/create-bdd-from-truth-table.js +1 -2
- package/dist/cjs/src/create-bdd-from-truth-table.js.map +1 -1
- package/dist/cjs/src/ensure-correct-bdd.js +2 -3
- package/dist/cjs/src/ensure-correct-bdd.js.map +1 -1
- package/dist/cjs/src/fill-truth-table.js +1 -2
- package/dist/cjs/src/fill-truth-table.js.map +1 -1
- package/dist/cjs/src/find-similar-node.js +1 -2
- package/dist/cjs/src/find-similar-node.js.map +1 -1
- package/dist/cjs/src/index.d.ts +2 -1
- package/dist/cjs/src/index.es5.js +17 -7
- package/dist/cjs/src/index.es5.js.map +1 -1
- package/dist/cjs/src/index.js +2 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/internal-node.js +6 -3
- package/dist/cjs/src/internal-node.js.map +1 -1
- package/dist/cjs/src/optimize-brute-force.js +10 -12
- package/dist/cjs/src/optimize-brute-force.js.map +1 -1
- package/dist/cjs/src/ordering/build-bdd.d.ts +13 -0
- package/dist/cjs/src/ordering/build-bdd.js +64 -0
- package/dist/cjs/src/ordering/build-bdd.js.map +1 -0
- package/dist/cjs/src/ordering/dense-truth-table.d.ts +42 -0
- package/dist/cjs/src/ordering/dense-truth-table.js +125 -0
- package/dist/cjs/src/ordering/dense-truth-table.js.map +1 -0
- package/dist/cjs/src/ordering/exact-cost-ordering.d.ts +91 -0
- package/dist/cjs/src/ordering/exact-cost-ordering.js +351 -0
- package/dist/cjs/src/ordering/exact-cost-ordering.js.map +1 -0
- package/dist/cjs/src/ordering/exact-ordering.d.ts +89 -0
- package/dist/cjs/src/ordering/exact-ordering.js +260 -0
- package/dist/cjs/src/ordering/exact-ordering.js.map +1 -0
- package/dist/cjs/src/ordering/index.d.ts +22 -0
- package/dist/cjs/src/ordering/index.js +38 -0
- package/dist/cjs/src/ordering/index.js.map +1 -0
- package/dist/cjs/src/ordering/int-pair-map.d.ts +20 -0
- package/dist/cjs/src/ordering/int-pair-map.js +85 -0
- package/dist/cjs/src/ordering/int-pair-map.js.map +1 -0
- package/dist/cjs/src/ordering/local-search.d.ts +114 -0
- package/dist/cjs/src/ordering/local-search.js +317 -0
- package/dist/cjs/src/ordering/local-search.js.map +1 -0
- package/dist/cjs/src/ordering/optimize-ordering.d.ts +153 -0
- package/dist/cjs/src/ordering/optimize-ordering.js +406 -0
- package/dist/cjs/src/ordering/optimize-ordering.js.map +1 -0
- package/dist/cjs/src/ordering/ordering-evaluator.d.ts +198 -0
- package/dist/cjs/src/ordering/ordering-evaluator.js +384 -0
- package/dist/cjs/src/ordering/ordering-evaluator.js.map +1 -0
- package/dist/cjs/src/ordering/shared-diagram.d.ts +85 -0
- package/dist/cjs/src/ordering/shared-diagram.js +295 -0
- package/dist/cjs/src/ordering/shared-diagram.js.map +1 -0
- package/dist/cjs/src/packed/index.d.ts +2 -0
- package/dist/cjs/src/{minimal-string → packed}/index.js +2 -5
- package/dist/cjs/src/packed/index.js.map +1 -0
- package/dist/cjs/src/packed/packed-bdd-base64-string.d.ts +3 -0
- package/dist/cjs/src/packed/packed-bdd-base64-string.js +46 -0
- package/dist/cjs/src/packed/packed-bdd-base64-string.js.map +1 -0
- package/dist/cjs/src/packed/packed-bdd.d.ts +13 -0
- package/dist/cjs/src/packed/packed-bdd.js +70 -0
- package/dist/cjs/src/packed/packed-bdd.js.map +1 -0
- package/dist/cjs/src/root-node.d.ts +1 -2
- package/dist/cjs/src/root-node.js +4 -9
- package/dist/cjs/src/root-node.js.map +1 -1
- package/dist/cjs/src/types.d.ts +0 -12
- package/dist/cjs/src/util.js +29 -21
- package/dist/cjs/src/util.js.map +1 -1
- package/dist/esm/src/abstract-node.js +7 -4
- package/dist/esm/src/abstract-node.js.map +1 -1
- package/dist/esm/src/branches.d.ts +4 -1
- package/dist/esm/src/branches.js +8 -7
- package/dist/esm/src/branches.js.map +1 -1
- package/dist/esm/src/create-bdd-from-truth-table.js.map +1 -1
- package/dist/esm/src/index.d.ts +2 -1
- package/dist/esm/src/index.js +2 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/internal-node.js +7 -4
- package/dist/esm/src/internal-node.js.map +1 -1
- package/dist/esm/src/optimize-brute-force.js +5 -7
- package/dist/esm/src/optimize-brute-force.js.map +1 -1
- package/dist/esm/src/ordering/build-bdd.d.ts +13 -0
- package/dist/esm/src/ordering/build-bdd.js +61 -0
- package/dist/esm/src/ordering/build-bdd.js.map +1 -0
- package/dist/esm/src/ordering/dense-truth-table.d.ts +42 -0
- package/dist/esm/src/ordering/dense-truth-table.js +117 -0
- package/dist/esm/src/ordering/dense-truth-table.js.map +1 -0
- package/dist/esm/src/ordering/exact-cost-ordering.d.ts +91 -0
- package/dist/esm/src/ordering/exact-cost-ordering.js +347 -0
- package/dist/esm/src/ordering/exact-cost-ordering.js.map +1 -0
- package/dist/esm/src/ordering/exact-ordering.d.ts +89 -0
- package/dist/esm/src/ordering/exact-ordering.js +256 -0
- package/dist/esm/src/ordering/exact-ordering.js.map +1 -0
- package/dist/esm/src/ordering/index.d.ts +22 -0
- package/dist/esm/src/ordering/index.js +17 -0
- package/dist/esm/src/ordering/index.js.map +1 -0
- package/dist/esm/src/ordering/int-pair-map.d.ts +20 -0
- package/dist/esm/src/ordering/int-pair-map.js +81 -0
- package/dist/esm/src/ordering/int-pair-map.js.map +1 -0
- package/dist/esm/src/ordering/local-search.d.ts +114 -0
- package/dist/esm/src/ordering/local-search.js +308 -0
- package/dist/esm/src/ordering/local-search.js.map +1 -0
- package/dist/esm/src/ordering/optimize-ordering.d.ts +153 -0
- package/dist/esm/src/ordering/optimize-ordering.js +399 -0
- package/dist/esm/src/ordering/optimize-ordering.js.map +1 -0
- package/dist/esm/src/ordering/ordering-evaluator.d.ts +198 -0
- package/dist/esm/src/ordering/ordering-evaluator.js +377 -0
- package/dist/esm/src/ordering/ordering-evaluator.js.map +1 -0
- package/dist/esm/src/ordering/shared-diagram.d.ts +85 -0
- package/dist/esm/src/ordering/shared-diagram.js +289 -0
- package/dist/esm/src/ordering/shared-diagram.js.map +1 -0
- package/dist/esm/src/packed/index.d.ts +2 -0
- package/dist/esm/src/packed/index.js +3 -0
- package/dist/esm/src/packed/index.js.map +1 -0
- package/dist/esm/src/packed/packed-bdd-base64-string.d.ts +3 -0
- package/dist/esm/src/packed/packed-bdd-base64-string.js +42 -0
- package/dist/esm/src/packed/packed-bdd-base64-string.js.map +1 -0
- package/dist/esm/src/packed/packed-bdd.d.ts +13 -0
- package/dist/esm/src/packed/packed-bdd.js +66 -0
- package/dist/esm/src/packed/packed-bdd.js.map +1 -0
- package/dist/esm/src/root-node.d.ts +1 -2
- package/dist/esm/src/root-node.js +5 -10
- package/dist/esm/src/root-node.js.map +1 -1
- package/dist/esm/src/types.d.ts +0 -12
- package/dist/esm/src/util.js +14 -5
- package/dist/esm/src/util.js.map +1 -1
- package/docs/variable-ordering.md +306 -0
- package/package.json +15 -12
- package/src/abstract-node.ts +7 -5
- package/src/branches.ts +9 -7
- package/src/create-bdd-from-truth-table.ts +1 -1
- package/src/index.ts +2 -1
- package/src/internal-node.ts +7 -4
- package/src/optimize-brute-force.ts +5 -7
- package/src/ordering/build-bdd.ts +70 -0
- package/src/ordering/dense-truth-table.ts +161 -0
- package/src/ordering/exact-cost-ordering.ts +425 -0
- package/src/ordering/exact-ordering.ts +317 -0
- package/src/ordering/index.ts +57 -0
- package/src/ordering/int-pair-map.ts +85 -0
- package/src/ordering/local-search.ts +369 -0
- package/src/ordering/optimize-ordering.ts +570 -0
- package/src/ordering/ordering-evaluator.ts +479 -0
- package/src/ordering/shared-diagram.ts +310 -0
- package/src/packed/index.ts +2 -0
- package/src/packed/packed-bdd-base64-string.ts +47 -0
- package/src/packed/packed-bdd.ts +98 -0
- package/src/root-node.ts +8 -17
- package/src/types.ts +0 -18
- package/src/util.ts +15 -6
- package/dist/cjs/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
- package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js +0 -60
- package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
- package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
- package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js +0 -24
- package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
- package/dist/cjs/src/minimal-string/index.d.ts +0 -5
- package/dist/cjs/src/minimal-string/index.js.map +0 -1
- package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
- package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js +0 -58
- package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
- package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
- package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js +0 -21
- package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
- package/dist/cjs/src/minimal-string/string-format.d.ts +0 -9
- package/dist/cjs/src/minimal-string/string-format.js +0 -61
- package/dist/cjs/src/minimal-string/string-format.js.map +0 -1
- package/dist/esm/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
- package/dist/esm/src/minimal-string/bdd-to-minimal-string.js +0 -55
- package/dist/esm/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
- package/dist/esm/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
- package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js +0 -19
- package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
- package/dist/esm/src/minimal-string/index.d.ts +0 -5
- package/dist/esm/src/minimal-string/index.js +0 -6
- package/dist/esm/src/minimal-string/index.js.map +0 -1
- package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
- package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js +0 -54
- package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
- package/dist/esm/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
- package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js +0 -17
- package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
- package/dist/esm/src/minimal-string/string-format.d.ts +0 -9
- package/dist/esm/src/minimal-string/string-format.js +0 -54
- package/dist/esm/src/minimal-string/string-format.js.map +0 -1
- package/src/minimal-string/bdd-to-minimal-string.ts +0 -72
- package/src/minimal-string/bdd-to-simple-bdd.ts +0 -31
- package/src/minimal-string/index.ts +0 -5
- package/src/minimal-string/minimal-string-to-simple-bdd.ts +0 -67
- package/src/minimal-string/resolve-with-simple-bdd.ts +0 -25
- package/src/minimal-string/string-format.ts +0 -67
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- FIX `decimalToPaddedBinary()` cut off all bits above 32, so `decimalToPaddedBinary(2 ** 32, 33)` returned only zeros.
|
|
6
|
+
- FIX `getNextStateSet()` returned wrong state sets for keys with more than 32 characters and lost precision for keys with more than 53 characters.
|
package/README.md
CHANGED
|
@@ -1,22 +1,90 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Binary Decision Diagram (BDD) library for JavaScript and TypeScript
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/binary-decision-diagram)
|
|
4
|
+
[](https://www.npmjs.com/package/binary-decision-diagram)
|
|
5
|
+
[](./LICENSE)
|
|
4
6
|
|
|
7
|
+
**binary-decision-diagram** is a JavaScript and TypeScript library to **create**, **minimize** and **optimize** binary decision diagrams (BDDs).
|
|
8
|
+
Build a reduced ordered binary decision diagram (ROBDD) or multi-terminal BDD (MTBDD) from a truth table,
|
|
9
|
+
find a good variable ordering, serialize it to a tiny string and resolve values with it in the browser or in Node.js.
|
|
5
10
|
|
|
11
|
+
## Table of contents
|
|
6
12
|
|
|
7
|
-
|
|
13
|
+
- [What is a binary decision diagram?](#what-is-a-binary-decision-diagram)
|
|
14
|
+
- [Features](#features)
|
|
15
|
+
- [Installation](#installation)
|
|
16
|
+
- [Quick start](#quick-start)
|
|
17
|
+
- [API](#api)
|
|
18
|
+
- [Use cases](#use-cases)
|
|
19
|
+
- [Further reading](#further-reading)
|
|
8
20
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
21
|
+
## What is a binary decision diagram?
|
|
22
|
+
|
|
23
|
+
A binary decision diagram (BDD) is a data structure that represents boolean functions in a compact way.
|
|
24
|
+
It is a directed acyclic graph where every internal node tests one boolean variable and every leaf holds a result value.
|
|
25
|
+
By merging identical subgraphs and removing redundant tests (the *reduction* and *elimination* rules),
|
|
26
|
+
a decision tree with `2^n` leaves often shrinks to a few nodes. This is called a reduced ordered binary decision diagram (ROBDD).
|
|
27
|
+
|
|
28
|
+
The size of a BDD depends heavily on the **variable ordering**, the order in which the boolean functions are tested.
|
|
29
|
+
Finding a good ordering is the main way to make a BDD small, and this library ships a fast deterministic optimizer for it.
|
|
30
|
+
|
|
31
|
+
This library builds multi-terminal BDDs: the leaves can hold any number, not only `true` and `false`.
|
|
32
|
+
That makes it a good fit to compile large truth tables or decision tables into small, fast lookup structures.
|
|
12
33
|
|
|
34
|
+
## Features
|
|
13
35
|
|
|
14
|
-
|
|
36
|
+
- Create a BDD from a truth table (`Map<string, number>`)
|
|
37
|
+
- Minimize it with the reduction and elimination rules (ROBDD)
|
|
38
|
+
- Multi-terminal leaves: map every input combination to a number, not only to a boolean
|
|
39
|
+
- Deterministic variable ordering optimization, with proven optimal results for small tables
|
|
40
|
+
- Optimize for the expected runtime cost of the boolean functions, not only for the node count
|
|
41
|
+
- Don't-care values to remove rows that can never occur
|
|
42
|
+
- Pack a BDD into a typed array, ship it as a short base64 string and resolve it without parsing, ideal for small client-side bundles
|
|
43
|
+
- Written in TypeScript, ships ESM and CommonJS builds with type definitions
|
|
44
|
+
|
|
45
|
+
## Installation
|
|
15
46
|
|
|
16
47
|
```bash
|
|
17
48
|
npm install binary-decision-diagram --save
|
|
18
49
|
```
|
|
19
50
|
|
|
51
|
+
## Quick start
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import {
|
|
55
|
+
createBddFromTruthTable,
|
|
56
|
+
bddToPackedBdd,
|
|
57
|
+
packedBddToBase64String,
|
|
58
|
+
packedBddFromBase64String,
|
|
59
|
+
resolveWithPackedBdd,
|
|
60
|
+
type ResolverFunctions
|
|
61
|
+
} from 'binary-decision-diagram';
|
|
62
|
+
|
|
63
|
+
// every key is one combination of the boolean functions, the value is the result
|
|
64
|
+
const truthTable = new Map<string, number>();
|
|
65
|
+
truthTable.set('00', 1);
|
|
66
|
+
truthTable.set('01', 3);
|
|
67
|
+
truthTable.set('10', 2);
|
|
68
|
+
truthTable.set('11', 1);
|
|
69
|
+
|
|
70
|
+
const bdd = createBddFromTruthTable(truthTable);
|
|
71
|
+
bdd.minimize();
|
|
72
|
+
|
|
73
|
+
// one boolean function per character of the truth table keys
|
|
74
|
+
const resolvers: ResolverFunctions<{ a: boolean; b: boolean }> = {
|
|
75
|
+
0: (input) => input.a,
|
|
76
|
+
1: (input) => input.b
|
|
77
|
+
};
|
|
78
|
+
bdd.resolve(resolvers, { a: true, b: false }); // 2
|
|
79
|
+
|
|
80
|
+
// store the BDD as a small string and resolve it without creating the nodes again
|
|
81
|
+
const packedBddString = packedBddToBase64String(bddToPackedBdd(bdd));
|
|
82
|
+
const packedBdd = packedBddFromBase64String(packedBddString);
|
|
83
|
+
resolveWithPackedBdd(packedBdd, resolvers, { a: true, b: false }); // 2
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## API
|
|
87
|
+
|
|
20
88
|
### createBddFromTruthTable()
|
|
21
89
|
|
|
22
90
|
Creates a BDD from a truth table.
|
|
@@ -24,10 +92,10 @@ The Truth-Table is a `Map<string, number>` where the string is a truth-set like
|
|
|
24
92
|
|
|
25
93
|
```typescript
|
|
26
94
|
const truthTable = new Map();
|
|
27
|
-
truthTable.
|
|
28
|
-
truthTable.
|
|
29
|
-
truthTable.
|
|
30
|
-
truthTable.
|
|
95
|
+
truthTable.set('00', 1);
|
|
96
|
+
truthTable.set('01', 3);
|
|
97
|
+
truthTable.set('10', 2);
|
|
98
|
+
truthTable.set('11', 1);
|
|
31
99
|
|
|
32
100
|
const bdd = createBddFromTruthTable(
|
|
33
101
|
truthTable
|
|
@@ -83,38 +151,138 @@ const bddValue = bdd.resolve(
|
|
|
83
151
|
); // returns a value from the truth table
|
|
84
152
|
```
|
|
85
153
|
|
|
86
|
-
###
|
|
154
|
+
### Packed BDD (for production)
|
|
155
|
+
|
|
156
|
+
The recommended way to ship an optimized BDD to production is the **packed base64 string**.
|
|
157
|
+
|
|
158
|
+
`bddToPackedBdd()` stores the whole BDD in a single typed array (`Uint8Array`, `Uint16Array` or `Uint32Array`, the narrowest that fits).
|
|
159
|
+
Each non-leaf node takes three entries `[level, ref0, ref1]`, so a BDD with less than ~250 nodes only needs 3 bytes per node.
|
|
160
|
+
`resolveWithPackedBdd()` walks directly over that array: no JavaScript objects have to be created on startup
|
|
161
|
+
and resolving is fast.
|
|
162
|
+
`packedBddToBase64String()` turns the typed array into a short base64 string that you can put into your source code.
|
|
163
|
+
It only contains ASCII characters, so it never has to be escaped by bundlers or minifiers.
|
|
164
|
+
The leaf values must be non-negative integers.
|
|
165
|
+
|
|
166
|
+
**1. At build time**, create the BDD, pack it and write the string into a source file:
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
import * as fs from 'fs';
|
|
170
|
+
import { bddToPackedBdd, packedBddToBase64String } from 'binary-decision-diagram';
|
|
171
|
+
|
|
172
|
+
const packedBddString = packedBddToBase64String(bddToPackedBdd(bdd));
|
|
173
|
+
fs.writeFileSync(
|
|
174
|
+
'src/bdd.generated.ts',
|
|
175
|
+
`export const PACKED_BDD_STRING = '${packedBddString}';\n`
|
|
176
|
+
);
|
|
177
|
+
```
|
|
87
178
|
|
|
88
|
-
|
|
89
|
-
|
|
179
|
+
**2. At runtime**, decode the string once with `packedBddFromBase64String()` and resolve with `resolveWithPackedBdd()`.
|
|
180
|
+
Decoding uses the native `Uint8Array.fromBase64()` (or `atob()` where it does not exist yet) and takes a few microseconds.
|
|
181
|
+
Do it lazily so it only runs when the BDD is used the first time:
|
|
90
182
|
|
|
91
183
|
```typescript
|
|
92
|
-
|
|
184
|
+
import {
|
|
185
|
+
packedBddFromBase64String,
|
|
186
|
+
resolveWithPackedBdd,
|
|
187
|
+
PackedBdd,
|
|
188
|
+
ResolverFunctions
|
|
189
|
+
} from 'binary-decision-diagram';
|
|
190
|
+
import { PACKED_BDD_STRING } from './bdd.generated';
|
|
191
|
+
|
|
192
|
+
let packedBdd: PackedBdd | undefined;
|
|
193
|
+
export function resolveInput(resolvers: ResolverFunctions, input: any): number {
|
|
194
|
+
if (!packedBdd) {
|
|
195
|
+
packedBdd = packedBddFromBase64String(PACKED_BDD_STRING);
|
|
196
|
+
}
|
|
197
|
+
return resolveWithPackedBdd(packedBdd, resolvers, input);
|
|
198
|
+
}
|
|
93
199
|
```
|
|
94
200
|
|
|
95
|
-
|
|
201
|
+
**Migrating from version 3**: the minimal string and the `SimpleBdd` were removed.
|
|
202
|
+
Replace `bddToMinimalString()` with `packedBddToBase64String(bddToPackedBdd(bdd))`,
|
|
203
|
+
`minimalStringToSimpleBdd()` with `packedBddFromBase64String()`,
|
|
204
|
+
`resolveWithSimpleBdd()` with `resolveWithPackedBdd()`
|
|
205
|
+
and `bdd.toSimpleBdd()` with `bddToPackedBdd(bdd)`.
|
|
206
|
+
An old minimal string cannot be read anymore, create the BDD again (for example with `createBddWithOrdering()`) and pack it.
|
|
207
|
+
|
|
208
|
+
### optimizeOrdering()
|
|
209
|
+
|
|
210
|
+
Deterministically finds a variable ordering (the order in which the boolean functions are tested) that gives a small BDD and returns the minimized BDD for it.
|
|
211
|
+
Unlike `optimizeBruteForce()` it does not shuffle randomly: the same truth table always gives the same result,
|
|
212
|
+
it needs seconds instead of hours, and for small enough tables it proves that no better ordering exists.
|
|
213
|
+
How it works is described in [docs/variable-ordering.md](./docs/variable-ordering.md).
|
|
96
214
|
|
|
97
|
-
|
|
215
|
+
The truth table must contain all `2^n` rows (`n` = length of the keys, at most 30).
|
|
216
|
+
Fill the rows that can never occur with a don't-care value first.
|
|
217
|
+
Time and memory grow with `2^n`: tables with 17 or 18 boolean functions take a few seconds
|
|
218
|
+
(up to about 10 seconds with `functionCosts`), 21 functions take about half a minute and 0.5 GB.
|
|
219
|
+
The computation runs synchronously and blocks the event loop while it runs.
|
|
98
220
|
|
|
99
221
|
```typescript
|
|
100
|
-
const
|
|
222
|
+
const dontCareValue = 42; // value of the rows that can never occur at runtime
|
|
223
|
+
const truthTable: TruthTable = new Map();
|
|
224
|
+
truthTable.set('00000', 1);
|
|
225
|
+
// ... the known rows
|
|
226
|
+
fillTruthTable(truthTable, 5, dontCareValue);
|
|
227
|
+
|
|
228
|
+
const result = await optimizeOrdering({
|
|
229
|
+
truthTable,
|
|
230
|
+
// (optional) the don't-care rows are resolved like removeIrrelevantLeafNodes() does it:
|
|
231
|
+
// a branch that only leads to don't-care rows is replaced by its sibling
|
|
232
|
+
dontCareValue,
|
|
233
|
+
// (optional) orderings to start from, for example the result of a previous run
|
|
234
|
+
initialOrderings: [[3, 0, 1, 2, 4]],
|
|
235
|
+
// (optional) 'auto' (default) runs the exact search when there are at most 20 boolean functions
|
|
236
|
+
// and the BDD found by the local search has at most 5000 nodes, true always runs it, false never
|
|
237
|
+
exact: 'auto',
|
|
238
|
+
// (optional) called whenever a better ordering was found
|
|
239
|
+
onImprovement: ({ nodeCount, phase }) => console.log(phase + ': ' + nodeCount + ' nodes')
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
result.bdd; // the minimized BDD, ready for bddToPackedBdd()
|
|
243
|
+
result.ordering; // ordering[level] = index of the boolean function tested on that level
|
|
244
|
+
result.nodeCount; // result.bdd.countNodes()
|
|
245
|
+
result.optimal; // true when it is proven that no ordering gives fewer nodes for result.truthTable
|
|
246
|
+
result.truthTable; // the truth table with the don't-care rows resolved, same keys as the input, in row order
|
|
101
247
|
```
|
|
102
248
|
|
|
103
|
-
|
|
249
|
+
With don't-care rows, `optimal` refers to the way the don't-care rows were resolved in `result.truthTable`.
|
|
250
|
+
Which values the don't-care rows get is decided by a heuristic, so another ordering can occasionally reach a smaller BDD
|
|
251
|
+
by resolving them differently. For the same reason, rebuild the BDD from `result.truthTable`,
|
|
252
|
+
not from the input table: `createBddWithOrdering(result.truthTable, result.ordering)`.
|
|
104
253
|
|
|
105
|
-
|
|
254
|
+
When the boolean functions have different runtime costs, pass them and the optimizer
|
|
255
|
+
minimizes the expected cost of one `resolve()` call (the costs of the functions that are
|
|
256
|
+
actually called on the way from the root to the leaf, averaged over the rows) instead of the amount of nodes.
|
|
257
|
+
Expensive functions then end up on the levels where they are needed least often.
|
|
106
258
|
|
|
107
259
|
```typescript
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
260
|
+
const result = await optimizeOrdering({
|
|
261
|
+
truthTable,
|
|
262
|
+
dontCareValue,
|
|
263
|
+
// cost of calling each boolean function, one entry per character of the truth table keys
|
|
264
|
+
functionCosts: [1, 1, 50, 1, 20],
|
|
265
|
+
// (optional) how often a row occurs at runtime, default: every row that is not a don't-care row equally often
|
|
266
|
+
rowWeight: (key, value) => key.startsWith('1') ? 10 : 1
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
result.expectedCost; // expected cost of one resolve() call
|
|
270
|
+
result.optimal; // true when it is proven that no ordering has a lower expected cost for result.truthTable
|
|
113
271
|
```
|
|
114
272
|
|
|
273
|
+
Among orderings with the same expected cost, fewer nodes are preferred, but this tie-break is not part of the proof.
|
|
274
|
+
|
|
275
|
+
Coming from `optimizeBruteForce()`: instead of `afterBddCreation: bdd => bdd.removeIrrelevantLeafNodes(x)`,
|
|
276
|
+
pass `dontCareValue: x`. The optimizer can only make use of the don't-care rows when it knows about them.
|
|
277
|
+
|
|
278
|
+
Use `findOrdering()` with the same options when you only need the ordering and not the BDD,
|
|
279
|
+
and `createBddWithOrdering(truthTable, ordering, dontCareValue)` to build the minimized BDD for a known ordering
|
|
280
|
+
without going through the full decision tree.
|
|
281
|
+
|
|
115
282
|
### optimizeBruteForce()
|
|
116
283
|
|
|
117
|
-
Optimizes the sorting of the boolean functions
|
|
284
|
+
Optimizes the sorting of the boolean functions by shuffling randomly. Prefer `optimizeOrdering()`, which is deterministic and much faster.
|
|
285
|
+
Returns a promise with the best found BDD.
|
|
118
286
|
|
|
119
287
|
```typescript
|
|
120
288
|
const optimizedResult = await optimizeBruteForce({
|
|
@@ -122,16 +290,28 @@ const optimizedResult = await optimizeBruteForce({
|
|
|
122
290
|
iterations: 10000,
|
|
123
291
|
// hook that runs whenever a bdd is created (optional)
|
|
124
292
|
afterBddCreation: (bdd: RootNode) => {
|
|
125
|
-
bdd.removeIrrelevantLeafNodes(
|
|
293
|
+
bdd.removeIrrelevantLeafNodes(dontCareValue);
|
|
126
294
|
},
|
|
127
295
|
// hook that is triggered whenever a better bdd was found (optional)
|
|
128
296
|
onBetterBdd: (res: OptimisationResult) => {
|
|
129
|
-
const
|
|
130
|
-
console.log('new string: ' +
|
|
131
|
-
console.log('value mapping:');
|
|
132
|
-
console.dir(res.mapping);
|
|
297
|
+
const packedBddString = packedBddToBase64String(bddToPackedBdd(res.bdd));
|
|
298
|
+
console.log('new string: ' + packedBddString);
|
|
133
299
|
},
|
|
134
300
|
// (optional) start with this BDD to optimize. If not set, will create an own one.
|
|
135
301
|
initialBdd: myBdd
|
|
136
302
|
});
|
|
137
303
|
```
|
|
304
|
+
|
|
305
|
+
## Use cases
|
|
306
|
+
|
|
307
|
+
- **Compiling decision tables**: turn a large truth table of business rules or query conditions into a small BDD that needs only a few boolean checks per lookup.
|
|
308
|
+
- **Small client-side bundles**: precompute and optimize the BDD at build time, ship it as a packed base64 string and resolve it with `resolveWithPackedBdd()`.
|
|
309
|
+
- **Event reduction in databases**: [event-reduce](https://github.com/pubkey/event-reduce) uses this library to decide how a query result changes on a write event, which powers the realtime queries of the [RxDB JavaScript Database](https://rxdb.info/).
|
|
310
|
+
|
|
311
|
+
## Further reading
|
|
312
|
+
|
|
313
|
+
- [How the variable ordering optimizer works](./docs/variable-ordering.md)
|
|
314
|
+
- [Introduction on BDDs](https://web.archive.org/web/20110304135553/http://configit.com/fileadmin/Configit/Documents/bdd-eap.pdf)
|
|
315
|
+
- [Presentation on BDDs](https://de.slideshare.net/RajeshYadav49/reduced-ordered-binary-decision-diagram-devi)
|
|
316
|
+
- [Implementation of ROBDD](https://pdfs.semanticscholar.org/788d/ed39ca36300753bcb20c43762972b00f9b80.pdf)
|
|
317
|
+
- [Binary decision diagram on Wikipedia](https://en.wikipedia.org/wiki/Binary_decision_diagram)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractNode = void 0;
|
|
4
4
|
const util_js_1 = require("./util.js");
|
|
5
|
+
const branches_js_1 = require("./branches.js");
|
|
5
6
|
const find_similar_node_js_1 = require("./find-similar-node.js");
|
|
6
7
|
class AbstractNode {
|
|
7
8
|
level;
|
|
@@ -144,10 +145,12 @@ class AbstractNode {
|
|
|
144
145
|
const ownParents = this.parents.getAll();
|
|
145
146
|
const parentsWithStrictEqualBranches = [];
|
|
146
147
|
ownParents.forEach((parent) => {
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
// a parent (the root node) can have this node in both branches
|
|
149
|
+
branches_js_1.BRANCH_KEYS.forEach(branchKey => {
|
|
150
|
+
if (parent.branches.getBranch(branchKey) === this) {
|
|
151
|
+
parent.branches.setBranch(branchKey, other);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
151
154
|
if (parent.branches.areBranchesStrictEqual()) {
|
|
152
155
|
parentsWithStrictEqualBranches.push(parent);
|
|
153
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-node.js","sourceRoot":"","sources":["../../../src/abstract-node.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;
|
|
1
|
+
{"version":3,"file":"abstract-node.js","sourceRoot":"","sources":["../../../src/abstract-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { BooleanString, NonRootNode, NonLeafNode } from './types.js';
|
|
2
2
|
import { AbstractNode } from './abstract-node.js';
|
|
3
|
+
export declare const BRANCH_KEYS: BooleanString[];
|
|
3
4
|
/**
|
|
4
5
|
* represents the branches of a single node
|
|
5
6
|
*/
|
|
6
7
|
export declare class Branches {
|
|
7
8
|
private node;
|
|
8
9
|
deleted: boolean;
|
|
9
|
-
|
|
10
|
+
data: {
|
|
11
|
+
[k in BooleanString]: NonRootNode;
|
|
12
|
+
};
|
|
10
13
|
constructor(node: NonLeafNode);
|
|
11
14
|
setBranch(which: BooleanString, branchNode: NonRootNode): void;
|
|
12
15
|
getKeyOfNode(node: NonRootNode): BooleanString;
|
package/dist/cjs/src/branches.js
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Branches = exports.BRANCH_KEYS = void 0;
|
|
4
|
+
exports.ensureNodesNotStrictEqual = ensureNodesNotStrictEqual;
|
|
5
|
+
exports.BRANCH_KEYS = ['0', '1'];
|
|
4
6
|
/**
|
|
5
7
|
* represents the branches of a single node
|
|
6
8
|
*/
|
|
7
9
|
class Branches {
|
|
8
10
|
node;
|
|
9
11
|
deleted = false;
|
|
10
|
-
|
|
12
|
+
data = {};
|
|
11
13
|
constructor(node) {
|
|
12
14
|
this.node = node;
|
|
13
15
|
}
|
|
14
16
|
setBranch(which, branchNode) {
|
|
15
|
-
const previous = this.
|
|
17
|
+
const previous = this.data[which];
|
|
16
18
|
if (previous === branchNode) {
|
|
17
19
|
return;
|
|
18
20
|
}
|
|
19
21
|
// set new branch
|
|
20
|
-
this.
|
|
22
|
+
this.data[which] = branchNode;
|
|
21
23
|
branchNode.parents.add(this.node);
|
|
22
24
|
}
|
|
23
25
|
getKeyOfNode(node) {
|
|
@@ -32,7 +34,7 @@ class Branches {
|
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
getBranch(which) {
|
|
35
|
-
return this.
|
|
37
|
+
return this.data[which];
|
|
36
38
|
}
|
|
37
39
|
getBothBranches() {
|
|
38
40
|
return [
|
|
@@ -59,11 +61,11 @@ class Branches {
|
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
areBranchesStrictEqual() {
|
|
62
|
-
return this.
|
|
64
|
+
return this.data['0'] === this.data['1'];
|
|
63
65
|
}
|
|
64
66
|
hasEqualBranches() {
|
|
65
|
-
return JSON.stringify(this.
|
|
66
|
-
JSON.stringify(this.
|
|
67
|
+
return JSON.stringify(this.data['0']) ===
|
|
68
|
+
JSON.stringify(this.data['1']);
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
exports.Branches = Branches;
|
|
@@ -72,5 +74,4 @@ function ensureNodesNotStrictEqual(node1, node2) {
|
|
|
72
74
|
throw new Error('cannot have two strict equal branches');
|
|
73
75
|
}
|
|
74
76
|
}
|
|
75
|
-
exports.ensureNodesNotStrictEqual = ensureNodesNotStrictEqual;
|
|
76
77
|
//# sourceMappingURL=branches.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../src/branches.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../src/branches.ts"],"names":[],"mappings":";;;AAkFA,8DAOC;AAtFY,QAAA,WAAW,GAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAa,QAAQ;IAOL;IANL,OAAO,GAAY,KAAK,CAAC;IACzB,IAAI,GAEP,EAAS,CAAC;IAEd,YACY,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;IACzB,CAAC;IAEE,SAAS,CAAC,KAAoB,EAAE,UAAuB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAC9B,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,YAAY,CAAC,IAAiB;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC;QACf,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,KAAoB;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEM,eAAe;QAClB,OAAO;YACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SACtB,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,IAAkB;QACrC,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAC9B,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,iBAAiB,CAAC,EAAU;QAC/B,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAC/B,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;CACJ;AAxED,4BAwEC;AAED,SAAgB,yBAAyB,CACrC,KAAkB,EAClB,KAAkB;IAElB,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createBddFromTruthTable =
|
|
3
|
+
exports.createBddFromTruthTable = createBddFromTruthTable;
|
|
4
4
|
const root_node_js_1 = require("./root-node.js");
|
|
5
5
|
const util_js_1 = require("./util.js");
|
|
6
6
|
const internal_node_js_1 = require("./internal-node.js");
|
|
@@ -34,5 +34,4 @@ function createBddFromTruthTable(truthTable) {
|
|
|
34
34
|
}
|
|
35
35
|
return root;
|
|
36
36
|
}
|
|
37
|
-
exports.createBddFromTruthTable = createBddFromTruthTable;
|
|
38
37
|
//# sourceMappingURL=create-bdd-from-truth-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-bdd-from-truth-table.js","sourceRoot":"","sources":["../../../src/create-bdd-from-truth-table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-bdd-from-truth-table.js","sourceRoot":"","sources":["../../../src/create-bdd-from-truth-table.ts"],"names":[],"mappings":";;AAMA,0DAoDC;AA1DD,iDAA0C;AAC1C,uCAAqC;AACrC,yDAAkD;AAClD,iDAA0C;AAG1C,SAAgB,uBAAuB,CACnC,UAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,uBAAQ,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAGD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,IAAI,QAAQ,GAAgB,IAAI,CAAC;QAEjC,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,KAAK,GAAkB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAkB,CAAC;YAEjE,sDAAsD;YACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,KAAK,EACL,IAAI,+BAAY,CACZ,KAAK,EACL,IAAI,EACJ,QAAQ,CACX,CACJ,CAAC;YACN,CAAC;YACD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAgB,CAAC;QACjE,CAAC;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAkB,CAAC;QACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACvE,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,SAAS,EACT,IAAI,uBAAQ,CACR,QAAQ,CAAC,MAAM,EACf,IAAI,EACJ,KAAK,EACL,QAAQ,CACX,CACJ,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ensureCorrectBdd = ensureCorrectBdd;
|
|
4
|
+
exports.getNodesRecursive = getNodesRecursive;
|
|
4
5
|
/**
|
|
5
6
|
* run some tests on the bdd
|
|
6
7
|
* to ensure everything is correct
|
|
@@ -84,7 +85,6 @@ function ensureCorrectBdd(bdd) {
|
|
|
84
85
|
'bdd includes a deleted node');
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
|
-
exports.ensureCorrectBdd = ensureCorrectBdd;
|
|
88
88
|
function getNodesRecursive(node, set = new Set()) {
|
|
89
89
|
set.add(node);
|
|
90
90
|
if (!node.isLeafNode()) {
|
|
@@ -98,5 +98,4 @@ function getNodesRecursive(node, set = new Set()) {
|
|
|
98
98
|
}
|
|
99
99
|
return set;
|
|
100
100
|
}
|
|
101
|
-
exports.getNodesRecursive = getNodesRecursive;
|
|
102
101
|
//# sourceMappingURL=ensure-correct-bdd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-correct-bdd.js","sourceRoot":"","sources":["../../../src/ensure-correct-bdd.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ensure-correct-bdd.js","sourceRoot":"","sources":["../../../src/ensure-correct-bdd.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fillTruthTable =
|
|
3
|
+
exports.fillTruthTable = fillTruthTable;
|
|
4
4
|
const util_js_1 = require("./util.js");
|
|
5
5
|
/**
|
|
6
6
|
* fills each missing row of a table
|
|
@@ -22,5 +22,4 @@ function fillTruthTable(truthTable, inputLength, value) {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
exports.fillTruthTable = fillTruthTable;
|
|
26
25
|
//# sourceMappingURL=fill-truth-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill-truth-table.js","sourceRoot":"","sources":["../../../src/fill-truth-table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fill-truth-table.js","sourceRoot":"","sources":["../../../src/fill-truth-table.ts"],"names":[],"mappings":";;AAWA,wCAuBC;AAlCD,uCAImB;AAGnB;;;GAGG;AACH,SAAgB,cAAc,CAC1B,UAAsB,EACtB,WAAmB,EACnB,KAAa;IAEb,MAAM,QAAQ,GAAG,IAAA,6BAAmB,EAAC,WAAW,CAAC,CAAC;IAClD,IAAI,YAAY,GAAG,IAAA,6BAAmB,EAAC,WAAW,CAAC,CAAC;IACpD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,UAAU,CAAC,GAAG,CACV,YAAY,EACZ,KAAK,CACR,CAAC;QACN,CAAC;QACD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,IAAA,yBAAe,EAC1B,YAAY,CACf,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findSimilarNode =
|
|
3
|
+
exports.findSimilarNode = findSimilarNode;
|
|
4
4
|
/**
|
|
5
5
|
* find an simliar node in a list of nodes
|
|
6
6
|
* which is not exactly the same node
|
|
@@ -18,5 +18,4 @@ function findSimilarNode(own, others) {
|
|
|
18
18
|
}
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
|
-
exports.findSimilarNode = findSimilarNode;
|
|
22
21
|
//# sourceMappingURL=find-similar-node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-similar-node.js","sourceRoot":"","sources":["../../../src/find-similar-node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-similar-node.js","sourceRoot":"","sources":["../../../src/find-similar-node.ts"],"names":[],"mappings":";;AAOA,0CAmBC;AAxBD;;;;GAIG;AACH,SAAgB,eAAe,CAC3B,GAAM,EACN,MAAW;IAEX,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IACI,GAAG,KAAK,KAAK;YACb,CAAC,KAAK,CAAC,OAAO;YACd,GAAG,CAAC,kBAAkB,CAClB,KAAY,EACZ,SAAS,CACZ,EACH,CAAC;YACC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/dist/cjs/src/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export * from './minimal-string/index.js';
|
|
2
1
|
export * from './abstract-node.js';
|
|
3
2
|
export * from './branches.js';
|
|
4
3
|
export * from './create-bdd-from-truth-table.js';
|
|
@@ -8,6 +7,8 @@ export * from './find-similar-node.js';
|
|
|
8
7
|
export * from './internal-node.js';
|
|
9
8
|
export * from './leaf-node.js';
|
|
10
9
|
export * from './optimize-brute-force.js';
|
|
10
|
+
export * from './packed/index.js';
|
|
11
|
+
export * from './ordering/index.js';
|
|
11
12
|
export * from './parents.js';
|
|
12
13
|
export * from './root-node.js';
|
|
13
14
|
export * from './util.js';
|
|
@@ -23,13 +23,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
23
23
|
}) : function(o, v) {
|
|
24
24
|
o["default"] = v;
|
|
25
25
|
});
|
|
26
|
-
var __importStar = (this && this.__importStar) || function (
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
33
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
44
|
const pkg = __importStar(require("./index.js"));
|
|
35
45
|
module.exports = pkg;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es5.js","sourceRoot":"","sources":["../../../src/index.es5.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG
|
|
1
|
+
{"version":3,"file":"index.es5.js","sourceRoot":"","sources":["../../../src/index.es5.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,gDAAkC;AAElC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC"}
|
package/dist/cjs/src/index.js
CHANGED
|
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./minimal-string/index.js"), exports);
|
|
18
17
|
__exportStar(require("./abstract-node.js"), exports);
|
|
19
18
|
__exportStar(require("./branches.js"), exports);
|
|
20
19
|
__exportStar(require("./create-bdd-from-truth-table.js"), exports);
|
|
@@ -24,6 +23,8 @@ __exportStar(require("./find-similar-node.js"), exports);
|
|
|
24
23
|
__exportStar(require("./internal-node.js"), exports);
|
|
25
24
|
__exportStar(require("./leaf-node.js"), exports);
|
|
26
25
|
__exportStar(require("./optimize-brute-force.js"), exports);
|
|
26
|
+
__exportStar(require("./packed/index.js"), exports);
|
|
27
|
+
__exportStar(require("./ordering/index.js"), exports);
|
|
27
28
|
__exportStar(require("./parents.js"), exports);
|
|
28
29
|
__exportStar(require("./root-node.js"), exports);
|
|
29
30
|
__exportStar(require("./util.js"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,gDAA8B;AAC9B,mEAAiD;AACjD,0DAAwC;AACxC,wDAAsC;AACtC,yDAAuC;AACvC,qDAAmC;AACnC,iDAA+B;AAC/B,4DAA0C;AAC1C,oDAAkC;AAClC,sDAAoC;AACpC,+CAA6B;AAC7B,iDAA+B;AAC/B,4CAA0B"}
|