algorithm - KornShell 从具有 n 个对象的集合中生成 k 个对象的组合数

标签 algorithm shell math scripting ksh

任何人都可以帮助获得使用 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/

相关文章:

c++ - 如何在 C++ 中将用户输入限制为数字和字母

c++ - 查找 x 轴上最大非重叠线数的算法

algorithm - 在线段中放置一个点 - 一种算法

android - 如何从 Android 应用程序运行猴子

java - 如何从java程序运行docker镜像?

wpf - 如何在 WPF/Surface 中缩放时计算平移

algorithm - 关于AVL树的插入操作

shell - 从 shell 脚本发布下载到 bitbucket

math - 大 O 表示法中的指数

math - 如何找到 X1、X2、Y1、Y2 的 Y 截距