在遍历数组时未获得预期输出的问题

2024-04-29 07:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码。我当前接收的输出不是预期的输出。我试图解决的伪代码如下所述

   for each i in 1 · · · N do
         TEi = fmob(Li)
         TCi= fc(Li)
         TUi =fd(Li) 
         return 

enter image description here

Python代码

def optimal_partition():                   
 TE=[10,1,3]
 TC=[2,3,1]
 TU=[2,3,1]

 N = len(TU)-1
 SUMS = [0] * N
 for j in range(N):
    for i in range(1, j + 1):
        SUMS[j] += TE[i]
    for k in range(j - 1, N + 1):
        SUMS[j] += TC[k]
    SUMS[j] += TU[j]
 return SUMS.index(min(SUMS))

对于上面的代码,我需要预期的输出为[16,15]。谢谢,非常感谢你的帮助


Tags: 代码inforreturnrangeliteido
2条回答

这是使用列表切片而不是嵌套循环更好地实现算法:

def part_sum(TE, TC, TU, j):
    return sum(TE[:j+1]) + sum(TC[j+1:]) + TU[j]

def optimal_partition(TE, TC, TU):
    return min(range(len(TE)), key=lambda j: part_sum(TE, TC, TU, j)) 

TE = [10,1,3]
TC = [2,3,1]
TU = [2,3,1]
print("The sums are: ", [part_sum(TE, TC, TU, j) for j in range(3)])
print("The optimal partition is at:", optimal_partition(TE, TC, TU))

请注意,有3个和,而不是2个,并且j的返回值使用基于零的索引。如果您想返回一个基于一的索引,那么只需将1添加到最佳分区结果中即可

你患的是0-based indexing计算综合症

计算机科学有时使用{},而数学似乎使用基于1的索引

此程序似乎为您提供了预期的输出:

def optimal_partition():                   
    TE=[10,1,3]
    TC=[2,3,1]
    TU=[2,3,1]

    N = len(TU) - 1
    SUMS = [0] * N
    for j in range(N):
        for i in range(j + 1):
            SUMS[j] += TE[i]
        for k in range(j + 1, N + 1):
            SUMS[j] += TC[k]
        SUMS[j] += TU[j]
    return SUMS

SUMS = optimal_partition()
print(SUMS)
print(SUMS.index(min(SUMS)))

输出:

[16, 15]
1

相关问题 更多 >