递归调用

条件随机场CRF原理介绍 以及Keras实现

夙愿已清 提交于 2019-12-01 05:35:44
本文是对CRF基本原理的一个简明的介绍。当然,“简明”是相对而言中,要想真的弄清楚CRF,免不了要提及一些公式,如果只关心调用的读者,可以直接移到文末。 图示 # 按照之前的思路,我们依旧来对比一下普通的逐帧softmax和CRF的异同。 逐帧softmax # CRF主要用于序列标注问题,可以简单理解为是 给序列中的每一帧都进行分类 ,既然是分类,很自然想到将这个序列用CNN或者RNN进行编码后,接一个全连接层用softmax激活,如下图所示 逐帧softmax并没有直接考虑输出的上下文关联 条件随机场 # 然而,当我们设计标签时,比如用s、b、m、e的4个标签来做字标注法的分词,目标输出序列本身会带有一些上下文关联,比如s后面就不能接m和e,等等。逐标签softmax并没有考虑这种输出层面的上下文关联,所以它意味着把这些关联放到了编码层面,希望模型能自己学到这些内容,但有时候会“强模型所难”。 而CRF则更直接一点,它 将输出层面的关联分离了出来 ,这使得模型在学习上更为“从容”: CRF在输出端显式地考虑了上下文关联 数学 # 当然,如果仅仅是引入输出的关联,还不仅仅是CRF的全部,CRF的真正精巧的地方,是它 以路径为单位,考虑的是路径的概率 。 模型概要 # 假如一个输入有 n n 帧,每一帧的标签有 k k 种可能性,那么理论上就有 k n kn 中不同的输出

8 递归函数

血红的双手。 提交于 2019-12-01 05:24:06
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是 递归函数 递归特性: 必须有一个明确的结束条件 每次进入更深一层递归时,问题规模相比上次递归都应有所减少 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出) def calc(n): print(n) if int(n/2) ==0: return n return calc(int(n/2)) calc(10) #输出 10 5 2 1 来看实现过程,我改了下代码 def calc(n): v = int(n/2) print(v) if v == 0: return calc(v) print(v) calc(10) #输出 5 2 1 0 1 2 5 为什么输出结果是这样? 来源: https://www.cnblogs.com/shibojie/p/11658271.html

漫谈递归和迭代

亡梦爱人 提交于 2019-12-01 04:59:06
先讲个故事吧。 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”。 这个故事永远也讲不完,因为没有递归结束条件。老师讲递归时总是说,递归很简单,一个递归结束条件,一个自己调用自己。如果递归没有结束条件,那么就会无限递归下去。在编程的时候,没有递归结束条件或者递归过深,一般会造成栈溢出。 下面这个函数,可以利用栈溢出来估测栈的大小: 1 void stack_size() 2 { 3 static int call_time = 0; 4 char dummy[1024*1024]; 5 call_time++; 6 printf("call time: %d\n",call_time); 7 stack_size(); 8 } 递归算法一般用于解决三类问题:这个函数定义了1M的局部变量,然后调用自己。栈溢出时会崩溃,根据最后打印出的数字可以算一下栈的大小。 (1)数据的定义是按递归定义的。(Fibonacci函数) (2)问题解法按递归算法实现。(回溯) (3)数据的结构形式是按递归定义的。(树的遍历,图的搜索) 对于求1+2+3+…+n这种问题,大部分人不会用递归方式求解: 1 2 3 4

递归-删除table表中最后一行数据

北城以北 提交于 2019-12-01 02:53:13
递归,就是自己调用自己。 /// <summary> /// 递归-删除table表中的最后一行空数据 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static DataTable getNoLastWhiteRow(DataTable dt) { bool res = false; if(string.IsNullOrEmpty(dt.Rows[dt.Rows.Count - 1][dt.Columns[0].ColumnName].ToString())) { dt.Rows.RemoveAt(dt.Rows.Count - 1); if (!res) { getNoLastWhiteRow(dt); } } else { res = true; } return dt; } 来源: https://www.cnblogs.com/wjtstudy/p/11649545.html

第2章作业

僤鯓⒐⒋嵵緔 提交于 2019-12-01 02:12:28
1.对分治法思想的体会 分治法思想是将一个规模较大的问题分成若干个与原问题相同、互相独立且规模大致相同的问题。运用分治策略可以提高一些算法的效率,如二分搜索算法与普通的搜索算法相比,在时间复杂度上有很大的改进。使用分治法,一个难点就是如何分割子问题,在解决这一问题上,需要用到平衡子问题的思想。但是,采用分治法设计的程序一般是递归算法,也就是说,我们在使用分治策略的同时,必须对递归有一定的掌握,需要注意递归结束条件的设置,以及建立合理的递归方程,从而尽量避免一些潜在的且难以发现的问题。使用递归尤其需要注意的是,当递归层次过深时,可能会造成递归调用工作栈溢出,即递归的使用对于问题的规模有一定的限制。因此,在运用分治策略时需要考虑到这些因素。 2.结对编程情况汇报 结队编程,可以帮助我们打破自己存在的潜在的思维禁锢,也有助于改进我们的算法,比如潜在错误的发现、可优化的点等。同时,我们也可以积累更多的解决问题的方法,从而设计出更优化的算法。 本次结对编程过程中,存在的问题有遗漏方法调用的声明、while循环与递归嵌套使用、全局变量与局部变量的选择(使用全局变量简化代码,增强程序的可读性)、if条件语句分情况的讨论存在赘余,以及控制条件语句执行的结束。最后,通过和队友一起debug以及在老师的指导下,解决以上问题的同时也优化了代码。不断地发现问题并解决问题,是提高程序代码质量的途径之一

