Algorithm 我如何让同行相信算法很重要?
我的一位同事正在写一份报告,显示我们小型咨询公司每位员工每周(周日至周六)的预付款情况。他写了一段代码,显示了与目标周中的天数对应的列。他的算法如下:Algorithm 我如何让同行相信算法很重要?,algorithm,peer,Algorithm,Peer,我的一位同事正在写一份报告,显示我们小型咨询公司每位员工每周(周日至周六)的预付款情况。他写了一段代码,显示了与目标周中的天数对应的列。他的算法如下: 获取一周中的哪一天是一个月的第一天。如果是星期天,将国旗设置为零;否则,将其设置为1 迭代一个月的所有日子。如果是星期天,升国旗。然后,如果标志值等于要显示的周,则显示与当前日期对应的列;否则,隐藏该列 当然,该标志指示当前周是什么 我提出了另一种算法: 获取指定周的第一(F)天和最后(L)天是该月的哪几天。例如,2009年10月的第一周从星期二
/* 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++;
我该怎么办
编辑:我更正了代码示例中的比较。我认为您的朋友的想法是正确的。以一个明显正确的算法为例,这个算法需要一个小时来解释,但在没有特定性能目标的情况下,速度更快
如果你有一个特定的性能要求,比如“代码需要能够在接下来的十年内在机器X上200个微秒内给出正确的结果,并且更简单的代码不符合要求,那么你可以考虑使用你的版本。
(你发布的代码示例显然比你的好,因为它不那么复杂。)根据你的描述,我不确定我是否同意你的同事的观点。这里的关键问题是这段代码是否是性能瓶颈 要说服我切换到您的算法,您必须分析有问题的应用程序,并向我表明这段代码对性能至关重要。然后进行更改并再次配置它。这样你就有了一个客观的比较基础 如果这两种算法之间存在有意义的差异,那么你们两人可以讨论是否值得进行转换 如果您担心web应用程序的页面加载时间,请记住的教训和-如何处理CSS、javascript和缓存将比优化服务器上运行的算法产生更大的影响
提倡无需测量的优化与忽视幼稚算法的性能影响一样危险。这是你的任务,还是他的任务?如果是他的,就让他做吧。我是一个靠效率发迹的人,事实上,当一些事情看起来效率低下,超出我的控制时,我会变得非常沮丧 有超过200人,所以谁可以把我最“有效”的想法,算法和代码羞辱。也许更重要的是,你不能一个人去。如果Linus Torvalds自己报名,他会像我们一样从1开始 你必须考虑的是,人们需要能够维护他们编写的代码。这意味着,他们必须像生下它一样理解它。即使有人演示了另一种比我自己的算法更有效的算法,我也不会使用它,除非我对它感到满意 如果这是一个联合项目,按照你的方式写下来,演示加速,然后花一些非常非常耐心的时间与你的同伴一起帮助他真正掌握它
回顾你5年前写的东西,每个人都必须在实践中学习,每个人都以自己的速度做事,尤其是学习。你不应该干预,因为显然你错了。。。这两段代码并不相等。只取条件=1、标志=0和测试=1,我看不出这里有什么问题。。。虽然他的版本有点迂回的方式达到目标,但他确实做到了 我要说的这句话不应该断章取义:但总会有人这样做——这并不是错的,恰恰相反。。。他可能不知道做某事的好方法,但不管他的方法多么丑陋,他确实知道如何得到结果。
当没有人知道某件事的正确算法时,这可能是一个真正的救命恩人。。。很可能他会以某种方式躲开它。G'day 我建议你应该偏爱在你的约束范围内执行的算法简单性,而不是智能的、过于复杂的、没有实际收益的算法。根据我的经验,这些过于聪明的把戏很可能成为未来维护的噩梦 下面的引语更能表达这一观点: “有能力的程序员充分意识到自己的头骨大小受到严格限制;因此,他在处理编程任务时非常谦虚,除其他外,他避免使用瘟疫之类的聪明把戏。”-埃德斯格·迪克斯特拉在1972年的ACM图灵演讲中” 顺便说一句,纸是一个伟大的理由