假设您有A
个橘子和B
个苹果。您想要创建一篮子N
个水果。您可以制作的苹果和橙子组合总数是多少?
假设A+B >= N
。
示例:
我有6个橘子和6个苹果,我想制作一个总共9个水果的篮子
所以我有4种不同的组合:
3 apples 6 oranges
4 apples 5 oranges
5 apples 4 oranges
6 apples 3 oranges
我想创建一个简单(高效)的算法来计算这个数字 是否有任何数学/组合方式来计算O(1)中的这个数字?我无法为此找到正确的公式。
答案 0 :(得分:4)
这个答案将显示如何获得正确的封闭式公式的通用方法,而不是给出“here here it it”公式。
要使用Stars and Bars formula和Inclusion Exclusion得到一个接近的公式,您需要找到等式的解的数量:
x1 + x2 = n
s.t.
(1) 0 <= x1 <= A
(2) 0 <= x2 <= B
表示:
W(0) = #solutions to the problem regardless of restrictions
W(1) = #solutions to the problem with (1) is NOT correct (x1 > A)
W(2) = #solutions to the problem with (2) is NOT correct (x2 > B)
W(1,2) = #solutions to the problem with both (1,2) NOT correct (x1 > A and X2 > B)
从包含排除原则来看,我们在上面形式化的问题的答案是:
E = W(0) - (W(1) + W(2)) + W(1,2)
剩下的就是给W(...)
提供公式,为此我们将使用星和酒吧。
使用没有约束的方程式和条形和星形的定理2:
W(0) = Choose(N + 2 - 1, 2 - 1) = Choose(N + 1, 1) = N + 1
要计算W(1)和W(2),我们强制x1/x2
为A+1
或B+1
,然后像往常一样,获取方程式:
x1 + x2 = N - A - 1
x1 + x2 = N - B - 1
和解决方案的数量(再次使用定理2):
W(1) = Choose(N - A - 1 + 2 - 1, 1) = Chose(N-A,1) = max{N-A,0}
W(2) = (similarly) = max{N-B,0}
对于W(1,2),我们设置两个并继续:
W(1,2) = Choose(N - A - 1 - B -1 + 2 - 1) = Choose(N-A-B-1,1) = max{N-A-B-1,0}
将所有内容汇总到最终公式:
E = W(0) - (W(1) + W(2)) + W(1,2) =
= N + 1 - max{N-A,0} - max{N-B,0} + max{N-A-B-1,0}
在您的示例中是:
E = 9 + 1 - 3 - 3 + 0 = 4
答案 1 :(得分:2)
让我们说A_max
是组合中可以包含的A
个数的最大值,而A_min
是必须包含在A
中的最小A_max + B_min = N
个数任何组合。那么必须满足两个条件:
A_min + B_max = N
A_max
由于我们知道min(NumOfA, N)
(B_min
),因此可以从第一个等式轻松找到A_min
。同样,人们可以从第二个等式中找到A_max + B_min
。
因此,组合列表将是:
(A_max-1) + (B_min+1)
(A_max-2) + (B_min+2)
(A_min) + (B_max)
...
(A_max - A_min + 1)
因此,此类组合的计数为(B_max - B_min + 1)
或let
Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
//Remove errors of all columns of the data source. ColumnName doesn't play any role
Cols = Table.ColumnNames(Source),
ColumnListWithParameter = Table.FromColumns({Cols, List.Repeat({""}, List.Count(Cols))}, {"ColName" as text, "ErrorHandling" as text}),
ParameterList = Table.ToRows(ColumnListWithParameter ),
ReplaceErrorSource = Table.ReplaceErrorValues(Source, ParameterList)
in
ReplaceErrorSource
答案 2 :(得分:-1)
应该是
@{
ViewBag.Title = "Show";
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
@*<meta http-equiv="Refresh" content="5">*@
<title>Wallboard B</title>
<link type="text/css" rel="stylesheet" href="~/cssNew/bootstrap.min.css">
<link type="text/css" rel="stylesheet" href="~/cssNew/style.css">
<link rel="icon" type="image/png" href="images/favicon.png">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400" rel="stylesheet">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
答案 3 :(得分:-3)
好的,对不起,我的方式太快了。
你知道总有至少一种解决方案。
你必须至少取A的果实,以便用B得到N.你得到最大A的果实。如果它大于N,则限制为N.所以答案应该是:
min(A, N) - max(0, N-B) + 1