如何找到n选择地板的渐近生长(N/2)?我试过 使用扩展并获得等于 [n*(n-1)*........*(floor(n/2)+1)] / (n-floor(n/2))! 有什么想法我该如何从那里去? 任何帮助都得到赞赏,更喜欢提示 解决方案 使用 Stirling的近似,您可以得到 n! = \sqrt{2n\pi}(n/e)^n 如果将其替换为$ \选择{n} {n/2} $,则最终应最终得到 2^{n+1/2}/\sqrt{n\pi} ps.您可能需要在实际使用答案之前检查我的数学: - ) 其他解决方案 我同意上面的答案,但想提供更多的深度.假设n是,我们有: 要上限,我们使用 stirling的近似和分母中的下限(例如,我们想要最大的分子和最小的分母).这将为我们提供上限: 然后,我们将指数分布在分母中以获取: 取消,移动从分母到分子和简化;我们得到: 遵循相同的过程,下界的下限,将斯特林的大约在分母中的大约
以下是关于 asymptotic-complexity 的编程技术问答
分析并行算法时,我们倾向于集中工作(T1),跨度(T∞)或时间. 我感到困惑的是,如果给出了一个算法进行分析,我需要寻找什么关键提示,用于工作,跨度和时间? 假设此算法: 如何分析上述算法以找到工作,时间和跨度? 解决方案 原点: 婴儿车在上个世纪初期是在70年代初引入的,希望它可以允许在解决计算上的严重问题方面提前表现.然而,这些计算设备架构仍然必须依靠的主要限制来降低承诺或更好的期望. 理论: t 1 =处理的时间量,一旦在pure- t ∞ =处理计算图的时间量(指示, >经常忘记终于无环,图)一旦在"正义"中执行 - [CONCURRENT]> ,但确实拥有无限量的无限实际资源时间,因此允许任何程度的并行性实际,但只是偶然地发生. (警告通知:您的教授不需要享受这种解释,但是现实规则 - 无限处理器还不够,因为任何其他资源也必须以无限的数量和能力存在,无论是RAM-ACCESSES, IO-S,Sensorics等人,因此所有这些都必
我在数据结构中读取书籍复杂性层次结构图,即n大于2 log n .但无法理解如何以及原因.在使用2为n的简单示例时,我得到的值等于n. 书中没有提及,但我假设它是基础2(因为上下文是ds复杂性) a)是O(n) > O(pow(2,logn))? b)O(pow(2,log n))比O(n)更好? 解决方案 请注意2 log b n = 2 log 2 2 n/log 2 2 b = n (1/log 2 b).如果log 2 b≥1(即b≥2),则整个表达式严格小于n,因此是o(n).如果log 2 b 1 +ε,因此不是o(n).因此,它归结为日志基库.如果b≥2,则表达式为o(n).如果b 希望这会有所帮助! 其他解决方案 某个地方有一个恒定的因素,但是假设log是指自然对数,那么使O(pOW(POW(2,log n))等于O(POW(POW(2,log N))的位置并不是正确的位置. n = 2 ** log2(n)
A O(n)算法检测一条线是否相交的凸多边形在检查多边形的任何边缘是否与该线相交,并查看交叉点的数量是否为奇数. . 是否存在渐近算法的渐近算法,例如o(log n)一个? 解决方案 LHF的答案接近正确.这是一个可以解决他的问题的版本. 让多边形具有逆时针顺序的顶点V0,V1,...,Vn.让点x0和x1在线上. 注意两件事:首先,找到两行的交点(并确定其存在)可以在恒定时间内完成.其次,确定一个点在左侧还是可以在恒定时间内完成线的右侧. 我们将遵循相同的LHF基本思想,以获取O(log n)算法.基本情况是多边形具有2或3个顶点时.这些都可以在恒定时间内处理. 确定线(v0,v(n/2))是否相交(x0,x1). 案例1:它们不相交. 在这种情况下,我们感兴趣的线是在分裂多边形的线的左侧或右侧,因此我们可以重新浏览到多边形的一半.具体来说,如果x0在(v0,v(n/2))的左侧(x0,x1),所以我们知道多边形的"一半"中没有相交.
i具有一个Java函数,该函数接收矩阵(二维数组[] []),并为此数组创建一个动态的更改选项,然后递归为动态数组的每个选项创建一个动态数组. 最终对于n个选项之一中的每个选项,它创建了其他选项. 有人告诉我,时间复杂的功能是t(n)= t(n)*n,这可能吗?大符号中它的渐近时间复杂性是什么? 解决方案 如果复发关系为t(n)= nt(n),则递归永远不会停止.这种复发的关系意味着每个子问题的大小与原始问题相同.在递归函数中,如果每个子问题与原始问题的大小相同,则意味着递归不会结束.从您的问题中,听起来您的功能在原始矩阵上使用一次,然后在第一个功能应用程序的结果上使用一次,然后停止.这并不是真正的递归函数,也不真正符合计算时间复杂性的复发关系模型.不过,计算时间复杂性也非常简单,因为您真的可以添加所有计算.
我想渐近地比较以下功能,然后按升序排列.还要求正确的解释 lg((√n)!),lg(squareroot(n!)),squarerOtlg(n!),(lg(√n))! p> 解决方案 如果您想知道"通用解决方案" ,并且您经常遵循渐近函数比较.这是我推荐的: 使用f(n) = O(g(n)) iff limit (n approaches +inf) f(n)/g(n) exists and is not +inf 您可以使用计算机代数系统//maxima.sourceforge.net/" rel =" nofollow noreferrer"> maxima ,此处在关于限制的最大文档. 因此,检查lg(n)*lg(n) = O(sqrt(n))可以是dane检查(lg(n)lg(n))/sqrt(n)的限制: (%i1) limit( (log(n)^2) / (sqrt(n)), n, inf); (%o1)
是否有这种复杂性的著名算法? 我在想一个跳过列表,其中节点的级别不是由尾部硬币折腾的数量确定的,而是使用(1,log(log(n))时期随机生成的数字(具有统一分布)确定节点的水平.这样的数据结构将具有o(n/log(n))复杂性的发现(x)操作(我认为至少是).我很好奇是否还有其他东西. 解决方案 通常,使用四个俄罗斯人的方法加快现有算法.经典的四个俄罗斯人加速降低了从O(n 2 )上进行矩阵/矢量产品的成本到O(n 2 /log n).在两个长度-N字符串上用于序列对齐的标准动态编程算法在时间O中运行(N 2 ),可以将其降低至O(N 2 /log n)通过使用类似的技巧. 同样,前缀均衡问题 - 在支持" flip"和"序列前缀"操作前缀的" flip"和"均衡"操作的同时,可以在时间o中解决" flip"和"均衡"(log n/log log log of of of of flip''和"均等"). n)使用四俄的速度. (请注意,如果您表示运行时作为k =
我正在尝试计算以下复杂性 指数递归函数. ismember()和isnotComputed()函数降低了数字 递归电话. 此代码的输出是一组[],b [],它在 递归功能调用的初始部分. 将感谢有关建立递归关系的任何意见 问题将导致该程序分析. 没有函数ismember(),isnotComputed()此代码具有O(2^n)的复杂性.从经验上(具有以上两个函数),该代码具有O(| n^2 || L |)的复杂性.其中l是递归调用的数量,即生成的结果. 我正在尝试尽可能准确地计算此代码的复杂性,以便我可以将其效率与本质上相似的其他算法进行比较. void RecuriveCall(int A[], int ASize, short int B[], int BSize, int y, short int level) { int C[OBJECTSIZE]; short int D[ATTRIBUTES
我尝试了递归树方法,因为主方法不适用于此复发,但似乎也不是正确的方法,任何帮助都将不胜感激! 解决方案 我的派生中某处有错误,或者您的语句中有错误. 您通过展开递归来做到这一点: T(n) = T(n/2) + T(n/4) = 2T(n/4) + T(n/8) T(n) = 3T(n/8) + 2T(n/16) T(n) = 5T(n/16) + 3T(n/32) .... T(n) = F(i + 1)T(n/2^(i-1)) + F(i)T(n/2^i) 其中F(i)如果A fibonacci编号. . 使用边界条件T(n/2^i) = T(1)有n = 2^i - > i = log2(n). T(n) = F(log2(n) + 1) T(2) + F(log2(n)) T(1)等于F(log2(n) + 1) 现在使用此公式: 并将其剥离为phi^n(5平方根与复杂性无关,第二个thi^n -> 0如果n->inf)您将得到:
in big lign n符号究竟是什么?,最受欢迎的答案包含以下语句: 例如,合并排序最坏的情况既是O(n*log(n))和Omega(n*log(n))> - 因此也是Ө(n*log(n)),但也是O(n^2),因为n^2渐近地"大于".但是,它是不是 Ө(n^2),因为该算法不是Omega(n^2). 我有两个问题: 您如何确定最坏的情况是O(n*log(n))和Omega(n*log(n)).在"算法简介"中,您可以通过计算每个语句执行的次数和成本来确定插入排序的时间.是否有类似的Omega和Omega? 的方法 合并的最差案例如何O(n*log(n))以及O(n^2)? 解决方案 第一件事,您的问题中的链接并未指向接受的答案.它指向最受欢迎的答案. 现在,一个一个一个一个... 您如何确定最坏的情况是o(nlog(n))和ω(nlog(n)).在"算法简介"中,您可以通过计算每个语句执行的次数和成本来确定插入排序的时间. O和Omega是
我有这种复发: T(n)= 2T(n/2) + (n-1) 我的尝试如下: 树是这样的: T(n) = 2T(n/2) + (n-1) T(n/2) = 2T(n/4) + ((n/2)-1) T(n/4) = 2T(n/8) + ((n/4)-1) ... 树的高点:( n/(2 h )) - 1 =1⇒h= lg n -1 = lg n -lg n -lg 2 最后一个级别的成本:2 h = 2 lg n -lg 2 =(1/2)n 所有级别的成本直到H-1级:σ i = 0,...,lg(2n) n-(2 i -1),这是一个几何序列,等于(1/2)((1/2)N-1) so,t(n)=θ(n lg n) 我的问题是:对吗? 解决方案 不,不是.您的最后一个级别的成本是错误的,所以您从那派出的东西也是错误的. (我假设您想自己找到复杂性,除非您提出任何提示.) 编辑:根据要求的一些提示 要找到复杂性,通常一种有用
我和我的朋友发现了这个问题,我们无法弄清楚如何解决问题.它不是微不足道和标准的替代方法并不能真正起作用(或者我们无法正确应用)这应该是与等级问题的枢轴的QuickSort. 这是复发: t(n)= t(n^(1/2)) + t(n-n^(1/2)) + n 任何帮助将不胜感激.谢谢! 解决方案 首先让它轻松: t(n)= t(n-n^(1/2)) + n,迭代的数量为n^(1/2),在每种迭代中,您都有N-K sqrt(n)时间复杂性,因此总时间复杂性为:∑ n-k sqrt(n)对于0 现在解决自己的问题: T(n) = T(n^(1/2))+T(n-n^(1/2)) + n 再次计算到达到零或1的步骤数:第一部分`t(n^(1/2))花费O(log log n)时间,第二部分将O(sqrt(n))次数带到到达零或1(请参阅我的因此,第二部分在第一部分中占主导n*sqrt(n).
从我的理解中,hashmap插入为o(1),对于一个阵列列表,插入为o(n),因为对于哈希图,哈希函数计算哈希码和索引索引并插入条目和阵列列表每次进行比较输入一个新元素. 解决方案 首先,复杂性o(1)的操作并不总是比复杂性o(n)的操作要少. o(1)仅表示操作需要恒定的时间(可能是任何值),而不论输入的大小如何. o(n)意味着操作所需的时间随输入的大小线性增加.这意味着在理论上,O(1)仅在n是无穷大时才比O(n)少的时间. . 现在来了您的示例,ArrayList.add()操作以摊销的恒定时间运行,这意味着尽管可能需要花费特定迭代的时间O(n)时间,但随着时间的推移,平均复杂性分布在O(1).有关摊销恒定时间的更多信息,请参阅 this 问题. 其他解决方案 ArrayList比HashMap在ArrayList的最后添加项目时要快,因为无需将ArrayList中的元素移至右侧,您可以看到HashMap的效率如果在ArrayList的前面添加一个项目,例
我想知道,使用Big-Theta符号在以下算法中可以返回该过程的最小值和最大值是什么.该算法是: procedure F(𝐴[1..n]) s = 0 for i = 1 to n j = min(max(i,A[i]),n³) s = s + j return s 解决方案 编辑:删除了原始答案,因为它是错误的问题. 分析取决于以下行: min(max(i,A[i]),n³) 如果我们找出了此案例,那么我们可以轻松地找出结果的案例.我们必须回答i > A[i],然后是否i和A[i]大于n^3. . i > A[i]和i > n^3.情况并非如此,因为i A[i]和i
我认为这可能是有关大型符号的初学者问题.例如,我有一种算法,该算法将整个列表递归(O(n))分开,然后将其放回原处(O(n)).我认为这意味着效率为O(n) + O(n).这会简化为2o(n),o(2n)或o(n)吗?据我所知,这将是o(2n),并且使用渐近符号的规则,您可以删除2,从而给出O(n)的效率. ,如果我们试图找到一个下限,那么该规则仍然适用吗?如果ω(n) +ω(n)=ω(2n),您仍然可以丢弃2吗?我认为不会,因为您实际上会降低下限(因为n 解决方案 这简化为2o(n),o(2n)或o(n)?" 所有上述所有内容,但前两个都过于复杂. o(n)将是规范符号. 2*n与n成正比,因此,如果对于足够大的n(o(2*n)),最大成本不超过2*n,则最大成本也不超过与n成正比的对于足够大的n(o(n)). 如果我们试图找到一个下限,那么此规则仍然适用吗? 绝对是. 2*n与n成正比,因此,对于足够大的n(ω(2*n)),微量成本与2*n不少于2*n
我最近陷入了争论/辩论,我正在尝试明确的解决方案的判决. 众所周知, n!生长很快,但是 ,足以"隐藏"所有可能添加的其他常数? 让我们假设我有这个愚蠢而简单的程序(没有特定的语言): for i from 0 to n! do: ; // nothing 鉴于输入为n,因此显然是 O(n!) (甚至 ϴ(n!) ),但这在这里不相关) . 现在让我们假设此程序: for i from 0 to n do: for j from 0 to n do: for k from 0 to n! do: ; // nothing 鲍勃声称:"这个程序的复杂性显然是 O(n)O(n)O(n!) = O(n!n^2) = O((n+2)!) ." 爱丽丝回答:"我同意你的看法,但实际上,如果您说复杂性为O(n!),那将是足够的,因为 O(n!n^k) = O(n!) 对于任何k >= 1常数."
我知道,就复杂性而言,o(logn)比O(n)快,它比O(nlogn)快,它比O(n2)快. 但是O(N2)和O(N2Log)或O(N2.001)和O(N2Log)呢? T1(n)=n^2 + n^2logn 此功能的大哦和欧米茄是什么?另外,什么小哦? 对: T2(n)=n^2.001 + n^2logn 大哦,现在有什么区别吗? 我很难理解如何将logN与n的能力进行比较.与logn大约是n^0.000000 ... 1或n^1.000000 ... 1? 解决方案 O(n^k)对于所有k, k' >= 0和k' > k O(n^2)比O(n^2*logn) 快得多 请注意,您只能忽略常数,没有任何涉及输入大小的东西可以忽略. 因此,T(n)=n^2 + n^2logn的复杂性将是两者中更糟的,即O(n^2logn). 小哦 Little OH以松散的方式是保证的上限.是的,它被称为小,并且更具限制性. n^2 = O(n