Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# n维中的组合-如何确定点是否彼此可见(如果它们位于同一轴上)_C#_Algorithm_Combinations_N Dimensional - Fatal编程技术网

C# n维中的组合-如何确定点是否彼此可见(如果它们位于同一轴上)

C# n维中的组合-如何确定点是否彼此可见(如果它们位于同一轴上),c#,algorithm,combinations,n-dimensional,C#,Algorithm,Combinations,N Dimensional,在n维网格中(最多10^7维)有两个点。他们在每个轴上都有假想的传感器。 我需要什么算法来计算所有可能的选择,当这两点可以发现自己 根据我的任务文档(翻译成英文)正式撰写: 设AA(a1,a2,…,an)和BB(b1,b2,…,bn) 是n维空间中的两点且存在i∈ 1,2,…,n使得ai=bi然后A和B彼此看见 示例: 在1维空间中,长度为10的是总共45个组合如何放置2个点(每次见面)。 很容易组合10C2(2的10)=45 如何用程序计算2,3,4,…,10^7维(我更喜欢C#) 我拥有的正

在n维网格中(最多10^7维)有两个点。他们在每个轴上都有假想的传感器。 我需要什么算法来计算所有可能的选择,当这两点可以发现自己

根据我的任务文档(翻译成英文)正式撰写:
设AA(a1,a2,…,an)和BB(b1,b2,…,bn) 是n维空间中的两点且存在i∈ 1,2,…,n使得ai=bi然后A和B彼此看见

示例:
1维空间中,长度为10的是总共45个组合如何放置2个点(每次见面)。 很容易组合10C2(2的10)=45

如何用程序计算2,3,4,…,10^7维(我更喜欢C#)

我拥有的正确测试数据:
输入:
1
10
产出:45

输入:
2
5.8
产量:220

输入:
3
81211
产出:14784

更多说明:
输出是空间中的两个点彼此看到(位于同一轴上)时的组合数。在一维空间中,只有一个轴,所以它们总是互相看见。在二维空间中有两个轴,所以它们只能在某些情况下看到对方


我已经创建了示例代码,您可以试试。我已经检查过了,一切正常

方程是:C(n,r)=n/(r!(n−r) !)

示例: 1.10C2=45 2.10C3=120

public void Calc()
{
  int result= nCr(10, 3);
}

public int nCr(int n,int r )
{   
   int nValue=1;
   int rValue = 1;
   for (int i = n-r+1; i <= n; i++)
   {
       nValue = nValue*i;
   }
   for (int i = 1; i <= r; i++)
   {
        rValue = rValue*i;
   }
   return nValue/rValue;
}
public void Calc()
{
int结果=nCr(10,3);
}
公共内部nCr(内部n,内部r)
{   
int nValue=1;
int-rValue=1;
对于(inti=n-r+1;i我确信它是正确的。
C(x,y)是y的组合x。
假设我们有一个维度,我们称之为长度为8的X。有C(8,2)=8*7/2=28种相互见面的可能性。
当我们加上长度为12的第二个维度Y时,我们有12条平行于X的线。所以我们有12*28=336个可能性,在所有平行于X的线上。现在,在Y维度上,我们有C(12,2)=66个可能性。有8条这样的线,所以66*8=528。
总计:336+528=846种可能性
现在,让我们添加另一个维度,标记为Z,长度为11。一行中有C(1,2)=11*10/2=55,(a维度)我们有8*12行这样的线。所以是55*8*12=5280的可能性!
现在我们总共有:
与X轴平行:C(8,2)*11*12=3696
平行于Y轴C(12,2)*8*11=5808
平行于Z轴C(11,2)*8*12=5280
总计=14784

一般而言,具有n1,n2…nk长度的n维公式为:
C(ni,2)*(n1*n2…*nk)/ni之和
或更短: (n1*n2*n3…nk)/2*(ni-1)之和

例如: 带有3,8,9,11的尺寸:
(3*8*9*11)/2*(3-1)=2376
(3*8*9*11)/2*(8-1)=8316
(3*8*9*11)/2*(9-1)=9504
(3*8*9*11)/2*(11-1)=11880
总计=32076

最简单的等式:

(n1*n2*n3…ni)(n1+n2+…ni-k)/2,其中ni是长度,k是维度数,请看一看。请给我相同的例子,并提供适当的数据和结果。我在问题OK中添加了测试输入和输出,这很好,但请添加逻辑答案,因为为什么回答45220和14784。当他们彼此看不见时?他们是否有某种视野或其他东西?他们怎么可以我用5x8网格测试二维数组?我认为这是不对的答案这只使用一维请给我二维方程,我会试试。问题是它必须是n维的,最大值为10^7维。老师说它可以用复杂度O(n)来完成!!问题解决了。谢谢你的帮助。@ArkadiuszRaszeja收到了:欢迎光临。干得好。干得好ArkadiuszRaszeja…你真是个天才!我正在寻找答案的路上,因为有一条规则,当你一步一步地做这件事时,会导致直线下降。脱帽致敬,谢谢!这是对的,我喜欢让我头疼:)很高兴帮助你,认识你:)我祝你在事业上取得成功:)我可以给你发送我的通信研讨会上的所有任务:D所有任务都令人兴奋,但比其他任务更令人兴奋。它是捷克语的,所以如果你翻译它,你可以解决所有问题,让你的大脑更热:Dshit为11维,似乎不工作lol:D为什么问题可能是整数长度(或事件未签名整数)。大约是2 mld,在乘以11个数字后可能会被压碎。我是波兰人,我的斯拉夫兄弟:)