算法
GavinAlgorithm
继续努力学习
展开
-
不服就开干,手撕智能助手背后的自然语言处理技术
链接:https://pan.baidu.com/s/1KNexPwdIoVIiTfRyFG9gbQ提取码:1234最近天猫精灵、小爱同学和小度在家等智能助手火爆全网络,各种大佬都出来站台吹嘘,说人工智能已经如何如何了得,智能助手如何如何技术牛逼。甚至还有这种我的亲娘,你那我们当傻子吗?还毛骨悚然,这就是tmd赤裸裸的瞧不起你,就是看你不懂技术蒙你。如果你还想什么天网,什么意识觉醒什么的,醒醒吧!资本家的韭菜刀已经磨好了。还有这个你们想不想买回去动动嘴唇?我劝你买一个,哈哈!如果你家比原创 2020-09-18 23:54:33 · 582 阅读 · 0 评论 -
有向图的强连通分解--Kosaraju算法
/** * 图的强连通分解——Kosaraju算法 **/class Kosaraju {public: Kosaraju(vector<vector<int> >& g) : g(g), t(0) {} void decompose() { vector<int> vertice_order; for (int i = 0; i < g.si原创 2017-05-25 17:19:42 · 724 阅读 · 0 评论 -
图的强连通分解——Tarjan算法
/** * 图的强连通分解——Tarjan算法 **/class Tarjan {public: Tarjan(vector<vector<int> >& g) : g(g), t(0) {} void decompose() { unordered_set<int> visited; for (int s = 0; s < g.size();原创 2017-05-25 17:21:35 · 292 阅读 · 0 评论 -
处理模运算
模运算规则基本运算法则加法运算法则:(a+b)%c=(a%c+b%c)%c(a + b) \% c = (a\%c + b\%c)\%c减法运算法则:(a−b)%c=(a%c−b%c)%c(a - b) \% c = (a\%c - b\%c)\%c乘法运算法则:(a∗b)%c=(a%c∗b%c)%c(a * b) \% c = (a \%c * b \% c) \% c指数运算法则:(ab原创 2017-05-26 12:40:11 · 456 阅读 · 0 评论 -
莫比乌斯反演
背景假定存在一个如下的关系 F(n)=∑d|nf(d)\begin{equation}F(n) = \sum_{d|n}{f(d)}\end{equation} 正向流程: F(1)=f(1)F(1) = f(1) F(2)=f(1)+f(2)F(2) = f(1) + f(2) F(3)=f(1)+f(3)F(3) = f(1) + f(3) F(4)=f(1)+f(2)+f(4)原创 2017-05-28 19:53:35 · 214 阅读 · 0 评论 -
马尔科夫蒙特卡罗
马尔科夫链马尔科夫链有四个基本元素:状态SS、状态转移矩阵(PP)、状态初始分布(II)和平稳分布(Π\Pi)。 S=[s1,s2,...,sn](1)S = [s_1,s_2,...,s_n]\tag{1} P=⎡⎣⎢⎢147258369⎤⎦⎥⎥(2)P=\left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9原创 2017-06-03 12:48:42 · 371 阅读 · 0 评论 -
快速矩阵幂
/***************************************************** > File Name: matrix_factorial.cpp > Author: Yuji CAO > Mail: 1007171627@qq.com > Created Time: 六 6/10 13:30:07 2017 ***********原创 2017-06-10 14:45:12 · 233 阅读 · 0 评论 -
最大网络流的Ford-Fulkerson 算法
/**************************************************** > File Name: max_flow.cpp > Author: Yuji CAO > Mail: 1007171627@qq.com > Created Time: 六 6/10 16:42:38 2017 ********************原创 2017-06-10 21:32:29 · 328 阅读 · 0 评论 -
深度优先搜索版的匈牙利算法
/**************************************************** > File Name: hungry.cpp > Author: Yuji CAO > Mail: 1007171627@qq.com > Created Time: 日 6/11 18:29:58 2017 **********************原创 2017-06-11 20:58:08 · 495 阅读 · 0 评论 -
BFS 版本的匈牙利算法
#include<iostream>#include<vector>#include<unordered_set>#include<queue>#include<stack>#include<cstring>#include<queue>using namespace std;int hungry_bfs(vector<vector<int> >& bi_graph, int m, ve原创 2017-06-12 18:01:18 · 1025 阅读 · 0 评论 -
素数筛——Eratosthenes 素数筛、Euler 素数筛
/***************************************************** > File Name: liner_filter.cpp > Author: Yuji CAO > Mail: 1007171627@qq.com > Created Time: 二 6/13 12:11:11 2017 ***************原创 2017-06-13 13:59:38 · 404 阅读 · 0 评论 -
数位DP专题总结
简介数位DP是一类非常精巧的动态规划,它解决的问题是(0,r](0,r]区间上满足某种性质的数的计数问题。例如,求(0,468](0,468]中数位中没有”4949”的数的个数。动态规划的关键是找到重叠子问题和最优子结构,为此数位DP将区间的右端点rr看作是字符串,例如468468被当做”468”处理。显然468468是个33位数,比这个数小的数有, 000 001 ⋯⋯\cdots\c原创 2017-08-22 11:49:17 · 292 阅读 · 0 评论 -
树状数组求逆序数
#include<map>#include<vector>#include<unordered_set>#include<unordered_map>#include<list>#include<queue>#include<deque>#include<stack>#include<iostream>#include<set>using namespace std;class原创 2017-09-10 19:48:15 · 215 阅读 · 0 评论 -
Word Embedding 之CBOW
Word Embedding 之CBOWCBOW模型结构准备文字数字化构建损失函数基于RNN的方法基于CBOW的方法CBOWCBOW 是一个非常优秀的Word Embedding模型,其原理非常简单,本文章尝试深入模型内部,探索这个模型的性能和表现。模型结构准备再介绍模型的网络结构之前,首先要介绍的是一个向量计算。假定特征为,x=(x0,x1,⋯&amp;amp;amp;amp;ThinSpace;,xn−1...原创 2018-11-03 20:07:52 · 998 阅读 · 0 评论 -
最优除法
Optimal DivisionMediumGiven a list of positive integers, the adjacent integers will perform the float division. For example, [2,3,4] -> 2 / 3 / 4.However, you can add any number of parenthesis a...原创 2019-05-24 00:01:35 · 163 阅读 · 0 评论 -
Out of Boundary Paths
Out of Boundary PathsThere is an m by n grid with a ball. Given the start coordinate (i,j) of the ball, you can move the ball to adjacent cell or cross the grid boundary in four directions (up, down,...原创 2019-06-01 13:08:30 · 192 阅读 · 0 评论 -
算法导论中的图搜索算法范例
/** * 图的广度优先遍历 **/void bfs(vector<vector<int> >& g, int s) { queue<int> q; q.push(s); unordered_set<int> visited; visited.insert(s); while (!q.empty()) { int cur = q.fron原创 2017-05-25 17:17:57 · 302 阅读 · 0 评论 -
史上最全二叉树的遍历方法
#include<iostream>#include<sstream>#include<set>#include<stack>#include<queue>#include<vector>using namespace std;namespace tree{struct TNode { TNode* left; TNode* right; int val;原创 2017-05-24 17:46:31 · 401 阅读 · 0 评论 -
线段树解决区间覆盖问题
问题:给定一系列的区间,求其覆盖的区间的总长度。/************************************************************************* * File Name: Solution.cpp * Description: * Author: Yuji CAO * Mail: caoyuji@sogou-inc.com *原创 2015-08-17 21:27:55 · 1620 阅读 · 0 评论 -
网络编程中的标准处理函数
例1. 阳光照射问题桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?这个问题怎么来解决呢?使用线段树!/************************************************************************* * File Name: Solution.cpp原创 2015-08-04 16:03:55 · 342 阅读 · 0 评论 -
二分查找练习题
二分查找的练习题目主要包括:朴素二分查找lower_bound在旋转后的排序数组总二分查找#include<vector>using namespace std;class BinarySearch {public: /************************************************************************/ /*原创 2016-08-21 16:29:51 · 952 阅读 · 0 评论 -
逆转单链表
问题描述 给定单链表,A0->A1->…->An->#, 求单链表的逆转,即#<-A0<-A1<-…<-An.解决方案本题有两种解决方法,就像回字有四种写法,这里就挑选最简单的写法——递归。 如果输入是1->2->3->4->null, 只需要首先逆转2->3->4->null为2<-3<-4, 然后将2指向1就好了;然后问题的规模变小,我们就可以故伎重演 递归的整体流程如下: 1. 1->原创 2016-08-12 10:13:42 · 386 阅读 · 0 评论 -
排列问题算法-next_permutation,康托编码
#pragma once#include <algorithm>#include <set>using namespace std;class Permutation {public: /** 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 **/ vector<int>原创 2016-08-24 17:33:16 · 522 阅读 · 0 评论 -
trie 树的简单实现
namespace trie { class trieNode { public: trieNode() : nodeSize(0) { for(int i = 0; i < 26; ++i) children[i] = NULL; } ~trieNode() { for(int i原创 2016-08-24 20:58:46 · 201 阅读 · 0 评论 -
树形练习题
树形练习题学习算法的第一步就是树形联系题目。这几乎是所有问题的根基。这里将一些树形题目进行了分享,内容主要包括 -树的遍历 -求树的高度 -求树的最近公共祖先 -打印树的某个路径 废话不说了,现在就上代码:/*************************************************************************原创 2016-08-13 15:52:16 · 394 阅读 · 0 评论 -
字符串计数问题(稳定基因问题)
字符串计数问题(稳定基因问题)在字符串问题中有一类计数问题,许多字符串问题可以最终归结为计数问题,一个典型的代表是稳定基因问题。这个问题淋漓尽致地体现了解决这种问题的思路。问题描述:给定一个基因序列A,该基因是成为稳定基因,必须满足如下约束: - 基因序列A的长度为4*N; - 基因序列中每个碱基的数量都是N。解决思路:解决的思路非常具有技巧性,这种技巧主要体现在如何使用map来计数的。如果原创 2016-08-11 16:19:47 · 441 阅读 · 0 评论 -
链表练习题
链表练习题链表练习题主要包括链表逆序,链表判环和链表排序。/************************************************************************* > File Name: reverse_list.cpp > Author: Yuji CAO > Mail: yujicao@amazon.com > Cre原创 2016-08-13 18:47:08 · 274 阅读 · 0 评论 -
单调栈的经典应用
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on the left shows t原创 2016-08-13 20:44:22 · 514 阅读 · 0 评论 -
图论练习题
图论练习题主要包括: 1. dfs 2. bfs 3. kruskal 4. prim 5. dijsktra/************************************************************************* > File Name: graph.cpp > Author: Yuji CAO > Mail:原创 2016-08-14 21:10:26 · 771 阅读 · 0 评论 -
自己动手实现优先级队列
优先级队列是一种应用广泛的数据结构,例如可以用在dijsktra 算法中。我们这里使用deque来实现优先级队列,deque支持常数时间内随机访问以及首位添加和删除操作,非常适合用来实现优先级队列。 啥也不说了,上代码。#include <deque>#include <limits>using namespace std;class PriorityQueue {public:原创 2016-08-26 21:25:14 · 646 阅读 · 0 评论 -
不用除法求一个数组中除自己外的元素乘积
啥也不说,上代码#include <vector>class RangeMultiply {public: /* abcdefg a g ab fg abc efg abcd defg abcde cdefg abcdef bcdefg原创 2016-08-26 22:03:18 · 968 阅读 · 0 评论 -
八种常见的排序算法
算法性质 算法 稳定性 时间复杂度 计数排序 稳定 O(n) 基数排序 稳定 O(n) 桶排序 不稳定 O(n) 插入排序 稳定 O(n^2) 归并排序 稳定 O(nlogn) 快速排序 不稳定 O(nlogn) 希尔排序 不稳定 O(n^2) 堆排序 不稳定 O(nlogn)代码实现#inc原创 2017-05-23 18:46:20 · 247 阅读 · 0 评论 -
史上最强排序算法合集
/************************************************************************* > File Name: sort_v2.cpp > Author: ma6174 > Mail: ma6174@163.com > Created Time: 一 5/22 19:29:07 2017 *****原创 2017-05-23 21:04:06 · 4390 阅读 · 0 评论 -
算法导论中的顺序统计学示范代码
#include<iostream>#include<vector>#include<algorithm>using namespace std;namespace select {/** * 使用快速排序的思想完成选择 **/int divide(vector<int>& in, int beg, int end, int pivot) { if (beg >= end)原创 2017-05-24 10:39:40 · 263 阅读 · 0 评论 -
KMP next数组的求法
KMP 算法的next数组求法:void getNext(char* ptn,int next[]){ int i=0; int j=-1; int len=strlen(ptn); next[0]=-1; while(i<len){ if(-1==j||ptn[i]==ptn[j]){ i++;j++;原创 2015-07-18 13:24:26 · 432 阅读 · 0 评论