【问题标题】:Finding minimum number of jumps increasing the value of the element找到增加元素值的最小跳跃次数
【发布时间】:2022-01-06 04:29:01
【问题描述】:

优化 leetcode 风格的问题 - DP/DFS

任务如下:

  • 给定 N 个高度,找出从开始到结束所需的次优跳跃的最小数量。 [一维数组]
  • 如果起点 i 的高度小于或等于目标点 j 的高度,则跳跃是次优的。
  • 如果 j-i >= k,则可以进行跳跃,其中 k 是最大跳跃距离。
  • 对于第一个子任务,只有一个 k 值。
  • 对于第二个子任务,有两个k值;输出每个 k 值的次优跳跃量。
  • 对于第三个子任务,有100k个值;输出每个 k 值的次优跳跃量。

我的尝试

下面的 sn-p 是我解决问题的方法,它给出了正确的解决方案。

这是为了处理多个 k 值而优化的,而不必做很多不必要的工作。 问题在于,即使是具有单个 k 值的解决方案,在最坏的情况下也是 o(n^2)。 (因为 k

def solve(testcase):
    N, Q = 10, 1
    h = [1 , 2 , 4 ,2 , 8, 1, 2, 4, 8, 16] # output 3
    #    ^---- + ---^   0  ^--- + --^ + ^
    k = [3]
    l_k = max(k)



    distances = [99999999999] * N
    distances[N-1] = 0
    db = [ [0]*N for i in range(N)]

    for i in range(N-2, -1, -1):
        minLocalDistance = 99999999999
        for j in range(min(i+l_k, N-1), i, -1):   
            minLocalDistance = min(minLocalDistance, distances[j] + (h[i] <= h[j]))
            db[i][j] = distances[j] + (h[i] <= h[j])
            
        distances[i] = minLocalDistance
    print(f"Case #{testcase}: {distances[0]}")

注意:这不同于经典的 min。跳跃问题

【问题讨论】:

    标签: python algorithm dynamic-programming


    【解决方案1】:

    考虑获得职位i 的最佳成本。它是较小的:

    1. 到达前面 k 个位置的最小成本加一(次优跳转);或
    2. 到达同一窗口中任何较低高度位置的最低成本(最佳跳跃)。

    案例 (1) 可以使用滑动窗口最小算法来处理,您可以在此处找到描述,例如:Sliding window maximum in O(n) time。这需要每个位置的摊销常数时间,或 O(N)。

    案例 (2) 有一个使用 BST 的明显解决方案:随着窗口的移动,将每个新位置插入到按高度排序的 BST 中。删除不再在窗口中的位置。此外,在每个节点中,将最小成本存储在其子树中。使用这种结构,您可以在 O(log k) 时间内找到任何高度界限的最小成本。

    情况 2 中的开销导致单个 k 值的总复杂度为 O(N log k)。这对于复杂性来说并不算太糟糕,但是这样的 BST 有点复杂,并且通常不会在标准库中提供。

    您可以通过认识到如果窗口中的最小成本是 C,那么优化跳跃只有来自成本 C 的前辈时才有益,因为成本 C+1 可以通过次优实现跳跃。

    然后,对于每个成本,您可以使用相同的滑动窗口最小值算法来跟踪窗口中具有该成本的节点的最小 高度。那么对于情况(2),您只需要检查最小成本的最小高度是否低于您要跳转到的高度。

    再次维护这些滑动窗口需要每次操作的摊销常数时间,导致整个单 k 值算法的 O(N) 时间。

    我怀疑尝试一次管理多个 k 值是否有任何好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多