我们要通过重复替换来解决递归关系:
T(n)=T(n-1)+logn
Run Code Online (Sandbox Code Playgroud)
我开始替换并得到以下内容.
T(n)=T(n-2)+log(n)+log(n-1)
Run Code Online (Sandbox Code Playgroud)
按对数乘积规则,log(mn)= logm + logn,
T(n)=T(n-2)+log[n*(n-1)]
Run Code Online (Sandbox Code Playgroud)
继续这个,我明白了
T(n)=T(n-k)+log[n*(n-1)*...*(n-k)]
Run Code Online (Sandbox Code Playgroud)
我们知道基本情况是T(1),所以n-1 = k - > k = n + 1,并在我们得到的中取代
T(n)=T(1)+log[n*(n-1)*...*1]
Run Code Online (Sandbox Code Playgroud)
显然n*(n-1)*...*1 = n!所以,
T(n)=T(1)+log(n!)
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这一点.答案只是O(log(n!))?我已经读过其他解释说它是Θ(nlogn),因此它遵循O(nlogn)和Ω(nlogn)分别是上限和下限.
i <-- 1
while(i < n)
j <--1
while(j < i)
j <-- j * 2
i <-- i + 1
done
Run Code Online (Sandbox Code Playgroud)
我对此的镜头将是O(log n)
内循环.而且我猜测外环是O(n)
一个整体的复杂性O(n log n)
.确认?
我在three.js中使用了一个数据gui.
不幸的是,我的gui非常大,我无法调整大小.我试过了autoplace=false
.
我该如何解决这个问题?
我的场景是一个包含整数的完美平衡的二叉树。
我已经搜索并找到了许多关于二叉树的最佳/最坏情况的解释。最好的情况是O(1)
(在根中找到目标),最坏的情况是O(log(n))
(树的高度)。
我几乎没有发现关于计算平均复杂度的信息。我能找到的最佳答案是O(log(n)) - 1
,但我想我不太明白(如果正确的话)这个平均情况是如何计算的。
此外,搜索不在树中的整数是否会产生相同的复杂性,我认为会,但任何煽动都值得赞赏。
我尝试在我的 Windows 7 64 位计算机上构建 GMP,所以我运行config.guess
并获取k10-pc-msys
. (我使用 msys2 和 mingw64)
然后我跑了
./configure --prefix=/c/gmp-6.1.0 --build=k10-pc-msys --enable-cxx
Run Code Online (Sandbox Code Playgroud)
但这会因此错误而退出
Run Code Online (Sandbox Code Playgroud)checking size of mp_limb_t... 4 configure: error: Oops, mp_limb_t is 32 bits, but the assembler code in this configuration expects 64 bits.
所以我再次运行了配置ABI=64
(考虑强制mp_limb_t
为 64 位),但这以相同的错误结束。在此之后,我尝试添加CC="g++"
(思考--enable-cxx
需求g++
),但我再次收到此错误。
我在谷歌上搜索了很多,发现在 GitHub 上向juliaLang报告的一个问题看起来很接近我的问题,但该解决方案似乎对我不起作用,因为我没有使用 Julia。
有谁知道这个错误并找到了解决它的方法?
注意:我看到 msys2 已经安装,我可以使用它。但是我的程序的运行时间仅通过使用 msys2 安装的 GMP 构建 NTL 就增加了大约 70%。我认为这是因为它不是为我的计算机构建的,所以它根本没有优化。
编辑:即使没有任何设置(只是./configure …
今天我遇到了一个同事在我写的应用程序中报告的 PhP-7 中的一个奇怪的错误/功能。归结为以下几点。
考虑以下:
echo date('Y-m-d', strtotime('first thu of Jan 2020'));
echo '<br/>';
echo date('Y-m-d', strtotime('first thu Jan 2020'));
echo '<br/>';
echo date('Y-m-d', strtotime('first wed of Jan 2020'));
echo '<br/>';
echo date('Y-m-d', strtotime('first wed Jan 2020'));
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我看到以下内容:
2020-01-02
2020-01-02
2020-01-01
2020-01-08
Run Code Online (Sandbox Code Playgroud)
奇怪的是,输出的第 3 行和第 4 行是不同的。为什么?of
在这种情况下是错误还是必须使用?
我一整天都在处理一个我似乎无法解决的问题。任务是证明编辑距离的递归实现具有时间复杂度 Ω(2 max(n,m) ),其中 n & m 是被测量单词的长度。
实现与这个小python示例相当
def lev(a, b):
if("" == a):
return len(b) # returns if a is an empty string
if("" == b):
return len(a) # returns if b is an empty string
return min(lev(a[:-1], b[:-1])+(a[-1] != b[-1]), lev(a[:-1], b)+1, lev(a, b[:-1])+1)
Run Code Online (Sandbox Code Playgroud)
来自:http : //www.clear.rice.edu/comp130/12spring/editdist/
我曾尝试为不同的短词绘制递归深度的树,但我找不到树深度和复杂性之间的联系。
来自我的计算的递归公式
m = length of word1
n = length of word2
T(m,n) = T(m-1,n-1) + 1 + T(m-1,n) + T(m,n-1)
With the base cases:
T(0,n) = n
T(m,0) …
Run Code Online (Sandbox Code Playgroud) algorithm complexity-theory big-o edit-distance levenshtein-distance
所以我很确定它是O(n)(但它可能不是?),但你如何用替换解决它?
如果假设T(n)<= c*n,那么归纳步骤是什么?
我对Big-Oh表示法有所了解.但是我如何解释O(O(f(n)))的含义呢?这是否意味着增长率的增长率?
我想要更好地理解这个想法O(n)
,所以我对此感到疑惑:
如果我们知道a> = b那么O(a+b)=O(a)
?
我知道O(a)+O(a)=O(2a)=O(a)
,但是我想知道它是否真的比它小一点,我的意思是 - 如果O(a+b)=O(a)
.
我认为这是真的,因为a+b=O(2a)
,但我想知道我是不是错了......
(如果a和b是常数,PS会是真的吗?)
谢谢!