算法

【含课程pdf & 测验答案】吴恩达-机器学习公开课 学习笔记 Week10 Large Scale Machine Learning

╄→гoц情女王★ 提交于 2020-01-17 03:27:58
吴恩达-机器学习公开课 学习笔记 Week10 Large Scale Machine Learning 10 Large Scale Machine Learning 课程内容 10-1 Gradient Descent with Large Datasets Learning With Large Datasets Stochastic Gradient Descent Mini-Batch Gradient Descent Stochastic Gradient Descent Convergence 10-2 Advanced Topics Online Learning Map Reduce and Data Parallelism 测验 Large Scale Machine Learning 课程链接 课件 10 Large Scale Machine Learning 课程内容 此文为Week10 中Large Scale Machine Learning的部分。 10-1 Gradient Descent with Large Datasets Learning With Large Datasets 得到一个高效的机器学习系统的最好的方式之一是用一个低偏差的学习算法,然后用很多数据来训练它。 在大规模的机器学习中,我们喜欢找到合理的计算量的方法

IoU,GIoU,DIoU和CIoU三种目标检测loss

戏子无情 提交于 2020-01-17 01:51:41
IoU:使用最广泛的检测框loss。 GIoU:2019年CVPR Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression DIoU和CIoU:2020年AAAI Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression 下面我们直接一句话总结一下这四种算法的优缺点: 1. IoU算法是使用最广泛的算法,大部分的检测算法都是使用的这个算法。 2. GIoU考虑到,当检测框和真实框没有出现重叠的时候IoU的loss都是一样的,因此GIoU就加入了C检测框(C检测框是包含了检测框和真实框的最小矩形框),这样就可以解决检测框和真实框没有重叠的问题。但是当检测框和真实框之间出现包含的现象的时候GIoU就和IoU loss是同样的效果了。 3. DIoU考虑到GIoU的缺点,也是增加了C检测框,将真实框和预测框都包含了进来,但是DIoU计算的不是框之间的交并,而是计算的每个检测框之间的欧氏距离,这样就可以解决GIoU包含出现的问题。 4. CIoU就是在DIoU的基础上增加了检测框尺度的loss,增加了长和宽的loss,这样预测框就会更加的符合真实框。 这些只是我看的重点

从零开始的编程

扶醉桌前 提交于 2020-01-17 00:44:52
算法笔记从零开始 2020/1/16 前言 今日算法01:归并排序 今日算法02:快速排序: 2020/1/16 前言 每天坚持写点东西,从基础算法开始做起; 今日算法01:归并排序 时间复杂度:O(nlogn) 1.递归实现: # include <cstdio> const int maxn = 100 ; int calcount = 0 ; //统计计算次数; void merge ( int A [ ] , int L1 , int R1 , int L2 , int R2 ) { int i = L1 , j = L2 ; int temp [ maxn ] , k = 0 ; while ( i <= R1 && j <= R2 ) { if ( A [ i ] <= A [ j ] ) { temp [ k ++ ] = A [ i ++ ] ; } else { temp [ k ++ ] = A [ j ++ ] ; } } while ( i <= R1 ) temp [ k ++ ] = A [ i ++ ] ; while ( j <= R2 ) temp [ k ++ ] = A [ j ++ ] ; //return temp; for ( int i = 0 ; i < k ; i ++ ) { A [ L1 + i ] = temp [ i ] ;

算法分析——浅析算法的时间复杂度