汉诺塔的图解递归算法

断了今生、忘了曾经 提交于 2019-11-30 23:27:30
转自: https://www.cnblogs.com/dmego/p/5965835.html https://dmego.me/2016/10/16/hanoi 一.起源:   汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 二.抽象为数学问题:   如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数 解:(1)n == 1       第1次 1号盘 A---->C sum = 1 次 (2) n == 2       第1次 1号盘 A---->B        第2次 2号盘 A---->C       第3次 1号盘 B---->C sum = 3 次   (3)n == 3         第1次 1号盘 A---->C         第2次 2号盘 A---->B         第3次 1号盘 C---->B         第4次 3号盘 A---->C        

递归

若如初见. 提交于 2019-11-30 23:01:17
递归 什么是递归 递归就是自己调用自己,每次调用传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得更加简洁 递归执行过程 1.当程序执行到一个方法的时候,就会开辟一个新的栈 2.每个空间的局部变量是独立的 递归的案例 package recursion; public class RecursionTest { public static void main(String[] args) { // TODO Auto-generated method stub test(5); System.out.printf("factorial(%d)=%d\n",5,factorial(5)); } public static void test(int n) { if(n>2) { test(n-1); } System.out.println("n="+n); } public static int factorial(int n) { if(n==1||n==0) { return 1; }else { return factorial(n-1)*n; } } } 递归解决什么问题 1.8皇后、汉诺塔、阶乘、二分查找、迷宫等问题 2.快速排序、归并排序、二分查找、分治算法 3.用栈解决问题,代码整洁 递归重要的规则 1.执行一个方法会创建一个独立受到保护的栈的空间 2

递归

十年热恋 提交于 2019-11-30 22:11:53
递归 基本思想:自己调用自己 递归结构包括两个部分:1 .定义递归头 即什么时候不调用自身方法 如果没有头,将进入死循环,也就是递归的结束条件 2 .递归体 即什么时候需要调用自身方法 练习1: /** * 用递归解决下面描述的问题: * 有三种面值的硬币,分别是1分,2分,5分, * 现在给出一个价值,例如价值11,问组成该价值最少需要的硬币数量是多少??? * 11 = 1 10 * 11 = 2 9 * 11 = 5 6 */ public class Coin { public static int lessCoin(int i){ if(i==1||i==2||i==5){ //如果是一角、两角、五角的直接返回一个数量 return 1; }else if(i<5){ //3角和4角都返回2个数量 return 2; }else{ return Math.min(1+lessCoin(i-1),Math.min(1+lessCoin(i-2), 1+lessCoin(i-5))); //若大于5,则应该返回三个中的最小数量 } } public static void main(String[] args) { System.out.println(lessCoin(12)); System.out.println(lessCoin(13)); } } 练习2:汉诺塔

SqlServer触发器

て烟熏妆下的殇ゞ 提交于 2019-11-30 21:13:07
概念:   触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。 触发器和存储过程的区别:   触发器与存储过程的区别是运行方式的不同,触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行而存储过程需要用户,应用程序或者触发器来显示地调用并执行。 一:触发器的优点  1.触发器是自动的。当对表中的数据做了任何修改之后立即被激活。  2.触发器可以通过数据库中的相关表进行层叠修改。  3.触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。 二:触发器的作用  触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂参照完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性,并自定义错误消息。触发器的主要作用主要有以下接个方面: 强制数据库间的引用完整性

SQL With As 用法

会有一股神秘感。 提交于 2019-11-30 20:56:23
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到。可以使SQL语句的可读性更高,也可以在UNION ALL的不同部分,作为提供数据的部分。 对于UNION ALL,使用WITH AS定义了一个UNION ALL语句,当该片断被调用2次以上,优化器会自动将该WITH AS短语所获取的数据放入一个Temp表中。而提示meterialize则是强制将WITH AS短语的数据放入一个全局临时表中。很多查询通过该方式都可以提高速度。 二.使用方法 先看下面一个嵌套的查询语句: select * from person.StateProvince where CountryRegionCode in (select CountryRegionCode from person.CountryRegion where Name like 'C%') 上面的查询语句使用了一个子查询。虽然这条SQL语句并不复杂,但如果嵌套的层次过多,会使SQL语句非常难以阅读和维护。因此,也可以使用表变量的方式来解决这个问题,SQL语句如下: declare @t table(CountryRegionCode nvarchar(3)) insert into @t(CountryRegionCode)