两个人:
1)假设您正在设计一种新型应用程序,并且您正在提出新算法来表达概念和内容 - 尝试在该阶段主动不考虑优化技术是否有意义,甚至如果在你的脑海里,你担心它可能最终成为数百万元素的O(N!)?
2)如果是这样,那么为了避免限制在概念验证运行后你可以优化的酷功能- 你如何阻止这个程序员一生的习惯?我一直在尝试心理练习,纸质笔记,但我长大的基本上是计算汇编程序中的时钟周期,并且在充分考虑功能价值之前,我不断发现自己否决了过于浪费的潜在解决方案.
编辑:这是关于设计以前没有做过的事情(未知),当你甚至不确定它是否可以在理论上完成时,别担心手头有无限的计算能力.因此,"你必须在拥有原型之前进行优化,因为它是一个既定的计算原理"的答案并不是特别有用.
我说以下所有不是因为我认为你还不知道它,而是在你镇压内心批评者时提供道义上的支持:-)
关键是要保持理智.
如果你发现自己编写的Theta(N!)算法有望扩展,那么你就疯了.你必须抛弃它,所以你现在可以开始找到一个你可能实际使用的更好的算法.
如果你发现自己担心一个Pentium代码(每个用户按键只执行一次)会花费10个周期还是10K周期,那么你就疯了.CPU空闲率为95%.给它一万个小周期.如果必须,请提高增强票,但要慢慢离开汇编程序.
一旦确定该项目是"编写研究原型然后将其演变为真实产品",还是"编写研究原型".显然有一种期望,如果研究成功,将会有另一个相关的项目.
在后一种情况下(从评论中听起来就像你所拥有的那样),你可以负担得起只能用于N <= 7的东西,甚至会导致从这里到达辛辛那提的限制.那仍然是你不确定你能做的事情.一旦您对问题有所了解,那么您将更好地了解性能问题.
你正在做的事情是在现在浪费时间(考虑到你的研究证明无关紧要)和浪费时间之间取得平衡(因为你现在没有考虑到事情变得很重要).你的研究风险越大,你做的事情就越开心,并担心你以后做了什么.
我的答案是测试驱动开发.通过预先编写所有测试,您可以强迫自己只编写足够的代码来实现您正在寻找的行为.如果需要时序和时钟周期,那么您可以编写测试来覆盖该场景,然后重构代码以满足这些要求.