对高级算法的一些看法

之前听说过有人数据结构学傻了,动不动就树套树、主席树,一直挺不理解,一道并不是那么难的题为什么用这么多东西。

知道最近我才有点懵懂,是因为我不会,所以不会往那个方向去想。

反过来想想,高级算法学多了真的是好事吗?对于一些已知的题,高级算法无疑是很有帮助。但是更多的时候,我们面对的是新的题,新的题目所带给我们的应当是进步的空间,是可以开发我们的思维的,或许我们能通过这道题延伸到一些新的领域,所以我在想,是否有时候,高级算法阻碍了我们进一步开发自己的思维?

或许,高级算法本身没有什么错误,错的是我们对它的过度依赖,以及对直觉的盲目自信。当我们接触的越多(尤其是种类)算法时,往往产生惯性思维,准确的说是产生一种思维惰性。

在刚开始接触oi时,学长们往往不提倡我们学的太快,总是让我们把一些基础的东西学好以后才会给我们讲效率更高应用更广的做法,有时甚至带我们过一遍优秀算法的改进过程。这样以后,虽然结果一样,但过程中无疑多了许多东西,我能够想到这个算法不是某一个天才突发奇想想出来的,而是在已有算法的基础上进行改进的,我们现在所学的东西也未必没有不足之处。

对于一个新的问题,我们要做的不是一眼切,而是再仔细思考一遍,回味一下过程。或许某一个地方就会触发你的灵感,使你产生新的理解。即使对于算法本身无法进行改进,但很多东西都是相通的,这也会潜移默化的提高你的综合能力。

我觉得,只要保持对题目的警觉性,不被过去的印象所迷惑,认真去分析问题,只有在需要的时候才去想起去用,这才是高级算法的正确使用方式。

再延伸一个地方,我们也不要被答案所限制,我们所看到的题解真的就是唯一的思路吗?题解所说的错误的做法真的不对吗?例如:华容道的某个题解中有一句这道题dfs肯定过不了,但是我真的用dfs过了,虽然其中加的优化相当多,而且我几乎做了一整天,可还是过了。还有就是隐藏口令那道题,链表无疑是过不了,也不存在任何一个题解说用链表过的,可是由于某只兔子的恒心,真的用链表优化过了。由小见大,虽然很多题目都是所谓的“套路”,但这个“套路”下,或许真的隐藏着“发现”。

还有就是,三人行必有我师。多看看其他人的代码,可以提高你代码的简洁程度。多听听其他人的思路,可以开阔你的眼界。凡事多问个为什么,可以提高你思想的深度。多问问其他人的疑问,或许有什么是你没想到的。

记录一下一个小经历:洛谷模拟noip day1第一题,找兔子的lca。O(n)打表建树 + 倍增找lca + 打表找规律 = 90;静下心来读读题、写一写,5分钟就能找到规律。简单模拟 = 100;

以上纯属个人想法,不喜欢就当没看见。

你可能感兴趣的:(总结)