Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function node(inp_name, inp_fr, inp_used, inp_code, inp_link){
- this.name = inp_name;
- this.fr = inp_fr;
- this.used = inp_used;
- this.code = inp_code;
- this.link = inp_link;
- }
- function reverseString(str) {
- return str.split("").reverse().join("");
- }
- str = 'abrakadabra';
- alph = new Array();
- for(i=0;i<str.length;i++){
- if (!alph[str.charAt(i)]) alph[str.charAt(i)] = 0;
- alph[str.charAt(i)]++;
- }
- // for(i in alph){
- // console.log(i,' ',alph[i]);
- // }
- tree = new Array();
- var freeIdx = 0;
- for(i in alph){
- n = new node(i, alph[i], 0, '', null);
- tree.push(n);
- ++freeIdx;
- }
- // for(i=0;i<tree.length;i++)
- // console.log(tree[i]);
- var active = 1e9;
- for (;active>1;){
- active = 0;
- var firstMin = freeIdx;
- var firstMinVal = 0;
- var secondMin = freeIdx;
- var secondMinVal = 0;
- for (let i = freeIdx - 1; i >= 0; --i){
- if (tree[i].used == 0){
- if (tree[i].fr < secondMinVal || secondMinVal == 0){
- if (tree[i].fr < firstMinVal || firstMinVal == 0){
- secondMin = firstMin;
- secondMinVal = firstMinVal;
- firstMinVal = tree[i].fr;
- firstMin = i;
- } else {
- secondMin = i;
- secondMinVal = tree[i].fr;
- }
- }
- ++active;
- }
- }
- console.log(firstMin, secondMin, active);
- if (active == 1)
- break;
- tree[freeIdx] = new node(tree[firstMin].name.concat(tree[secondMin].name),
- tree[firstMin].fr + tree[secondMin].fr,
- 0, '', freeIdx);
- tree[firstMin].used = 1;
- tree[firstMin].code = '0';
- tree[firstMin].link = freeIdx;
- tree[secondMin].used = 1;
- tree[secondMin].code = '1';
- tree[secondMin].link = freeIdx;
- ++freeIdx;
- }
- for (let i = 0; tree[i].name.length == 1; ++i){
- var curr = i;
- var code = "";
- while(tree[curr].used == 1){
- code = code.concat(tree[curr].code);
- curr = tree[curr].link;
- }
- console.log(tree[i].name + ' ' + reverseString(code));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement