Eulerian Number
下文中的欧拉数特指 Eulerian number。注意与 Euler number,以及 Euler's number(指与欧拉相关的数学常数例如
在计算组合中,欧拉数(Eulerian Number)是从
例如,从数字
排列 | 满足要求的排列 | 个数 |
---|---|---|
1 2 3 | 1, 2 & 2, 3 | 2 |
1 3 2 | 1, 3 | 1 |
2 1 3 | 1, 3 | 1 |
2 3 1 | 2, 3 | 1 |
3 1 2 | 1, 2 | 1 |
3 2 1 | 0 |
所以按照
对于
满足要求的排列 | 个数 | |
---|---|---|
1 | ||
1 | ||
1 | ||
1 | ||
4 | ||
1 |
公式
可以通过递推或者递归的方法计算欧拉数。
首先,当
其次,当
最后,考虑在
考虑
考虑从
考虑从
综上所述,有
实现
=== "C++"
```cpp
int eulerianNumber(int n, int m) {
if (m >= n || n == 0) return 0;
if (m == 0) return 1;
return (((n - m) * eulerianNumber(n - 1, m - 1)) +
((m + 1) * eulerianNumber(n - 1, m)));
}
```
=== "Python"
```python
def eulerianNumber(n, m):
if m >= n or n == 0:
return 0
if m == 0:
return 1
return (((n - m) * eulerianNumber(n - 1, m - 1)) + \
((m + 1) * eulerianNumber(n - 1, m)))
```
习题
贡献者:@Menci@Zirnc@Great-designer@Ir1dXD@xyf007@WenzelTian
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用