浅谈前缀和,差分,二分,bfs,dfs ================================================================ 评语 **************************************************************** 最最基本,最最常用的算法。建议必须掌握。 由于实现并不困难,我们不作详细讲解,有需求可上网自学。 以下只做简单介绍。 `前缀和,差分 <../_static/算法与数据结构/浅谈前缀和,差分,二分,bfs,dfs/前缀和,差分.html>`_ ************************************************************************************************ 通过O(n)的预处理出前缀和数组,可以在之后O(1)得到原数组任意区间和。 通过求出原数组的差分数组,可以O(1)的进行区间加减操作,最后求一遍前缀和即可还原操做后的数组。 `二分 <../_static/算法与数据结构/浅谈前缀和,差分,二分,bfs,dfs/二分.html>`_ ****************************************************************************** 对于某个性质,当前的可行区间上,一半满足、一半不满足,就可以二分找分界点。 二分法不要求单调性,更不要求严格的单调性。 本质的理解上,只要有二段性就可以用二分。 通过二分我们能以log的时间复杂度找到我们所需要的临界答案。 `bfs,dfs <../_static/算法与数据结构/浅谈前缀和,差分,二分,bfs,dfs/bfs,dfs.html>`_ ***************************************************************************************** 都是最基本的搜索算法。 bfs使用队列先进先出的模式搜索,对于C/CPP来说你可以用stl的queue等容器,也可以用数组模拟队列。 dfs则使用栈后进先出的模式搜索,对于C/CPP来说你可以用stl的stack等容器,也可以用数组模拟栈,但大多数情况我们都是用函数递归来实现的,即使用系统栈。 两者功能没什么太大区别,只是搜索的模式不同,各自擅长的情况也不尽相同。