-
RainNight
2022-01-20
数据结构与算法
1809°
## 如何理解算法的时间和空间复杂度
---
算法(Algoritthm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。
具体如何衡量不同算法之间的优劣呢?
主要还是从算法所占的【时间】和【空间】两个维度去考量。
* 时间维度:是指执行当前算法所消耗的时间,我们通常用【时间复杂度】来描述。
* 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用【空间复杂度】来描述。
因此,评价一个算法的效率
-
RainNight
2022-01-18
数据结构与算法
1530°
## 节点
---
在有些情况下,存储数据的内存分配不能位于连续的内存块中。 所以接受指针的帮助,其中数据和数据元素的下一个位置的地址也被存储。 所以从当前数据元素的值中知道下一个数据元素的地址。通常这样的结构被称为指针。 但在Python中,将它们称为节点。
节点是各种其他数据结构链表和树在python中处理的基础。
```py
class daynames:
def __init__(self,dataval=None):
self.dataval = dataval
self.nextva
-
RainNight
2022-01-18
数据结构与算法
1550°
## 双向链表
---
在前面的章节中已经看到并学习了链表,但在前面只是进行介绍和入门。 在本章中,我们看到另一种链接列表,可以向前和向后移动遍历。 这种链表称为双向链表。 以下是双向链表的特点。
* 双向链表包含第一个和最后一个的链接元素。
* 每个链接都有一个数据字段和两个称为`next`和`prev`的链接字段。
* 每个链接都使用其下一个链接与其下一个链接链接。
* 每个链接都使用其上一个链接与之前的链接链接。
* 最后一个链接将链接作为空来标记列表的结尾。
### **创建双向链表**
-
RainNight
2022-01-18
数据结构与算法
1591°
## 链表
---
链表是一系列数据元素,通过链接连接在一起。 每个数据元素都以指针的形式包含到另一个数据元素的连接。 Python在其标准库中没有链接列表。 我们使用前一章讨论的节点概念来实现链表的概念。 我们已经知道如何创建节点类以及如何遍历节点的元素。 在本章中,将学习链表的类型:单链表。 在这种类型的数据结构中,任何两个数据元素之间只有一个链接。 创建一个链表并使用一些方法来插入,更新和从列表中移除元素。
### **创建链表**
---
Python是通过节点类来创建链表的。创建一个`
-
RainNight
2022-01-17
数据结构与算法
1486°
## 暴力匹配算法
---
假设有这样一个问题:有一个文本串 haystack,和一个模式串 needle
,现在要查找 needle 在 haystack 中的位置,怎么查找呢?
```
haystack = "hello,world" # 文本串
needle = "ll " # 模式串
```
如果用暴力匹配的思路,并假设现在文本串haystack匹配到i位置,模式串needle匹配到j位置,则有:
* 如果当前字母匹配成功,`haystack[i]== needle[j]`,则I++,j