LDA(主题模型)
(5条消息) KaTeX数学公式语法_李乾文的博客-CSDN博客_katex语法
(5条消息) Typora编辑数学公式_Ambitious°的博客-CSDN博客_typora公式编辑
本文是启发是 v_JULY_v这位大佬的博客 博客地址为:https://blog.csdn.net/v_JULY_v/article/details/41209515
该文章单纯是为了以后复习使用!!
LDA主要包含:
一个函数:gamma函数
四个分布:二项分布,多项分布,beta分布,Dirichlet(迪利克雷)分布
一个概念和一个理念:共轭先验和贝叶斯框架
两个模型:pLSA, LDA
一个采样:Gibbs采样
gamma函数
对LDA的整体理解:
LDA 主要是可以将文档集中每篇文档中的主题以概率形式给出, 通过分析一些文档抽取它们主题(分布)出来之后,然后通过主题(分布)进行文本聚类和文本分类。LDA也是一种词袋模型,每篇文档是由一组词构成,词和词之间没有先后顺序关系,就像一个袋子,把它们全部装起来,这个袋子就是这一片文档,其中这些词就是能够表达文档主题的一些词 ...
Python
未读通过命令行窗口或 Anaconda Prompt 窗口
1、安装 Jupyter 主题
pip install jupyterthemes
2、更新 Jupyter 主题 (可选)
pip install --upgrade jupyterthemes
3、查看可用的 Jupyter 主题
1jt -l
4、更换 Jupyter 主题
jt -t onedork -f fira -fs 13 -cellw 90% -ofs 11 -dfs 11 -T -T
-t 主题 -f(字体) -fs(字体大小) -cellw(占屏比或宽度) -ofs(输出段的字号) -T(显示工具栏) -T(显示自己主机名)
更改主题后 Jupyter Notebook 是下面的效果:
– 恢复 Jupyter 默认风格
jt -r
5、各种主题风格
chestersih
1
jt -t chesterish -f fira -fs 17 -cellw 90% -ofs 15 -dfs 15 -T -T
grade3
1
jt -t grade3 -f fira -fs 1 ...
计算机基础
未读
头文件为
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#ifndef TREEHEAD_H_INCLUDED#define TREEHEAD_H_INCLUDED#include <stdio.h>#include <stdlib.h>#include <string.h>#define ERROR 0#define OK 1#define status inttypedef struct HuffmanData{ char *data; int data2; int weight; struct HuffmanData* next;}HFMData, *LHFMData;// Huffman辅助数组typedef struct{ char data[4]; int data2; int weight; int ...
次序选择问题
分析
问题输入:
包含n个不同元素的数组A[1…n]
整数k(1<k <n)
问题输出:
返回整数k的下标
问题求解:
蛮力法:
我们先把数据进行排序,然后我们想要第几个元素我们就选取第几个元素, 这样的时间复杂度为n * log(n) ,但是这样我们不仅得到了第i小的元素,而且我们还得到了第i+1 … 等一系列数据。这样就白白浪费了很多的时间。
改进快速排序法:
利用快速排序的思想,有以下几种情况:
选取固定位置主元,小于主元的元素个数q-p。
情况1 : k =q- p + 1,A[q]为数组第k小元素
情况2 : k<q-p+ 1,在A[p…q -1]中寻找第k小元素
情况3 : k > q-p+1,在A[q+ 1…r]中寻找第k -(q -p+1)小元素
如果是情况一的话直接返回就行
如果是情况二的话我们就需要在 A[p…q -1]中寻找第k小元素
如果是情况三的话我们就需要在A[q+ 1…r]中寻找第k 小元素
解决问题的步骤为:
例题
如果我们需要查找第八小的元素
情况1 : k =q- p + ...
活动选择问题
无权值
问题背景
有一个会场,需要安排几场活动
公司年会:10:00 - 19:00
婚礼宴请:11:00- 14:00
生日聚会:12:00 - 17:00
学术研究:14:00 - 16:00
问 如果安排这个会场能让活动尽可能的多的进行?
有下面这几个活动和占比时间
选择出租的时间不能有冲突
问题研究,策略选择
这时候我们采用贪心策略:
策略一:最短活动优先
策略二:最早开始的活动优先
策略三:最早结束活动优先
选择最早结束的活动,可以给后面的活动留出更大的弓箭
证明该策略是正确的(替换法)
我们可以通过替换的规则让 某个最优解替换为 贪心所得的最优解,在替换的时候,如果活动相同的话,直接替换即可,如果不相同的话,因为贪心所得的是这个活动的最先完成 的活动,所有会给后面的活动留出的活动空间更大不会影响后面活动的替换
代码实现
输入:活动集合S={a1, a2, a3 … an},每个活动ai的起始时间si 结束时间 fi
输出:不冲突的最大子集S‘
先把活动结束时间由小到大排个序
先给数组S赋值 a1(因为这里a ...
算法实现
未读 逆序对(分治法)
逆序对的含义
什么是逆序对?
例如上面这个表格第一行是数组序号,第二行是数组元素
当序号小的数组元素值大于序号大的数组元素值的时候称这两个数为逆序对
例如:
(4,3)(4,5)就是逆序对
枚举法
我们通过两层for循环来遍历这个数组,挨个寻找到所有的逆序对
分治法
我们把数组分为两个部分对每个部分分别求解,使用二分法,对每个部分分别求出最大子序列,然后再求出合并之后的最大子序列,最后让这三部分相加。
最后让这三个相加得出最后的逆序对个数
求解S3的方法:
使用枚举法,遍历前面的和后面的分别比较求解
但是最后的时间复杂度还是O(n2n^2n2)
所以直接求解S3的分而治之和蛮力枚举并未提高算法运行时间
原因:我们每次在寻找A[i] 里面那个元素比A[j]的小的时候,都要遍历一遍A[i] ,这样时间比较多
改进方法:我们可以通过讲数组A[i] 和A[j]分别进行排序,然后使用二分查找进行查找对应元素,这样算法效率就能提高不少
排序之后使用二分法求解
分别对数组A[1…m]和A[m + 1…n]进行排序
对于每个A[j] e A[m+ 1…n] ...
树的定义
树与线性表不同的地方是:线性表有唯一 的直接前趋,和唯一的直接后继,但是树有唯一的直接前趋,不唯一的直接后继
树是n(n≥0)个结点的有限集。
若n == 0, 称为**空树**
若 n > 0,则它满足以下两个条件:
有且仅有一个特定的称为根的节点
其余节点可分为m(m≥0)个互不相交的有限集T1, T2, T3·····其中每一个集合本身有是一颗树,并成为根的子树
树的基本术语
根节点:非空树中无前趋结点的结点
节点的度:结点拥有的子树数
树的度:树内各节点的度的最大值
当度=0时的结点:终端节点
当度≠0时的结点:称为分支结点,非终端结点,根节点以外的分支结点称为内部结点
结点的子树的跟称为该节点的孩子,该节点称为孩子的双亲
拥有同一个双亲的一类结点,称为兄弟结点
双亲在同一层的结点,称为堂兄弟结点
结点的祖先:从根节点到该节点所经分支上的所有结点
树的深度:树中结点的最大层次
有序树:树中结点的各子树从左至右有次序(最左边的为第一个孩子)
无序树:树中结点的各子树无次序。
森林:是m(m≥0)颗互 ...
第一部分
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125#include <stdio.h>#include <stdlib.h>typedef struct BiTree{ char data; struct BiTree *lchild; struct BiTree *rchild;}BiTree, *BiNode;BiNode CreatBiTree(BiNode T){ char ch; scanf("%c ...
以下是顺序表的代码的实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124#include <stdio.h>#include<stdlib.h>#include<string.h>#define MAX 20typedef struct Sqtable{ int a[20]; int length;}Sq;void read_Sq(Sq *L){ int n = 0; int *p = L->a; FILE *f ...
线性表
定义
线性表是具有相同特征的数据元素的一个有限序列
a1,a2,a3·····,ai-1,ai,ai+1,······,an
上面元素称为数据元素
a1 称为线性起点 an是线形终点,n为元素总个数,即表长
ai-1是ai的直接前趋, ai+1是ai的直接后续
当n=0时,称为空表
线性表:
由n(n>=0)个数据元素(节点)a1,a2,a3,a4····an组成的有限序列
其中数据元素的个数n定义为表的长度
当n= 0时称为空表
当非空的线性表(n>0)记作:(a1,a2····an)
这里的数据元素ai(1<=i<=n)只是一个抽象的符号,其具体含义在不同情况下可以不同
逻辑特征
在非空线性表,有且仅有一个开始节点a1,他没有直接前趋,而仅有一个直接后续a2
有且仅有一个终端节点an,他没有直接后续,而且仅有一个直接前趋an-1
其余的内部节点ai(2<=i<=n-1)都有且仅有一个直接前趋ai-1和一个直接后续ai+1
案例
一元多项式的计算
当表达式为p0 + p1x^1 + p2x^2 + p3 ...