87,997
社区成员




<script type=text/javascript>
var i = 1000000, arr = [], m = n = "";
while (i --) {
arr.push(i + 1);
}
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
//------------------------------------------------
var t = new Date();
var x = 1000000,
j = k = arr.length,
q = w = l = 0;
while (j --) {
x ^= arr[j];
}
q = w = x;
while (! (q & 1)) {
q >>= 1,
l++;
}
while (k --) {
if (arr[k] >> l & 1) {
x ^= arr[k];
}
}
t = new Date() - t;
//------------------------------------------------
document.write("随机删除的两个数为:" + m + " 和 " + n + "<br/>");
document.write("找到被删的两个数为:" + x + " 和 " + [x ^ w] + "<br/>");
document.write("查找被删两数时间为:" + t + "毫秒");
</script>
<script type=text/javascript>
var i = 1000000, arr = qrr = [], m = n = "";
while (i --) {
arr.push(i + 1);
}
qrr = arr.concat([]);
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
//------------------------------------------------
var t = new Date();
var x = 1000000, i = arr.length, j = qrr.length, q = w = l = 0;
while (i --) {
x ^= arr[i];
}
q = w = x;
while (!(q & 1)) {
q >>= 1, l ++;
}
while (j --) {
if (qrr[j] >> l & 1) {
x ^= qrr[j];
}
if (arr[j] >> l & 1) {
x ^= arr[j];
}
}
t = new Date() - t;
//------------------------------------------------
document.write("随机抽取的两个数为:" + m + " 和 " + n + "<br/>");
document.write("找到抽取的两个数为:" + x + " 和 " + [x ^ w] + "<br/>");
document.write("查找时间为:" + t);
</script>
说明:x的初始值为连续整数间相互异或值,1-10个数的时候为11,1-100、1-1000...等等就等于最大的尾数,有代数式可一步求出来。
我依然困惑的是,为什么错误的代码能够在大数量级的连续整数向量空间查找到正确的结果呢?
<script type=text/javascript >
var i = 1000000, arr = qrr = [], m = n = "";
while (i --) {
arr.push(i + 1);
}
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
//------------------------------------------------
var t = new Date();
var x = y = q = l = k = 0, i = j = arr.length + 3;
while (i --) {
x ^= i ^ arr[i];
}
q = y = x;
while (! (q & 1)) {
q >>= 1, l ++;
}
while (j --) {
if (k = j >> l & 1) {
x ^= j;
}
if (arr[j] >> l & 1) {
x ^= arr[j];
}
}
t = new Date() - t;
//------------------------------------------------
document.write("随机抽取的两个数为:" + m + " 和 " + n + "<br/>");
document.write("找到抽取的两个数为:" + x + " 和 " + [x ^ y] + "<br/>");
document.write("查找时间为:" + t + "毫秒");
</script>
<script type=text/javascript>
var i = 1000000, arr = [], m = n = "";
while (i--) {
arr.push(i + 1);
}
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
//------------------------------------------------
var t = new Date();
var x = 1000000,
j = k = arr.length,
q = w = l = 0;
while (j--) {
x ^= arr[j];
}
q = w = x;
while (! (q & 1)) {
q >>= 1,
l++;
}
while (k--) {
if (arr[k] >> l & 1) {
x ^= arr[k];
}
}
t = new Date() - t;
//------------------------------------------------
document.write("随机抽取的两个数为:" + m + " 和 " + n + "<br/>");
document.write("找到抽取的两个数为:" + x + " 和 " + [x ^ w] + "<br/>");
document.write("查找时间为:" + t);
</script>
<script type=text/javascript>
var i = 1000000, arr = [], m = n = "";
while (i --) {
arr.push(i + 1);
}
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
//------------------------------------------------
var t = new Date();
var x = 1000000, j = k = arr.length, q = w = l = 0;
while (j --) {
x ^= arr[j];
}
q = w = x;
while (! (q & 1)) {
q >>= 1,
l ++;
}
while (k --) {
if (arr[k] >> l & 1) {
x ^= arr[k];
}
}
t = new Date() - t;
//------------------------------------------------
document.write("随机抽取的两个数为:" + m + " 和 " + n + "<br>");
document.write("找到抽取的两个数为:" + x + " 和 " + [x ^ w] + "<br>");
document.write("查找时间为:" + t + "毫秒");
</script>