【问题标题】:Determinating Complexity time确定复杂性时间
【发布时间】:2015-06-11 02:59:27
【问题描述】:

我正在为大学做一个关于如何确定复杂性的项目,假设所有关于算法的知识都是取决于数据大小的运行时间。

我使用的算法类型有多项式(n2、n3、..、n6)、对数和指数。

例如,程序的一个输入它可以是:

n 1 2 3 4 5 6 7 8 9 10 11 12(数据大小)

T(n) 0,9 / 1,6 / 2,3 / 3,0 / 3,7 / 4,4 / 5,1 / 5,8 / 6,5 / 7,2 / 7,9 / 8,6

所以,我有一个多项式和对数复杂度的算法, 目前,数据最大为 20

多项式:

while answer = -1 and then j > 12 loop
aux:= true;
  for k in 1..j loop
    c := Polynomial(k+1);
    Polynomial(k) := Polynomial(k+1) - Polynomial(k);  
    aux:= aux and abs(Polynomial(k)) < abs (c * 0.005);  --Almost equal
  end loop;
   if aux then
     aux := 19 - j;
     end if;
   j := j-1;
end loop;

我已经走到了指数式的死胡同。 有人可以给我一个提示吗? 太感谢了。

【问题讨论】:

  • 您为T(n) 提供的值是什么意思?
  • 这不是 Ada 相关的问题。当然,任何 Ada 编译器都会拒绝 aux := 19 - j!
  • 这可能在 cs.stackexchange.com 上问得更好
  • 如果我记得几年前的情况,应该是 O(n^2)

标签: algorithm complexity-theory


【解决方案1】:

这听起来像是一个随机问题,即在给定一组离散点的情况下找到最佳模型拟合。我要做的第一件事是确定类型:对数/多项式/指数。为此,您可以研究每个点的离散导数。如果一阶导数的值在减少 => 对数。要再次确定它是多项式还是指数,您应该研究导数,但这次不仅仅是一阶。可以观察到以下情况:指数函数的连续求导也是指数函数,而多项式函数将变为线性(导数接近 0)。因此,如果经过几次推导,您的值接近 0 => 多项式。

已经确定了模型的类型,您现在希望将点拟合到该模型。您可以借助 Eigen 库和主要是 their implementationLevenberg–Marquardt 算法在 C++ 中完成此操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2022-01-15
    • 2021-05-29
    • 2018-01-11
    • 2012-09-16
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多