在c语言中的考试中,什么叫结构化的算法?为什么要提倡结构化得算法?

Python013

在c语言中的考试中,什么叫结构化的算法?为什么要提倡结构化得算法?,第1张

结构化算法是由一些基本结构顺序组成的.在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内.一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变.

跟结构化算法比较起来,非结构化算法有以下缺点.

流程不受限制的随意转来转去,使流程图豪无规律.使人在阅读的时候难以理解算法的逻辑.难以阅读,也难以修改.从而使算法的可靠性和可维护性难以保证.;

因为结构化算法方便以后的调用,省去重复写代码的麻烦。

肯定是数据结构啦,数据的逻辑结构决定了算法,数据的存储结构决定了如何实现算法。但是我觉得还是要了解一点C的基础知识比较好。因为数据结构里用的语言不是严格的c语言而是一种类c的解释语言。有c更有助于你理解数据结构。而且若是你想更进一步发展的话,比如考研数据结构就是必考的一门,所以数据结构很重要!!

0) 穷举法

穷举法简单粗暴,没有什么问题是搞不定的,只要你肯花时间。同时对于小数据量,穷举法就是最优秀的算法。就像太祖长拳,简单,人人都能会,能解决问题,但是与真正的高手过招,就颓了。

1) 贪婪算法

贪婪算法可以获取到问题的局部最优解,不一定能获取到全局最优解,同时获取最优解的好坏要看贪婪策略的选择。特点就是简单,能获取到局部最优解。就像打狗棍法,同一套棍法,洪七公和鲁有脚的水平就差太多了,因此同样是贪婪算法,不同的贪婪策略会导致得到差异非常大的结果。

2) 动态规划算法

当最优化问题具有重复子问题和最优子结构的时候,就是动态规划出场的时候了。动态规划算法的核心就是提供了一个memory来缓存重复子问题的结果,避免了递归的过程中的大量的重复计算。动态规划算法的难点在于怎么将问题转化为能够利用动态规划算法来解决。当重复子问题的数目比较小时,动态规划的效果也会很差。如果问题存在大量的重复子问题的话,那么动态规划对于效率的提高是非常恐怖的。就像斗转星移武功,对手强它也会比较强,对手若,他也会比较弱。

3)分治算法

分治算法的逻辑更简单了,就是一个词,分而治之。分治算法就是把一个大的问题分为若干个子问题,然后在子问题继续向下分,一直到base cases,通过base cases的解决,一步步向上,最终解决最初的大问题。分治算法是递归的典型应用。

4) 回溯算法

回溯算法是深度优先策略的典型应用,回溯算法就是沿着一条路向下走,如果此路不同了,则回溯到上一个

分岔路,在选一条路走,一直这样递归下去,直到遍历万所有的路径。八皇后问题是回溯算法的一个经典问题,还有一个经典的应用场景就是迷宫问题。

5) 分支限界算法

回溯算法是深度优先,那么分支限界法就是广度优先的一个经典的例子。回溯法一般来说是遍历整个解空间,获取问题的所有解,而分支限界法则是获取一个解(一般来说要获取最优解)。