Lemma 3.6에 기반해 MLE를 구한다.
우선 다음을 전개하고
이어
따라서
첨부된 코드 구현 vsbw.ts 참고.
Lemma 3.6에 기반해 MLE를 구한다.
우선 다음을 전개하고
이어
따라서
첨부된 코드 구현 vsbw.ts 참고.
const chi = (p: number, r: Array<number>) => { | |
const mems = [[1 - r[0], r[0]]] | |
for (let i = 1; i < r.length; ++i) | |
for (let j = ((mems[i] = []), 0); j < 2 ** i; ++j) { | |
mems[i][j * 2] = (mems[i - 1][j] * (1 - r[i])) % p | |
mems[i][j * 2 + 1] = (mems[i - 1][j] * r[i]) % p | |
} | |
return mems.at(-1)! | |
} | |
const vsbw = (p: number, fw: Array<number>, r: Array<number>) => | |
chi(p, r) | |
.map((chiW, i) => chiW * fw[i]) | |
.reduce((a, b) => (a + b) % p, 0) | |
const p = 11 | |
const fw = [1, 5, 2, 6, 3, 7, 4, 8] | |
const r = [2, 4, 6] | |
// verify that ~f actually extends f | |
for (let i = 0; i < fw.length; ++i) | |
console.assert(vsbw(p, fw, [(i >> 2) & 1, (i >> 1) & 1, i & 1]) === fw[i]) | |
console.log(vsbw(p, fw, r)) |