JS Apriori
Apriori algorithm by JS.
by Tinytsunami
HTML
<div id="demo">
Minimum support: <input type="text" value="0.8"><button>Evaluation</button><br />
<button>New serial</button>
<table>
<tr>
<th>ID</th>
<th colspan="2">Items</th>
</tr>
</table>
<pre></pre>
</div>
CSS
body {
color: #ffffff;
background: #20262e;
font-family: monospace, sans-serif;
}
#demo table td,
#demo table th {
border: solid 1px #ffffff;
padding: 2px;
}
#demo input {
width: 50px;
color: #ffffff;
background: #20262e;
border: none;
border-bottom: solid 1px #ffffff;
outline: none;
}
#demo>input {
margin-right: 5px;
}
#demo table input {
width: 300px;
border: none;
}
#demo button {
cursor: pointer;
color: #ffffff;
background: #20262e;
border: 1px solid #ffffff;
outline: none;
}
#demo button:hover {
color: #20262e;
background: #ffffff;
}
#demo>button {
margin-bottom: 5px;
}
#demo table td>button {
border: none;
}
JavaScript
(function() {
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
Set.prototype.isSuperset = function(subset) {
for (var elem of subset) {
if (!this.has(elem)) {
return false;
}
}
return true;
}
Set.prototype.union = function(setB) {
var union = new Set(this);
for (var elem of setB) {
union.add(elem);
}
return union;
}
Set.prototype.intersection = function(setB) {
var intersection = new Set();
for (var elem of setB) {
if (this.has(elem)) {
intersection.add(elem);
}
}
return intersection;
}
Set.prototype.difference = function(setB) {
var difference = new Set(this);
for (var elem of setB) {
difference.delete(elem);
}
return difference;
}
Set.prototype.equal = function(setB) {
let a = this.difference(setB).size;
let b = setB.difference(this).size;
return (a === 0 && b === 0);
}
Set.prototype.subset = function() {
let subset = [];
subset.push(new Set([]));
let origin = Array.from(this);
for (let i = 1; i < (1 << origin.length) - 1; i++) {
let arr = [];
for (let j = 0; j < this.size; j++)
if (i & (1 << j))
arr.push(origin[j]);
subset.push(new Set(arr));
}
return subset;
}
})();
(function() {
/* get elements */
let root = document.getElementById("demo");
let tableNode = root.getElementsByTagName("table")[0];
let supportNode = root.getElementsByTagName("input")[0];
let evaluationNode = root.getElementsByTagName("button")[0];
let newSerialNode = root.getElementsByTagName("button")[1];
let resultNode = root.getElementsByTagName("pre")[0];
/* initialize variables */
let id = 1;
/* get random number (integer) */
let randInt = function(min, max) {
return Math.floor((Math.random() * 0xFFFF) % (max - min) + min);
};
/* fix float */
let fixFloat = function(number, digit) {
return...