问题描述
我不是数学家,所以如果我用错了词汇,请原谅。这不是任何作业或功课。
从(0,0)到(4,-1)点,有五种可能的“出租车出租车”路径。令n =点之间的绝对差之和5。从一个点到另一个点的路径数=(n * n-1)/ 2 =10。从一个点到另一点的一半等于5。
但是当我手绘时,我在所有使用的节点或顶点(?)之间算出13个“边”(正确的术语?)。我想为任何n维图(最多6维)计算的就是这个数字。一个人如何从向量(4,-1)到达13?
解决方法
如果x差为dx
,而y差为dy
,则边数为
NE = dx*(dy+1) + dy*(dx+1)
(水平边缘数+垂直边缘数)
对于您的情况dx=4,dy=1
和NE =4*2+5*1=13
对于dx=4,dy=2 NE= 4*3+5*2=22
相同的逻辑适用于n维网格。例如,在3D模式下,
dy*(dx+1)*(dz+1) vertical edges (along OY)
dx*(dy+1)*(dz+1) horizontal edges (along OX)
dz*(dx+1)*(dy+1) edges in depth (along OZ)
为3x3x3立方体提供144条边
简单的Python(适用于任何语言)程序可针对任何维度计算此数量:
def numedges(dims:list):
prod = 1
for dim in dims:
prod *= (dim + 1)
ne = 0
for dim in dims:
ne += prod * dim // (dim+1) #integer division
return ne
print(numedges([2,4]))
print(numedges([3,3,3]))
print(numedges([2,4,5,6,7]))
>>>
22
144
96408
使用reduce
:
from functools import reduce
def numedges(dims:list):
product = reduce(lambda x,y: x*(y+1),dims,1)
return(reduce(lambda x,y: x+product*y//(y+1),0))