图(Graph)
图
从网页或者城市之间的连接开始
在互联网上,如果想用一种数据结构来描述网页之间的连接,应该是什么样子的呢?我们知道一个网页可能被多种其他网页连接着。
在生活中,如果想要用一种数据结构来描述城市之间的连接,那么它和上述网页之间的连接所需的数据结构是一致的,都需要下图中所描绘的数据结构。
上图中描绘的数据结构就是图(Graph)。
图(Graph)
图包含顶点(vertice)和连接结点的边(edge),顶点可以存储数据等各种信息,同样边也可以存储数据。举例来说,假设下图中每个顶点为城市,边就可以是城市与城市之间的距离。
一、关于图
1 方向(Direction):图中顶点之间的边有出和入之分,也就是图中边存在方向,这样的图称为有向图。
在有向图中因为边有出和入,所以一个结点可以有出边也可以有入边:
2 环(Cycle):图中可以存在环,也就是从一个结点出发,沿着边走最后可以回到原结点。
如果无向图(图中的边没有方向)中不存在环,那么此时的图就是一棵树。(树是一种特殊的图)
如果有向图中不存在环,它就是经常使用的有向无环图(Direct ...
分类和向量空间-NLP-吴恩达
先导
对应代码练习:传送门
1 分类
对文本进行分类在自然语言处理的各种应用中都十分重要。
1.1 有监督机器学习
对文本进行分类所用的方法一般就是有监督机器学习。
有监督机器学习就是给你一组特征(\(X\))以及特征的标签(\(Y\)),通过最小化预测方程的输出(\(\hat{Y}\))与标签(\(Y\))的误差来调整预测方程参数(θ)的过程。
1.2 文本分类之情感识别
文本分类的应用有许多许多,其中之一就是情感识别。
逻辑回归分类器实现推文情感识别
完整项目见另一博客:传送门
朴素贝叶斯分类器实现推文情感识别
完整项目见另一博客:传送门
2 向量空间(vector space)
什么是词向量,见另一篇博客传送门
利用词向量进行推理传送门
编程题--扁平化嵌套列表迭代器
编程题--扁平化嵌套列表迭代器
来源leetcode:https://leetcode-cn.com/problems/flatten-nested-list-iterator/
问题陈述
给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。
列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。
示例 1: 输入: [[1,1],2,[1,1]] 输出: [1,1,2,1,1] 解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。
示例 2: 输入: [1,[4,[6]]] 输出: [1,4,6] 解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,4,6]。
参考思路:
首先,迭代器是惰性的。惰性是指如果需要获取当前的值,那就去获取当前值,不会把所有的值都去迭代。所以使用递归的方式获取到全部的值不是一个好方法。
好的思路就是:在利用hasNext函数 ...
二叉搜索树及其相关的树
二叉搜索树
二叉搜索树(BST:binary search/sort tree)又叫二叉查找树或者二叉排序树,它首先是一个二叉树,而且必须满足下面的条件: 1. 若左子树不空,则左子树上所有结点的值均小于它的根节点的值(左小) 2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值(右大) 3. 左、右子树也分别为二叉排序树
二叉搜索树的查找
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。 123456789101112def searchBST(root, val): if root is None: return [] node = root while node != None: if node.val == val: return node elif node.val > val: node = node.left else: node = node.right return None ### 二叉搜索树的节点增加
给定二叉搜索树( ...
树
树
树的定义有两点:
有且仅有一个特定的称为根(root)的结点;
当结点数量>1时,其余结点可分为若干个互不相交的有限集,其中每个集合也可以看作一颗树,称之为根的子树。
树的结点
结点:使用树结构存储的每一个数据元素都被称为“结点”。例如,上图(A)中,数据元素 A 就是一个结点;
父结点(双亲结点)、子结点和兄弟结点:对于上图(A)中的结点 A、B、C、D 来说,A 是 B、C、D 结点的父结点(也称为“双亲结点”),而 B、C、D 都是 A 结点的子结点(也称“孩子结点”)。对于 B、C、D 来说,它们都有相同的父结点,所以它们互为兄弟结点。
堂兄弟:如果两个结点的父结点虽不相同,但是它们的父结点处在同一层次上,那么这两个结点互为堂兄弟。例如,上面图(A)中,结点 G 和 E、F、H、I、J的父结点都在第二层,所以之间为堂兄弟的关系。
树根结点(简称“根结点”):每一个非空树都有且只有一个被称为根的结点。上面图(A)中,结点 A 就是整棵树的根结点。 > 树根的判断依据为:如果一个结点没有父结点,那么这个结点就是整棵树的根结点。
叶子结点: ...
python中的赋值、深浅拷贝与函数传参
对象类型
不可变对象:一旦创建就不可修改的对象,包括字符串、元组、数值类型 (该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。)
可变对象:可以修改的对象,包括列表、字典、集合
赋值与深浅拷贝
不可变对象类型
没有被拷贝的说法,深浅拷贝和赋值是一样的。
可变对象类型
赋值: 只是复制了新对象的引用,不会开辟新的内存空间。
并不会产生一个独立的对象单独存在,只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。
浅拷贝: 创建新对象,其内容是原对象的引用。
浅拷贝有三种形式: 切片操作,工厂函数,copy模块中的copy函数。
如: lst = [1,2,[3,4]]
切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst]
工厂函数:lst1 = list(lst)
copy函数:lst1 = co ...
python中的工厂函数
python中的工厂函数
在python中,工厂函数用于创建某种类型的新的数据项。例如,set()、list()就是工厂函数,因为它会常见一个新的相应的类型(集合、列表)。 > 工厂函数其实是指上述等内建函数都是类对象,当你调用它们的时候,实际上是创建了一个类实例。
递归
递归
1 什么是递归?
递归的思想就是函数调用函数本身。像下面的伪码中所示: 123456function recursive(input): if input <= 0 return input else output = recursive(input - 1) return output 递归函数:
1.递归函数需要在函数内部的某处调用自己。
2.递归函数需要一个base case(基础情况),也就是递归终止的条件。
在某些方面看来递归就像一个while循环,一直循环某些代码直到满足退出循环的条件。
12345while(exit condition): code code code code
如果没有写好base case,也就是递归终止的条件,程序就会陷入到无限的循环递归中。
注意思考递归输入的数据范围,防止有些输入不在递归终止的条件中。比如上述递归代码中,if input <= 0变为if input == 0,那么输入为负数的话永远到不了递归结束条件(input==0)
3.递归函数需要 ...
队列
队列
队列的含义
队列是一种先进先出(First In First Out, FIFO)的数据结构。类似我们排队的样子,站在队伍最前面的人拿到东西后离开,新来的人要站在队伍的最后。
队列同样可以使用数组或者链表来实现。
数组实现队列
基于python用数组实现一个Queue类,包含如下方法:
enqueue - adds data to the back of the queue
dequeue - removes data from the front of the queue
front - returns the element at the front of the queue
size - returns the number of elements present in the queue
is_empty - returns True if there are no elements in the queue, and False otherwise
_handle_full_capacity - increases the capacity ...
栈
栈
1 栈的含义
栈是一种类似摞起来的盘子的数据结构,性质是后进者先出(Last In First Out, LIFO),也就是你只能拿走最上面的盘子,一个一个,然后拿走下面的盘子。
栈是一种方法或者说是思想,它可以用数组或者链表等等数据结构实现。
2 数组实现栈
基于python用数组实现一个Stack类,包含如下方法:
push - 向栈顶增加一个元素
pop - 删除栈顶元素并返回该值
size - 返回栈的长度
top - 返回栈顶元素的值
is_empty - 判断栈是否为空,是则返回True,否则False
1. 创建并初始化Stack类
Define a class named Stack and add the __init__ method
Initialize the arr attribute with an array containing 10 elements, like this: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Initialize the next_index attribute
...