
算法
努力学挖掘机的李某某
Thu->DIDI
展开
-
POJ 1552 & ZOJ 1760 & UVA2787
思路:循环读取数字,根据标志终止,对每一组数字遍历两次#include using namespace std;int main(){ int a[16], count; cin >> a[0]; while(a[0] != -1){ int i = 0; while(a[i] != 0){ cin >>原创 2017-07-02 11:32:29 · 427 阅读 · 0 评论 -
Prim算法求最小生成树的c++代码实现
Prim算法是求解最小生成树的常用方法,它的思想非常简单,讲所有的点集合V分为 已经放入最小生成树集合的S和未放入的V-S,每次在V-S中选择一个距离S最近的点放入到S中,直到所有的点都放入S。就是很简单的贪心策略,不过可以证明是全局最优,prim算法对于稠密图效果比较好,具体步骤可以看点击打开链接,讲解的很清楚。对于上面的图,显然最小生成树的结果应该是{1,3,6,2,4,5}或者{1,原创 2017-09-29 11:07:38 · 11462 阅读 · 0 评论 -
Kruskal算法求最小生成树的c++代码实现
kruskal算法是一类适用于稀疏图的最小生成树算法,主要思想也很简单,将所有的边分为 属于生成树的边S和不属于的V-S ,每次在V-S中找一个权值最小的边放入S中,同时该边不构成回路,关于是否构成回路,可以使用并查集来判断。比如上图中假如{1,2} , {1,3}都已经属于,那么unionSet[3] = unionSet[2] = unionSet[1] = 1;这时如果想加入{原创 2017-09-29 15:52:49 · 3502 阅读 · 0 评论 -
Djkstra最短路径算法的c++代码实现
Djkstra算法是求解单源(起始点固定)最短路径问题的一种经典方法,它采用了贪心策略(其实我觉得也是动态规划),可以求得图中的一个点到其他所有点的距离,计算复杂度是 O(E|V|),如果采用最小堆优化可以达到O(ElogV )。算法的整体思想是将顶点分成两类:已经构成最短路的点的集合V1和没有构成最短路的点的集合V2。我们将dist[i]设置为第 i个点到V1的距离,每次将V2中取距离V1集合最原创 2017-09-29 09:44:09 · 3214 阅读 · 0 评论 -
【机器学习】——为什么softmax搭配cross entropy是解决分类问题的通用方案?
众所周知,softmax+cross entropy是在线性模型、神经网络等模型中解决分类问题的通用方案,但是为什么选择这种方案呢?它相对于其他方案有什么优势?笔者一直也困惑不解,最近浏览了一些资料,有一些小小心得,希望大家指正~损失函数:交叉熵Cross Entropy我们可以从三个角度来理解cross entropy的物理意义从实例上直观理解我们首先来看Cross Entropy 的公...原创 2019-04-18 22:52:53 · 1097 阅读 · 3 评论 -
【机器学习】—— 各种梯度下降的变形momentum,adagrad,rmsprop,adam分别解决了什么问题
MomentumMomentum的公式表达设时间步ttt的自变量为xt\boldsymbol{x}_txt,学习率为ηt\eta_tηt。在t0t_0t0时刻,速度变量v0=0\boldsymbol{v}_0=0v0=0,在时间步t>0t>0t>0,Momentum关于速度变量vt=0\boldsymbol{v}_t=0vt=0和自变量xt\bold...原创 2019-06-21 08:04:26 · 725 阅读 · 0 评论 -
【机器学习】从RNN到Attention上篇 循环神经网络RNN,门控循环神经网络LSTM
为什么我们需要RNN对于一个时间序列问题,已知f(x1),f(x2),f(x3),....,f(xt−1)f(x_1),f(x_2),f(x_3),....,f(x_{t-1})f(x1),f(x2),f(x3),....,f(xt−1),求解f(xt∣x1,x2,....,xt−1)f(x_t|x_{1},x_2,....,x_{t-1})f(xt∣x1,x2,....,xt−1...原创 2019-06-29 14:49:02 · 746 阅读 · 0 评论 -
ZOJ 2739 & UVA 3399
思路:先离线求出[2,10000]的所有素数,再从素数数组从前往后累加求和#include using namespace std;bool isPrime(int x){ if(2 >= x) return true; for(int i = 2; i < int(sqrt(double(x)))+1; i++) { if(0原创 2017-07-02 12:05:20 · 382 阅读 · 0 评论 -
POJ 1005 & ZOJ 1049 & UVA 2363
思路:求出在x,y点的面积,除以每年的腐蚀面积,向上取整,使用ceil()函数 #include using namespace std;#define PI 3.141592653 int main(){ int test_num; cin >> test_num; double x,y; double area; int year;原创 2017-07-03 14:20:43 · 363 阅读 · 0 评论 -
POJ 1003 & UVA 2294
思路:先离线求得卡片数对应长度的数组,然后使用二分查找,注意c语言的abs()函数返回的是整数类型,要返回浮点数可以使用fabs函数#include#include#includeconst double delta= 1e-8;int binary_search(float input, float cards[], int maxNum){ int left = 0, rig原创 2017-07-03 14:21:53 · 486 阅读 · 0 评论 -
POJ 2196 & ZOJ 2405 & UVA 3199
思路:进制转换,使用辗转相除法,由于只需要求和,因此不需要考虑余数逆序,直接相加即可#includeusing namespace std;int systemSum(int x, int base){ int sum = 0; while(x){ sum += (x % base); x /= base; } return sum;}int原创 2017-07-03 14:53:56 · 558 阅读 · 0 评论 -
POJ 1338 & UVA 136
思路:用2,3,5分别求积得到所有的丑数,再排序后求第n个#include#includeusing namespace std;const int maxN = 1500;int main(){ int a[maxN]; int pos = 0; for(int i = 1; i < 100; i*=2) for(int j = 1原创 2017-07-03 15:58:24 · 242 阅读 · 0 评论 -
牛客网 二维数组中的查找python实现
思路:二维数组由上到下,由左到右递增,可以选取右上角或者左下角的元素a[row][col]与target进行比较,当target小于元素a[row][col]时,target必定在a[row][col]所在行的左边,当target大于元素a[row][col]时,target必定在a[row][col]所在列的下边代码实现:def Find( target, array):原创 2017-07-12 16:51:57 · 460 阅读 · 0 评论 -
简单排序算法:冒泡排序,选择排序和插入排序的c++实现
所有代码的实现采用了模板类,如果对模板类不熟悉,可以把T换成 int一、冒泡排序冒泡排序的思想:相邻元素两两比较,如果逆序则交换冒泡排序的实现思路:i 从数组的第二个下标开始循环(即以下标为1开始),每次从最后一个元素开始,依次与前一个元素对比交换,每循环一次,则前i个元素为有序的。优点:冒泡排序在无下标的几个元素排序时,比其他排序算法更直接(比如三个数,找出其中中间大小的原创 2017-08-14 14:25:49 · 546 阅读 · 0 评论 -
归并排序的c++代码实现
归并排序归并排序的思想:将数组一分为二,分别对左右两个数组进行排序,然后对左右两个有序数组归并成一个有序数组时间复杂度:O(nlogn)自顶向下的代码templatevoid __merge(T arr[], int l, int mid, int r){ int len_left = mid - l + 1; int len_right = r - m原创 2017-08-14 19:13:15 · 786 阅读 · 0 评论 -
快速排序的c++代码实现
快速排序的基本思想就是选择一个pivot,将小于pivot的值都放在左边,将大于pivot的值都放在右边,然后递归,为了简单pivot取最左边的值void quickSort(int a[], int left, int right){ if(left >= right) return; int pivot = a[left]; //选择最左边的值作为pivot int l原创 2017-07-18 16:21:28 · 525 阅读 · 0 评论 -
阿里秋招编程题
1.现在城市有N个路口,每个路口有自己的编号,从0到N-1,每个路口还有自己的交通控制信号,例如0,3表示0号路口的交通信号每3个时刻变化一次,即0到3时刻0号路口允许通过,3到6时刻不允许通过,而6到9时刻又允许通过;以此类推,所有路口的允许通行都从时刻0开始。同时城市中存在M条道路将这N个路口相连接起来,确保从一个路口到另一个路口都可达,每条路由两个端点加上通行所需要的时间表示。现在给定起始路原创 2017-08-25 22:31:04 · 595 阅读 · 0 评论 -
【机器学习】从RNN到Attention 中篇 从Seq2Seq到Attention in Seq2Seq
变长输出模型——Seq2Seq在上一篇【机器学习】从RNN到Attention上篇 循环神经网络RNN,门控循环神经网络LSTM中,我们的建模基础是通过一串历史的时间序列x1,x2,.....,xtx_1,x_2,.....,x_tx1,x2,.....,xt,预测下一时刻的时间序列xt+1x_{t+1}xt+1,即输出为1一个数据。如下图所示:这类模型通常可以用来解决时间序列预测,...原创 2019-06-30 13:06:49 · 745 阅读 · 0 评论