【问题标题】:Dynamic programming, time complexity issue动态规划,时间复杂度问题
【发布时间】:2018-02-15 17:30:46
【问题描述】:

我需要找到区间[a,b]中的所有数字,满足两个条件:

  • 能被 k 整除
  • 数字之和应在区间[c,d]内
  • 1 ≤ k ≤ 10^11; (1 ≤ a, b 

(1 ≤ k ≤ 10^11) (1 ≤ a, b 

幼稚的实现(即使有改进)太慢了。 有人可以帮助“动态”实现它吗? 或者也许一些有用的建议和链接? 我将不胜感激。

【问题讨论】:

  • 是什么让您觉得动态规划是一种可行的方法?
  • 请限制 a、b、c、d。
  • 动态编程 (DP) 基于重复部分结果的计算——子计算。这个问题没有任何明显复杂性的重复计算。此外,这个问题本质上是线性的,所以我不清楚你认为 DP 在哪里可以加快解决方案。发布您当前(缓慢)的解决方案?
  • @Rishav ~ (1 ≤ k ≤ 10^11) (1 ≤ a, b 
  • b ≤ 99) 应该是 d

标签: algorithm data-structures dynamic-programming


【解决方案1】:

我不认为动态编程可以帮助你。 第一个条件很容易处理——你以 k 的步长迭代 [a,b] 范围。所以复杂度是 O((b-a)/k)。 至于第二个条件,您能否澄清其中的“b”是否与第一个条件中的“b”相同?如果是这样,那么利用它非常简单,结果是一个元素或一个空列表。所以复杂度是O(1)。 如果“b”不同,我无法想象如何利用第二个条件改进 O((b-a)/k)。

【讨论】:

  • 谢谢,修正了有问题的时间间隔。
猜你喜欢
  • 2022-06-16
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
相关资源
最近更新 更多