摘要: 双向循环链表类似于双链表,但是在实现上有不同: 双向循环链表没有头尾哨兵节点,因此在插入/删除链表时必须考虑特殊情况:往空表中插入第一个元素和删除表中最后一个元素,另外还需要注意的是,如果插入/删除的是表中的第一个元素,将会改变起始指针begin的位置,造成起始指针的左移或者右移,这也是一种特殊情况 阅读全文
posted @ 2020-08-09 12:16 LoongChan 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 1.把双链表这种数据结构的更高一级别抽象(线性表)单独写成一个抽象类,然后用于双链表类的继承,这种写法可以规范双链表应该有的接口/操作 2.把节点定义为类内的结构体而不是单独的代码显得更加简洁。 3.在双链表的插入/删除/查找操作中都要找到指向第i个节点的指针,把这个操作统一定义为一个私有的辅助函数 阅读全文
posted @ 2020-08-09 12:01 LoongChan 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 单链表为链表的一种,链表和顺序表又同属于线性表,在正式写单链表之前,可以先定义一个线性表抽象类,用来规范所有线性表共同的操作 #include <iostream> using namespace std; // 线性表:顺序表和链表共同的抽象类 template<typename elemType 阅读全文
posted @ 2020-08-09 11:47 LoongChan 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 梯度下降法可以进行一些优化以加快运行速度: 一,对数据源进行特征缩放 二,把批量梯度下降改为随机梯度下降或者小批量梯度下降 数据源(包括训练集的输入,训练集的输出,初始设置的超参数theta,预测集的输入) import numpy as np import random X = np.array( 阅读全文
posted @ 2020-07-30 16:15 LoongChan 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 上一节中的梯度下降法只能由于单自变量的线性回归任务,梯度下降法可以推广至任意多变量的线性回归任务,公式推导如下如 使用矩阵表达的公式在numpy库下代码非常简洁,其中X以二维ndarray对象输入,每一行代表一个样本,Y和theta以一维ndarray对象输入,以以下这个三变量线性回归为例子 imp 阅读全文
posted @ 2020-07-29 16:21 LoongChan 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 梯度下降法用于求函数的极小值,不一定是最小值 考虑一个单变量的线性回归问题,其中自变量x和因变量y的值如下: x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y = [106000, 107200, 108400, 109600, 110800, 112000, 113 阅读全文
posted @ 2020-07-28 16:35 LoongChan 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 方法一:传统递归法 时间复杂度O(2^n),空间复杂度O(n) 计算Fibonacci(10)十次平均用时0.0003s 计算Fibonacci(100)单次用时大于1min 时间复杂度极高,当n>35左右时间已经无法接受 def Fibonacci(n): if n == 1 or n == 2: 阅读全文
posted @ 2020-07-08 00:43 LoongChan 阅读(856) 评论(0) 推荐(0) 编辑
摘要: 打开:有两种方式 with open(r"data.txt", "r", encoding="utf-8") as f: f = open(r"data.txt", "r", encoding="utf-8") f.close() 1.使用with管理文件,可以在不需要使用时自动关闭文件。 2.第一 阅读全文
posted @ 2020-07-07 15:49 LoongChan 阅读(3215) 评论(0) 推荐(0) 编辑
摘要: 相对路径和绝对路径: 绝对路径指指目录下的绝对绝对位置,一个文件的绝对路径由盘符开始表示 相对路径指利用当前文件与目标文件的相对位置所表示的路径 以下图为例(绿色为文件夹,白色为文件) Main.py为当前文件 Test1.txt的相对路径:Test1.txt Test1.txt的绝对路径:D:\P 阅读全文
posted @ 2020-07-07 12:29 LoongChan 阅读(378) 评论(0) 推荐(0) 编辑
摘要: Python内置容器有四种:列表,元组,字典,集合 列表 # 声明 a = [] # 声明空列表 b = [1, "hello", 2.5] # 声明非空列表 c = [i + 1 for i in range(10)] # 列表递推式 d = list(range(3)) # 使用list()把其 阅读全文
posted @ 2020-07-06 22:49 LoongChan 阅读(421) 评论(0) 推荐(0) 编辑