算法与数据结构
学习计算机科学与掌握其他高难度学科没什么不同。成功的唯一途径便是循序渐进地学习其中的核心思想。
God_forths
热爱技术,喜欢收集新的思路和想法,热衷解决问题,欢迎交流!
展开
-
数据结构-树(一)
含义树广泛用于计算机科学的多个领域,从操作系统、图形学、数据库到计算机网络。属性:层次性,按层级构建的,越笼统就越靠近顶部,越具体则越靠近底部。可以将树的某个部分(子树)整体移到另一个位置,而不影响下面的层。 一个节点的所有子节点都与另一个节点的所有子节点无关。 叶子节点都是独一无二的。节点: 树的基础部分。可以有自己的名字,“键”。可以带有附加信息,称作“有效荷载”。不是重...原创 2021-07-29 20:27:21 · 183 阅读 · 0 评论 -
算法-排序(一)
排序是计算机科学中的一个重要的研究领域。分析算法时需要考虑比较大小及交换次数。冒泡排序"""多次遍历列表。比较相邻元素,将不合顺序的交换。每一轮遍历都将下一个最大值放到正确的位置上。通常被认为是效率最低的排序算法,因为在确定最终的位置前必须交换元素。多余的交换操作代价很大。由于冒泡排序要遍历列表中未排序的部分,因此它具有其他排序算法没有的用途。特别是,如果在一轮遍历中没有发生元素交换,就可以确定列表已经有序。可以修改冒泡排序函数,使其在遇到这种情况时提前终止。对于只需要遍历几次的原创 2021-07-28 18:22:38 · 106 阅读 · 0 评论 -
数据结构-映射抽象数据类型
含义键值对存储,键用来找关联的值,这个概念被称作映射。其中键不重复,键和值一一对应。实现""" Map() 创建一个空映射,返回一个空映射集合。 put(key, val) 加入一个键值对,键存在,则替换值。 get(key) 获取对应值,不存在,则返回None。 del del map[key]删除键值对。 len() 返回映射中键值对数目。 .原创 2021-07-27 15:16:24 · 167 阅读 · 0 评论 -
算法-搜索
含义搜索是指从元素集合找到某个特定元素的算法过程。搜索过程通常返回True或False,分别表示元素是否存在。有时,可以修改搜索过程,使其返回目标元素的位置。顺序搜索"""存储于列表等集合中的数据项彼此存在线性或顺序的关系,每个数据项的位置与其他数据项相关。元素都是有序的,可以顺序访问,由此可以进行顺序搜索。时间复杂度: O(n)"""# 无序列表的顺序搜索def sequentialSearch(alist, item): pos = 0 fou.原创 2021-07-27 11:39:45 · 164 阅读 · 0 评论 -
算法-动态规划
含义解决优化问题的一个策略。经典例子就是在找零时使用最少的硬币。贪婪算法:试图最大程度地解决问题。应用找零问题的递归解决方案# 效率非常低, 需要递归67716925次递归。def recMC(coinValueList, change): minCoins = change if change in coinValueList: return 1 else: for i in [c for c in coinVal..原创 2021-07-22 20:10:56 · 107 阅读 · 0 评论 -
算法-递归
定义解决问题的一种方法,它将问题不断分成更子问题,直到子问题可以用普通的方法解决。通情况下,递归会使用一个不停调用自己的函数。递归的逻辑不是循环,而是将问题分解成更小、更容易解决的子问题。递归原则1.必须有基本情况;2.必须改变其状态向基本情况靠近;3.必须递归地调用自己。应用计算一列数之和# normaldef listsum(numList): thesum = 0 for i in numList: thesu...原创 2021-07-22 17:42:55 · 548 阅读 · 0 评论 -
基础数据结构-列表,链表
定义元素集合。分为无序列表和有序列表。实现"""无序列表抽象数据类型: List() 创建一个空列表。 add(item) 添加一个之前不存在列表中的元素。修改列表。 remove(item) 移除列表中的一个元素。修改列表。 search(item) 搜索元素。返回布尔值。 isEmpty() 检查列表是否为空。返回布尔值。 leng.原创 2021-07-22 10:50:38 · 174 阅读 · 0 评论 -
数据结构-双端队列
定义某种意义上,是栈和队列的结合。具体排序原则取决于使用者。实现"""双端队列是元素的有序集合任何一端都允许添加移除元素。 Deque() 创建一个空的双端队列。无需参数,返回一个空的双端队列。 addFront(item) 无返回值 addRear(item) 无返回值 removeFront() 移除前端一个元素。无需参数,返回一个元素,修改内容。 removeRear() 移除后端一个元素。无需参数,原创 2021-07-21 19:47:28 · 224 阅读 · 0 评论 -
基础数据结构-队列
定义有序集合,添加操作发生在“尾部”,移除操作则发生在“头部”。新元素从尾部进入队列,然后一直向前移动到头部,直到成为下一个被移除的元素。最新添加的元素必须在队列的尾部等待,在队列中时间最长的元素则排在最前面。这种排序原则被称作FIFO (first-in first-out),即先进先出,也称先到先得。好的队列只允许一头进,另一头出,不可能发生插队或者中途离开的情况。实现"""如前所述,队列是元素的有序集合,添加操作发生在其尾部,移除操作则发生在头部。 Queue(.原创 2021-07-15 20:18:23 · 90 阅读 · 0 评论 -
基本数据结构--栈
含义有序集合,添加操作和移除操作总发生在同一端,即“顶端”,另一端择被称为“底端”。栈中的元素离底端越近,代表其在栈中的时间越长,最新添加的元素将被最先移除。这种排序原则被称作LIFO(last-in first-out),即后进先出。它提供了一种基于在集合中的时间来排序的方式。栈抽象数据类型"""Stack() 创建一个空栈。无需参数,且返回一个空栈。push(item) 将一个元素添加到栈的顶端。需要一个参数,且无返回值。pop() 移除栈顶端元素。无需原创 2021-07-14 20:22:50 · 78 阅读 · 0 评论