如何计算所有可能路径的最小要求边缘?

问题描述

我不是数学家,所以如果我用错了词汇,请原谅。这不是任何作业或功课。

从(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=1NE =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))