English 中文(简体)
提前优化的实际规则[封闭]
原标题:Practical rules for premature optimization [closed]

看来,“Premature Bestization”一语是当天的序言。 由于某种原因,讲解语的人似乎特别认为避免过早优化是一个积极的目标,而不是单纯避免分裂的自然结果。 问题是,这一术语开始越来越多地适用于完全不适当的案件。

例如,我看到越来越多的人对算法的复杂性表示不担忧,因为过早优化(例如Help ,在两种特性中划出一个NSArray(有NSSortDescriptor?))。 坦率地说,我认为,这只是悲伤,令我们惊讶的是严守计算机科学。

但是,在我看来,也许考虑到算法的复杂性和性能,正在采用组装停机和其他目前认为没有必要的优化技术。

你认为什么? 我们现在是否在奥(n^n)和奥(n!)复杂算法之间作出决定是没有意义的? 关于O(n)诉O(n*n)?

你们认为“最佳地位”是什么? 你们有意识或无意地回避了什么实际规则?

http://www.ohchr.org。

我知道我的描述是一般的,但我对<>具体、实用的规则或人们为避免“最佳地位”而使用的最佳做法感兴趣,特别是在电话平台上。

回答这一点要求你首先回答“什么是成熟前优化? 由于这一定义显然差别很大,任何有意义的答案都要求提交人界定这一术语。 因此,我不真的认为这是一个禁止化学武器组织的问题。 同样,如果人们不同意,我会改变。

最佳回答

什么是过早优化?

在你知道是否值得这样做之前,最优化是优化你的法典(通常是为了业绩)。 提前优化的一个例子是优化守则,然后才能发现业绩瓶颈之处。 更极端的过早优化事例是,在你管理自己的方案并确定其运行速度太慢之前,实现最佳化。

我们现在是否在奥(n^n)和奥(n!)复杂算法之间作出决定是没有意义的? 关于O(n)诉O(n*n)?

它取决于N的大小,以及贵国的法典将多多少得到呼吁。

如果一个人的表现总是不到5岁,那么症状的表现就无关紧要。 在这种情况下,常数的规模会更大。 简单的O(n * n)算法可用于小型N的更复杂的O(nlog n)算法。 或者,可以衡量的差别可能太小,以致无法解决。

我仍然认为,太多的人花时间优化了90%的法典,而不是10%。 如果某些法典几乎从未采用过,则无一例外。 尽管你知道算法的复杂性并不理想,但有时只是简单地做事,而且工作进展是好的选择。

每小时,你用最优化的手法就少了一小时,你可以花钱增加实际想要的人的特征。

问题回答

我的投票对大多数人来说是最好的,他们认为是弱小点,但他们却不 profile。

因此,无论你知道算法的多少,也不管你写的your代码如何,你都不知道在你的模块之外发生什么情况。 你们所呼吁的听众在幕后做了些什么? 你们能否始终保证,特殊的机会顺序是最快的?

这正是最佳地位的含义。 如果你认为是一种优化,而这种优化并未通过简介或其他明确工具进行严格测试(通过机会锁定周期并不是一件坏事,而是只告诉你的绩效特征,而实际上的电话比时间更重要,通常更是早。

@k_b在我前面说得很好,我也这样说。 这样做是正确的,使之简单明了,然后是简况,然后是 t。 必要时的答复。

Order of priority: 1. It has to work 2. It has to be maintainable 3. It has to be machine-efficient

这是我第一个方案拟订课程的第一个星期。 <1982年>。

“最佳地位”是指在优先事项1或2之前审议优先事项3的任何时间。

请注意,现代方案拟订技术(示范和接口)旨在使这种优先顺序更加容易确定。

一个灰色区域:在初步设计期间,你do必须检查贵方的解决办法并非必然会缓慢。 否则,在你至少拥有某种工作守则之前,不会对业绩表示担忧。

对某些人来说,优化是成文法的一部分,时间不成熟。 为了可行,我谨优化和克制。 不达到最佳程度的建议,是为那些希望优化的人提供的。

iphone programmers in particular seem to think of avoiding premature optimization as a pro-active goal

大部分的“i”代码与ID有关。 并非完全需要优化。 不需要选择一种会造成不良业绩的不良设计,但一旦你开始设计好,就不需要优化。 因此,在这方面,避免优化是一个合理的目标。

What do you consider "premature optimization"? What practical rules do you use to consciously or unconsciously avoid it?

利用Agile办法(通过与用户的互动对要求进行改进的校正)是有用的,因为人们认识到,在与用户举行下一届会议之后,目前的接口可能会发生巨大变化,从而更容易侧重于开发申请的基本特征而不是业绩。

否则,如果你花了许多时间优化一个在届会之后与用户完全弃置的特征,那就应当给你这个信息。

十分复杂,甚至选择复杂,是一个应该隐藏在一个接口后面的问题。 例如,清单是一个摘要,可以采用不同方式,在不同情况下提高效率。

有时避免过早优化可有助于设计,因为如果你根据你今后需要优化的想法来设计,那么你就更倾向于抽象地发展(例如,清单),而不是执行(例如,Array或关联清单)。

这样做除了避免分裂外,还会导致更简单、更可读的法典。 如果安排到接口,可以在日后转换不同的执行方法。 初步优化可能会造成执行细节过早暴露的风险,再加上其他软件组成部分,而后者不见这些细节。

What practical rules do you use to consciously or unconsciously avoid it?

避免不必要的优化的一个办法是考虑相对成本收益:

A. 方案主管优化编码+成本的成本,以测试上述优化+由于上述优化而维持更为复杂的代码的成本

页: 1

B) 提升软件操作或简单购买另一个软件的服务器的成本(如果可以计算)

如果A >> B认为它是否正确。 [在贵组织可能或可能不关心的B的环境成本发生时,不知]

这比仅仅适用于premature Bestation,但可以帮助在开发商中注入一种感觉,即花费时间做优化工作是cost<>m>,除非在实际事项上出现真正的“可衡量差异,例如:需要服务器的数量或经过改进的反应时间对客户满意程度。

如果管理层看不到减少的美元的好处,客户在更好的反应时间看不到这一好处,那么你为什么这样做。

我认为这是一个常识的问题。 有必要了解大局,或甚至当面发生的事情,以便能够在所谓的“成熟”运动有正当理由时考虑。

在需要网络服务电话以根据当地清单内容计算新数值时,我先谈一些解决办法。 这样做的方式是按价值提出网络要求。 有时发出几个价值观还为时过早。 用于多个业务的数据库交易,即多字。

在算法方面,首先最重要的事情是使其尽可能正确。 当时对 st和肥皂问题的担忧是疯狂的。





相关问题
How to add/merge several Big O s into one

If I have an algorithm which is comprised of (let s say) three sub-algorithms, all with different O() characteristics, e.g.: algorithm A: O(n) algorithm B: O(log(n)) algorithm C: O(n log(n)) How do ...

Grokking Timsort

There s a (relatively) new sort on the block called Timsort. It s been used as Python s list.sort, and is now going to be the new Array.sort in Java 7. There s some documentation and a tiny Wikipedia ...

Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Enumerating All Minimal Directed Cycles Of A Directed Graph

I have a directed graph and my problem is to enumerate all the minimal (cycles that cannot be constructed as the union of other cycles) directed cycles of this graph. This is different from what the ...

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...