簡體   English   中英

從上到下到自下而上的算法(DP)

[英]Going from a top-down to a bottom-up algorithm (DP)

我創建了此算法來計算最長的回文序列(在鏡像時相同的詞,即“ aba”,“ racecar”),並使用遞歸自頂向下方法進行了計算。 我知道有可能將它們從下往上轉換為迭代算法,但是我很難看到如何實現

我的密碼

def palindrome(string, r = {})
    return 1 if string.length == 1
    return 2 if string[0] == string[1] and string.length == 2
    return r[string] if r.include?(string)
    n = string.length
    if string[0] == string[n-1]     
        r[string] = palindrome(string[1..n-2],r) + 2
    else
        r[string] = [palindrome(string[0..n-2],r), palindrome(string[1..n-1],r)].max
    end
end
  1. 當您從數組中獲取項目時使用負數時,該數組從末尾開始計數元素,因此您不必保留n變量

     if string[0] == string[-1] # <= same as string[n-1] r[string] = palindrome(string[1..-2],r) + 2 # <= same as string[1..n-2] 
  2. 我不知道這有多好,但是這是一個自上而下的建議:

     def palindrome(string) chars = string.chars chars.length.downto(1).find do |length| chars.each_cons(length).any? { |cons| cons == cons.reverse } end end 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM