任何人都可以帮助获得使用 KornShell (ksh) 生成具有 n 个对象的集合中 k 个对象的组合数量的代码吗? 例如一次取k=2的{1,2,3,4}组合为{1,2}, {1,3}, {1,4}, {2,3}, {2, 4}, {3,4},总共 6 = 4/[(2)(4-2)] 子集。
最佳答案
@Ned Nowotny 是对的,sh 不是做这件事的正确地方
也就是说,这是递归形式:
> function cr { integer n=$1 k=$2; if ((k==1)); then print $n; elif ((k==n)); then print 1; else print $(($(cr $((n-1)) $((k-1))) + $(($(cr $((n-1)) $k))))); fi; }
> cr 4 2
6
>
这是更快的阶乘形式:
> function fact { integer x=$1 f=1; while ((x>0)) do : $((f*=x--)); done; print $f; }
> function cf { integer n=$1 k=$2; print $(($(fact $n)/($(fact $k)*$(fact $(($n-$k)))))); }
> cf 4 2
6
>
关于algorithm - KornShell 从具有 n 个对象的集合中生成 k 个对象的组合数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012449/