对等的排雷工作上一份报告,显示每周(星期日至星期六)提前的每个雇员在我们的小型咨询公司。有一段代码,他写道,表示列相对应的几天中目标的周。他算法如下:

  1. 得到这一天的星期一个月第一日。如果今天是星期天,设置一个标志,到零;否则,将其设置为一个。
  2. 迭代过所有的日子的一个月。如果今天是星期天,增加的标志。然后,如果标志的价值等于每周要显示的,显示柱相对应的前一天;否则,隐藏柱。

当然,该标志指示什么当前的一周。

我建议另一个算法:

  1. 获得哪天月份第(F)和最后的(L)天的指定的周。例如,第一个星期的2009年开始在星期二的第1次和结束在星期六第3。
  2. 迭代过列相对应的1天到F-1和隐藏他们。
  3. 迭代过列相对应的天F L,并显示他们。
  4. 迭代过列相对应的天我+1DaysOfMonth,并隐藏他们。

"困难"的一部分,在我的算法是第1部分。我的意思是"困难",作为"难以理解",因为算法的复杂性这样做是不变的。和我的算法的优点是具有更严格的循环。我对等的循环并比较每一个月的一天。我没有。

这是一个小例子,你可能会说,在优化这里是有点太偏执狂。但他的编程方式不会改变一下,当我们写实际性能至关重要的代码。

他的代码也是充分的,这些试验:

/* doSomething() doesn't change the state of the relevant variables. */
if (condition)
{
    flag++;
    if (flag > test)
        doSomething();
}
else
    if (flag >= test)
        doSomething();

当然,这是可以做到这样的:

if (flag >= test);
    doSomething();
if (condition)
    flag++;

我做什么?!?!?!

编辑:我校正的比较,在代码样本。

有帮助吗?

解决方案

这是你的任务或他的吗?如果其他的,让他做。我是一个人兴旺的效率,事实上,我会变得非常沮丧的东西时似乎效率低下并超出我的控制。

有超过200人在那么谁可以把我的最'高效率'的想法、算法和代码的耻辱。可能更多,你不能去通过rep单。如果Linus Torvalds自己的签名,他开始在1像其余的我们。

你有什么要考虑是,人们需要能够维持的代码,他们写。这意味着,他们必须了解它,如果他们生下了它。甚至如果有人证明另一种算法有效得多比我的自己,我不会用它,除非我 舒适 与。

如果这是一个联合项目,编写它自己的方式,显示出加速,然后再花一些非常、非常有耐心小时你对帮助他真的抓住它。

回头上的东西你写的在5年前, 每个人都有学习做 和每个人都没有的东西在他们自己的速度,特别是学习。

其他提示

我认为你的朋友已经正确的想法。采取的算法,这显然是正确的算法,这将需要一个小时来解释,但是,没有特定的绩效目标,更快。

如果你有一个特定的性能要求,如'所代码需要能够得到正确的结果对于所有月份在下一个十年内的200微秒内在机X', 简单的代码失败的要求,然后你可以考虑使用你的版本。

(代码样本的你确实是很明显更好地在你的办法,因为它不太令人费解。)

从你的介绍,我不知道我不同意你的同事。这里的关键问题是,是否这段代码是 表现的瓶颈.

说服 切换到你的算法你会来 分析应用程序有问题 并告诉我这块代码的业绩至关重要的。然后让你改变和简介。这样,你有一个 目标比较的基础.

如果有一个有意义两者之间的差异算法那么你们两个可以讨论是否值得做的开关。

如果你担心页载时间的一个网络应用程序,请记住的教训 高性能的网站雅虎能准则 -你如何处理CSS,javascript和缓存将有更大的影响比优化算法运行,服务器上。

主张优化没有测量仅为危险的,因为忽略了性能影响天真的算法。

那么你不应该干扰,因为很明显你错了...两块代码不是相当的。只是带条件=1,标志=0和测试=1

G'day,

我建议,你应该赞成简单的算法 执行在约束你 过聪明,过于复杂的算法,提供没有真正的增益。以我的经验这些各种各样的太聪明的技巧,更有可能变成一个未来维护的噩梦!

这种想法是更好地表达的以下的话:

"主管的程序是充分认识到严格限制他自己的头骨;因此他的办法编程的任务完全的谦卑,除其他事情,他可以避免聪明的技巧像瘟疫。" -Edsger Dijkstra在他的1972年ACM图灵讲座"谦卑的程序员"

顺便说一句,这份文件是一个伟大的阅读!随着他的许多其他文件,可在网上在 E.W.Dijkstra的档案

禾田

干杯,

我没有看到这里的问题...虽然他有点迂回方式获得的目标,他不会到达那里。

这一发言,我要说的话不应该是采取了上下文:但是总会有人做这样的-这是不错的,恰恰相反...他也许不知道一个很好的方式来做事,但是他不知道如何获得的结果无论如何丑他的方法。
这可以是一个真正救星的时候没有人知道的校正算法进行的东西...有机会他就会 鸭子带它 不知何故。

我同意普遍的情绪这里:如果一个性能的改进会使代码显着更多的困难阅读,那里有最好是一个很好的理由作出这一改变。

另一方面,这并不意味着我们应该总是满足于 第一件想到的.有时有明确优质的替代品,同样可读或几乎如此。

如果你想说服你的同事采取选择自己的算法说真的,你应该选择你的战斗,仔细。不要试图把他的世界颠倒和部队的问题在每一种情况下你会发现。开始做你的建议时,才可以认为替换算法,是明显的优越,也清晰,并随时准备返回,如果他抵抗。

如果你感觉狡猾的,你甚至可能会给他提示,要求引导性的问题,或任何其他技术可以认为,以帮助他图通过自己。

我感觉到你的痛苦。程序员都是真的stubburn性质。每个人都有他自己的原则和规则构建的程序。如果其他观点相撞的一些然后,改变程序员的意见是喜欢移动的根本支柱之一的摩天大楼的建筑。:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top