本文是对 Swift Algorithm Club 翻译的一篇文章。
Swift Algorithm Club是 raywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下,大概有一百左右个的算法和数据结构,基本上常见的都包含了,是iOSer学习算法和数据结构不错的资源。
🐙andyRon/swift-algorithm-club-cn是我对Swift Algorithm Club,边学习边翻译的项目。由于能力有限,如发现错误或翻译不妥,请指正,欢迎pull request。也欢迎有兴趣、有时间的小伙伴一起参与翻译和学习🤓。当然也欢迎加⭐️,🤩🤩🤩🤨🤪。
当你遇到新问题的时候,需要寻找新的算法。
是否有类似的其它问题?
如果您可以根据另一个更普遍的问题来构建解决你目前需要解决问题,那么您可以使用现有算法。 为什么重新发明轮子?
我喜欢Steven Skiena的算法设计手册,它包含了一系列可以尝试的问题和解决方案。(另见Steven Skiena的算法库)
译注:豆瓣 算法设计手册
可以从暴力方案开始
原始而暴力的解决方案通常对实际使用而言太慢,但它们是一个很好的起点。 通过编写暴力解决方案,您将学习如何理解问题的真正含义。
一旦你有一个暴力实施方案,就可以使用它来验证你提出的任何改进是否正确的。
如果您只使用小型数据集,那么暴力方法实际上可能足够好。 不要陷入过早优化的陷阱!
分而治之
“当你改变你看待事物的方式时,你看到的东西会发生变化。”
—— 马克斯·普朗克,量子物理学家和诺贝尔奖获得者
分而治之是一种处理大问题的方法,将其分解成碎片并逐步向解决方案迈进。
不是将整个问题看作一个单一,庞大而复杂的任务,而是将问题分成相对较小的问题,这样问题更容易理解和处理。
您可以解决较小的问题并聚合解决方案,直到您只使用解决方案。 在每个步骤中,手头的问题都会缩小,解决方案会变得成熟,直到您拥有最终正确的解决方案。
将问题分解为规模更小的子问题,将这些规模更小的子问题逐个击破,然后将已解决的子问题合并,最终得出“母”问题的解。
将相同的解决方案重复地(或经常递归地)应用于解决较小的任务,从而在更短的时间内获得结果。