組み合わせを求める


1.組み合わせ


組合せとは、n個の数字から順番にrを抽出することを意味する.すなわち,1,2,3を与えれば,1,2/1,3/2,3のような組み合わせを求めることができる.1.2/2.1は同じです△ソートは違うと思います.
よって、nCr=nPr/r!そう言ってもいいです.
あるいは、論理的に考えてみましょう.246142から3つの数字を抽出すると仮定すると、2つに分けることができる.5を基準として、5を含むと含まないに分けることができます.5を含む場合は[1,2,3,4,5]で2個、含まない場合は3個を抽出する.
従ってnCr=n−1 Cr−1+n−1 Crを用いることができる.したがって,この場合は再帰木で表すことができる.
5 C 3を再帰木で表す.

2.方法


同じものをメモして、後で出てきたら使います.
comb(n,r)を作成し、n==r|r==0の場合、1を返します.
function combinationCases(n, r) {
  let memo = {};

  function dfs(num, pick) {
    if (memo[`${num}C${pick}`]) return memo[`${num}C${pick}`];
    if (num === pick || pick === 0) return 1;
    else
      return (memo[`${num}C${pick}`] =
        dfs(num - 1, pick - 1) + dfs(num - 1, pick));
  }

  return dfs(n, r);
}
では、今度はこの関数を使って推測数列の関数を構築しましょう.おもしろい本当に不思議だこの論理は何を自動化し予測できるのか.