欢迎光临散文网 会员登陆 & 注册

数据结构之算法浅谈

2022-05-15 21:58 作者:快乐的小log  | 我要投稿

算法:

1.确定性,有穷性,可行性,输入和输出性

2.设计范式

贪心法,分治法,动态规划法,线性规划法,搜索和枚举法。

3:实现方法

顺序执行,并行执行(包括分布式计算),递归算法和迭代算法


顺序执行


求数组当中元素最大值:



关于循环:


优美的递归:二叉排序树的搜索



尾递归是尾调用的一种特殊情况,也是递归结构的一种特殊形式。

编译器一般都可以对尾递归进行优化(尾调用消除技术)

直接利用当前函数的栈帧,将尾调用处理成循环的形式


尾调用:是指一个函数里的最后一个动作是调用一个函数的情形,这个函数调用的返回值直接被当前函数作为返回值


递归结构使用的函数递归调用,会增加任务的栈空间使用,用递归方法解决问题的规模受系统栈空间的约束,

除此之外函数调用时的参数入栈和出栈也会降低算法的效率



分支和跳转

闰年: 


过长的多分支结构常被视为软件当中的不良结构。违背了OCP原则(开放,封闭原则)


环形队列demo:一致性处理,包括函数表

对队尾指针移动的处理:rear = (rear+1) % N

如果不采取对N取模,则每次指针移动时都要做是否已经达到表尾的判断处理



算法实现与数据结构

逻辑结构:

线性结构,关联结构(集合,映射),树形结构,图形结构

线性表:

数组,链表,栈,队列是四种最常见的线性表


数组:

访问方式:下标访问

查找无开销,插入和删除需要大量移动元素。

查找元素:O(n) if 数组有序  二分查找 O(logn)


链表:

适用于线性表的长度不确定的场合。

两个域构成:数据域 and 指针域

易于插入和删除,查找困难。

优势:链表长度可以动态增长,比数组具有很大的优势


表头结点的好处:

1:无论链表是否为空表,始终有一个能标识链表的头节点,可以用一致性处理空链表和非空链表

2:对链表进行插入,删除和遍历操作时,不需要对数据元素的首节点和中间节点做差异化处理,对每个结点的操作可以做到一致性


数据结构之算法浅谈的评论 (共 条)

分享到微博请遵守国家法律