荒凉一梦 提交于 2020-01-16 18:51:31
算法分析——算法的时间复杂度 绪论 1.电脑运行程序是需要时间的 2.算法的时间复杂度 简单计算方法 最后的话 绪论 时间复杂度是学习算法的基石,也是判断一个算法优劣的重要因素,今天我们来聊聊什么是时间复杂度以及如何去算一个算法的时间复杂度。 本文以C++语言为例 1.电脑运行程序是需要时间的 void print ( ) { //这段代码会运行多久? int n = 100 ; for ( int i = 0 ; i < n ; i ++ ) { cout << n << endl ; } } 想知道这段代码运行多久,首先得知道程序运行的时候时间都花费在哪里, 重要概念 :电脑运行代码片段的时候,执行任何一条语句都需要花费时间,这是时间花费的主要地方。 为了方便运算,这里我们把每一条语句的执行时间都看做是一样的,记为一个 时间单元 。(实际上每条语句的时间不会完全一样,根据复杂程度而定。就类似于人看书一样,阅读文字是需要时间的) 这样可以简单的计算: 运行时间 = 语句数量* 时间单元 那么刚刚的代码中有多少语句呢? 1.红框两个语句只运行一次,花费2个时间单元。 2.黄框两个语句运行n次,花费2*n个时间单元。 3.绿框一个语句运行n+1次,花费n+1个时间单元。 所以该代码运行时间3n+3个时间单元,可以看出该代码的时间消耗与n成 线性关系 ,现在用T(n

第二章 算法分析

喜你入骨 提交于 2020-01-16 18:25:08
算法是为求解一个问题需要遵循的,被清楚指定的简单指令的集合,判断一个算法的好坏,其 平均运行时间 一般是难以得到的,但是 最坏情况的运行时间 容易得出,一般用最坏情况下的运行时间来衡量一个算法的好坏。 1 最大子序列和问题 这里实验了三个算法复杂度分别是O( N 2 N^2 N 2 )、O(N log ⁡ N \log{N} lo g N )和O(N)的算法 1.1 二次解法 即进行两次遍历求最大子序列和的方式进行处理。 /** * 两个for循环,时间大小为O(N*N) * @param arr * @return */ public static int firstMethod ( int [ ] arr ) { int maxSum = 0 ; for ( int i = 0 ; i < arr . length ; i ++ ) { int thisSum = 0 ; for ( int j = i ; j < arr . length ; j ++ ) { thisSum += arr [ j ] ; if ( thisSum > maxSum ) { maxSum = thisSum ; } } } return maxSum ; } 1.2 二分法 分治法解决最大子序列和问题 1、将数组分成两部分,找出前半部分的最大子序列和(max1)和后半部分的最大子序列和

防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!

旧街凉风 提交于 2020-01-16 16:29:26
大家好,我是 Rocky0429,一个连数据结构和算法都不会的蒟蒻… 学过数据结构和算法的都知道这玩意儿不好学,没学过的经常听到这样的说法还没学就觉得难,其实难吗?真难! 难在哪呢?当年我还是个小蒟蒻,初学数据结构和算法的时候,在忍着枯燥看完定义原理,之后想实现的时候,觉得它们的过程真的是七拐八绕,及其难受。 在简单的链表、栈和队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图论的时候,中间实现的过程步骤开始剧增,那个时候靠写写画画和对程序的单步调试强行理解,作为一个智商一直被压制的惨人,稍不注意就会重新来过,陷入死循环… 后来搞 ACM 之初,我的队友给了我一个数据结构模拟器的压缩包(后来知道好像是严蔚敏数据机构那本书光盘里带的),里面是对一些数据结构的模拟操作,一步步的很形象,有些东西好像一下子就通了… 这种可视化的动画真的对我们理解数据结构和算法非常有帮助,尤其是在学习之初,堪称很好的防劝退工具,所以我对这些做了一些整理,希望能帮助到你。 0x00 数据结构在线模拟器 Github 网址:https://github.com/IACJ/react-datastructer 在线网址:https://iacj.github.io/react-datastructer/#/ 这个在线的模拟器包含“栈”、“队列”、“堆”、“BST” 等数据结构

算法五:快速排序

自作多情 提交于 2020-01-16 14:58:35
快速排序是对冒泡排序的一种改进。思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序。 选择一个基准数,这个数的左边都比她小,右边的都比它大,然后再递归处理左右两边的操作直到左右的各区只有一个数 数组: 3,2,1,6,9 #include <iostream> using namespace std; void Qsort(int a[], int low, int high) { if (low >= high) return; int frist = low; int last = high; int key = a[frist]; while (frist < last) { while (frist < last &&a[last] > key) --last; a[frist] = a[last]; while (frist < last && a[frist] < key) ++frist; a[last] = a[frist]; } a[frist] = key; Qsort(a, low, frist); Qsort(a, frist + 1,high); } int main() { int a[] = {3,1

最小生成树-Prim算法和Kruskal算法

*爱你&永不变心* 提交于 2020-01-16 14:36:26
Prim算法 1.概览 普里姆算法 ( Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有 顶点 ( 英语 : Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家 沃伊捷赫·亚尔尼克 ( 英语 : Vojtěch Jarník)发现;并在1957年由美国计算机科学家 罗伯特·普里姆 ( 英语 : Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。 2.算法简单描述 1).输入:一个加权连通图,其中顶点集合为V,边集合为E; 2).初始化:V new = {x},其中x为集合V中的任一节点(起始点),E new = {},为空; 3).重复下列操作,直到V new = V: a.在集合E中选取权值最小的边<u, v>,其中u为集合V new 中的元素,而v不在V new 集合当中,并且v∈V(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一); b.将v加入集合V new 中,将<u, v>边加入集合E new 中; 4).输出:使用集合V new 和E new 来描述所得到的最小生成树。 下面对算法的图例描述

HTTP与HTTPS的区别

跟風遠走 提交于 2020-01-16 07:20:26
什么是HTTP? MDN的描述: HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。 那什么是HTTPS? 维基百科的描述: HTTP安全(HTTPS)是超文本传输​​协议(HTTP)的扩展,用于通过计算机网络进行安全通信,并且广泛用于Internet。 在HTTPS中,通信协议由传输层安全性(TLS)或以前的前身安全套接字层(SSL)加密。因此该协议通常也被称为HTTP over TLS, 或HTTP over SSL。 一、HTTP与HTTPS的区别 HTTP的URL以http:// 开头,HTTPS 的URL以https:// 开头; HTTP不需要证书,HTTPS需要CA证书; HTTP是明文传输,HTTPS加密传输; HTTP和HTTPS都基于TCP(以及UDP)协议,但HTTP使用TCP协议80端口, HTTPS使用TCP协议443端口; HTTP直接和TCP通信,HTTP先和SSL通信,SSL再和TCP通信。 HTTPS采用混合加密机制 百度的描述 公开密钥加密也称为非对称密钥加密,该加密算法使用两个不同的密钥

二分图匹配——匈牙利算法

こ雲淡風輕ζ 提交于 2020-01-16 04:15:18
具体简介 int n , m ; int line [ maxn ] [ maxm ] ; int vis [ maxm ] ; int right [ maxm ] ; bool find ( int x ) { for ( int i = 1 ; i <= m ; i ++ ) { if ( line [ x ] [ i ] && ! vis [ i ] ) { vis [ i ] = 1 ; if ( right [ i ] == - 1 || find ( r [ i ] ) ) { right [ i ] = x ; return true ; } } } return false ; } int tol = 0 ; void solve ( ) { for ( i = 1 ; i <= n ; i ++ ) { memset ( vis , 0 , sizeof ( vis ) ) ; if ( find ( i ) ) tol ++ ; } } int main ( ) { memset ( line , 0 , sizeof ( line ) ) ; memset ( r , - 1 , sizeof ( r ) ) ; /**************************************/ } 来源: CSDN 作者: 爱吃猫的鱼 链接: https:/