gpt4 book ai didi

java - 动态规划打破一个字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:02 26 4
gpt4 key购买 nike

目标是计算在用户给定的断点处断弦的成本。因此,让我们假设以下内容:String 的长度 = 10 所以 lengthArray = [1,2,3,4,5,6,7,8,9,10]和 BreakPointArray = [5, 3, 2, 6, 1]。现在我们不必更改用户给出的中断顺序。

我能够找出这个问题的树结构

enter image description here

所以在给定的断点处断开字符串的总成本 = 10+5+5+3+2 = 25但是我无法提出实现部分。以下是我的方法:

我从BreakPoint = 5开始,把lengthArray分成

左长度 = [1,2,3,4,5]

右长度 = [6,7,8,9,10]

在 BreakPoint = 3 处,我检查它是否应该在 leftLength 数组下,所以我再次将 leftLength 分成两部分

左长度 1 = [1, 2,3]

rightLength1 = [4,5]

在 BreakPoint = 2 处,在 leftLength1 下,所以再次分成两部分

leftLength2 = [1,2] 和

rightLength2 = [3]

现在我在 BreakPoint = 6 时卡住了,因为它在上面的 rightLength 之下。有人可以帮助我如何跟踪我所做的所有分区。我如何返回到第一个 rightLength 数组来计算断点 6 的成本。我正在尝试实现此 Java。

最佳答案

对不起,这是Lua,但是DP算法已经够清楚了

-- input constants
local L = 0
local R = 10
local BreakPoints = {5, 3, 2, 6, 1}

-- fill the arrays
local NearestRight = {}
local NearestLeft = {}
for k = L, R do
NearestRight[k] = R
NearestLeft[k] = L
end

-- calculating cost
local cost = 0
for _, BreakPoint in ipairs(BreakPoints) do
local left = NearestLeft[BreakPoint]
local right = NearestRight[BreakPoint]
cost = cost + (right - left)
for k = left + 1, BreakPoint - 1 do
NearestRight[k] = BreakPoint
end
for k = BreakPoint + 1, right - 1 do
NearestLeft[k] = BreakPoint
end
end
print(cost) -- outputs 25

时间复杂度是O(cost)

关于java - 动态规划打破一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com