performance - Javascript program running for ever in all browser -
i have below code generate permutation of given number. problem if try generate permutation above 5 digit running ever. how optimize program result displayed in browser.
<html> <script> function permute(level, permuted, used, original) { var length = original.length; if (level == length) { //system.out.println(permuted); document.getelementbyid("nmbrs").innerhtml = document.getelementbyid("nmbrs").innerhtml + "<br />" +permuted } else { (var = 0; < length; i++) { if (!used[i]) { used[i] = true; permute(level + 1, permuted + original[i], used, original); used[i] = false; } } } } function executep(){ var s = ['0','1','2','7']; document.getelementbyid("nmbrs").innerhtml = ""; var length = eval(document.getelementbyid("num").value); /*for(var i=length-1;i>=0;i--){ var used = [false, false, false, false]; permute(i, "", used, s); }*/ var newarray = ['0','1','2','7']; if(length > 4){ var newite = length - 4; do{ newarray.push(s[(newite-1) % 4]); newite--; }while(newite>0); } var used = [false, false, false, false,false, false, false, false,false, false, false, false]; permute(newarray.length-length, "", used, newarray); } </script> <body> <input type="text" id="num" /> <input type="button" value="generate num" onclick="executep()" /> <div id="nmbrs" ></div> </body> </html>
your primary problem you're manipulating dom, expensive. instead, store results in temporary location, , generate html want use, , append dom.
this modified version of page / script shows mean, , generates permutations of length 8+ easily;
<html> <script> var results = []; function permute(level, permuted, used, original) { var length = original.length; if (level == length) { results.push(permuted); } else { (var = 0; < length; i++) { if (!used[i]) { used[i] = true; permute(level + 1, permuted + original[i], used, original); used[i] = false; } } } } function executep(){ var s = ['0','1','2','7']; document.getelementbyid("nmbrs").innerhtml = ""; var length = eval(document.getelementbyid("num").value); var newarray = ['0','1','2','7']; if(length > 4) { var newite = length - 4; { newarray.push(s[(newite-1) % 4]); newite--; } while (newite>0); } var used = [false, false, false, false,false, false, false, false,false, false, false, false]; permute(newarray.length-length, "", used, newarray); var resulthtml = ""; var resultlength = results.length; (var = 0; < resultlength; i++) { resulthtml += results[i]; resulthtml += "<br/>"; } document.getelementbyid("nmbrs").innerhtml = resulthtml; } </script> <body> <input type="text" id="num" /> <input type="button" value="generate num" onclick="executep()" /> <div id="nmbrs" ></div> </body> </html>
Comments
Post a Comment