递归函数

二叉树算法练习递归类型汇总

谁说我不能喝 提交于 2019-12-01 07:24:25
递归类型 按照编程技巧分啪 一、将复杂问题分解成两个子问题 1、平衡二叉树( LeetCode题库110题 ) 自上而下 :算每个节点的平衡因子(即左右子树的高度差),判断是否满足条件。 可以分成两个子问题:求树的高度,和遍历树判断每个节点的是否满足条件 class Solution { public boolean isBalanced(TreeNode root) { if(root == null) { return true; }else { //判断根结点是否满足平衡因子 int ldepth = depth(root.left); int rdepth = depth(root.right); System.out.println(ldepth + " " + rdepth); if(Math.abs(ldepth - rdepth) > 1) { return false; } //判断左子树是否满足平衡因子 if(!isBalanced(root.left)) { return false; } //判断右子树是否满足平衡因子 if(!isBalanced(root.right)) { return false; } return true; } } private int depth(TreeNode root) { int l = 0; int r = 0;

条件随机场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 中不同的输出

Linux常用命令

≯℡__Kan透↙ 提交于 2019-11-30 22:36:59
关于linux的一些常用命令总结。。。 一、Linux权限的概念 Linux下有两种用户:普通用户和超级用户: 普通用户:在linux下做有限的事情; 超级用户:可以在linux系统下做任何事情,不受限制。 普通用户的提示符是“$”,超级用户的命令提示符是“#”。 命令: su [用户名] 功能:切换用户 Linux权限管理 1.文件访问者的分类(人) 文件和文件目录的所有者:u—User 文件和文件目录的所有者所在的组的用户:g—Group 其他用户:o—Others 2.文件访问权限的种类 基本权限: read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录信息的权限。 write 对文件而言,具有修改文件内容的权限;对目录来说,具有删除移动目录内文件的权限。 execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。 - 表示不具有该权限。 3.文件权限值得表示方法 r– 只读 -w- 仅可写 –x 仅可执行 rw- 可读可写 -wx 可写可执行 r-x 可读可执行 rwx 可读可写可执行 — 无权限 二、Linux下基本命令 1.ls命令: 格式::ls [选项] [目录或文件] 功能:对于目录,列出该目录下的所有子目录与文件;对于文件,列出文件名以及其他信息。 常用选项: -a :列出目录下的所有文件,包括以 . 开头的隐含文件。 -d

内置函数与递归

北战南征 提交于 2019-11-30 12:37:05
1.文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female 28 10000 要求: 从文件中取出每一条记录放入列表中,列表的每个元素都是 {'name':'egon','sex':'male','age':18,'salary':3000} 的形式 根据1得到的列表,取出薪资最高的人的信息 根据1得到的列表,取出最年轻的人的信息 根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式 根据1得到的列表,过滤掉名字以a开头的人的信息 使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...) 一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值 #从文件中取出每一条记录放入列表中,列表的每个元素都是`{'name':'egon','sex':'male','age':18,'salary':3000}`的形式 with open(r'info.txt','r',encoding='utf-8') as fr: values_info = fr.read().split("\n") keys = ["name",

用递归来判断输入的字符串是否是回文

早过忘川 提交于 2019-11-30 12:29:37
设计思路:导入Scanner类输入字符串,再将输入的字符串转化为字符数组,然后从字符串左右两侧依次比较字符chu是否相同,若相同递归返回读取的字符个数,若返回字符的个数==输入字符串的长度,则输出该字符串是回文,否则输 出该字符串不是回文 import java.util.Scanner; public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String a = input.nextLine(); char[] temp = a.toCharArray(); int c = fun(0, temp.length-1, temp); if (c == temp.length) System.out.println("该字符串是回文数"); else System.out.println("该字符串不是回文数"); input.close(); } public static int fun(int i, int j, char[] a) { //定义一个函数判断字符串是否是回文 if (j == i) //字符串长度为奇数 return 1; else if(i -

递归 回文

一世执手 提交于 2019-11-30 12:27:22
应用了递归的思想,回文是看第几个和倒数第几个是不是相同,设函数类型是布尔型 ,如果不同则返回值为false,对应着不是回文。 如果相等的话那么第几个+1 倒数第几个-1,在比较。直到n=0或n=1结束。当然就1个的话也是回文。 //张华锦 import java.util.Scanner; public class Test { public static void main(String[] args) { String str; Scanner scanner=new Scanner(System.in); str=scanner.next(); int s=str.length()-1; int i=0; boolean a; a=abs(s,i,str); if(a!=true) { System.out.println(str+" ,不是回文"); }else { System.out.println(str+" ,是回文"); }} public static boolean abs(int n,int i,String a) { if(n==0||n==1) {return true; } else { if(a.charAt(i)==a.charAt(n)) { return abs(++i,--n,a); } else return false; } } }

Python模块之递归处理文件和文件夹

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-30 09:24:48
这里有两个需求: 删除某个目录以及子目录下的所有.svn文件 删除某个文件夹下所有文件 在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工作目录 os.curdir:返回当前目录('.') os.chdir(dirname):改变工作目录到dirname os.path.isdir(name):判断name是不是一个目录,name不是目录就返回false os.path.isfile(name):判断name是不是一个文件,不存在name也返回false os.path.exists(name):判断是否存在文件或目录name os.path.getsize(name):获得文件大小,如果name是目录返回0L os.path.abspath(name):获得绝对路径 os.path.normpath(path):规范path字符串形式 os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件 名而分离,同时它不会判断文件或目录是否存在) os.path.splitext():分离文件名与扩展名 os.path.join(path,name):连接目录与文件名或目录 os.path.basename(path

ES5

隐身守侯 提交于 2019-11-30 05:03:59
什么是ES5:比普通js运行要求更加严格的模式 为什么:js语言本身有很多广受诟病的缺陷 如何:在当前作用域的顶部添加:"use strict" 要求: 1、禁止给未声明的变量赋值 2、静默失败升级为错误 静默失败:执行不成功,也不报错! 3、禁用了 arguments.calee arguments.callee:在调用时,获得当前正在执行函数名,因为递归的效率极低--重复计算量太大 解决:几乎所有的递归都可以用循环代替 4、普通函数调用和匿名函数自调中的this不再指向window,而是underfine 来源: https://my.oschina.net/u/4165441/blog/3108810

Oracle树形结构查询(递归)

扶醉桌前 提交于 2019-11-30 03:48:57
引用: https://blog.csdn.net/u012615705/article/details/78321022 文章转自上述地址,内部有稍许改动,如有需要请查看原文。 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。 概要:树状结构通常由根节点、父节点、子节点和叶节点组成,简单来说,一张表中存在两个字段,dept_id,par_dept_id,那么通过找到每一条记录的父级id即可形成一个树状结构,也就是par_dept_id(子)=dept_id(父),通俗的说就是这条记录的par_dept_id是另外一条记录也就是父级的dept_id,其树状结构层级查询的基本语法是:   SELECT [LEVEL],*   FEOM table_name   START WITH 条件1   CONNECT BY PRIOR 条件2   WHERE 条件3   ORDER BY 排序字段   说明:LEVEL---伪列,用于表示树的层次      条件1---根节点的限定条件,当然也可以放宽权限,以获得多个根节点,也就是获取多个树      条件2---连接条件,目的就是给出父子之间的关系是什么,根据这个关系进行递归查询      条件3---过滤条件,对所有返回的记录进行过滤。      排序字段--

python实现基础的数据结构(二)

非 Y 不嫁゛ 提交于 2019-11-29 18:33:55
本文涉及到的代码均已放置在我的github中 --> 链接 python实现基础的数据结构(一) python实现基础的数据结构(二) python实现基础的数据结构(三) python语法较为简洁,正好最近在复习数据结构,索性就用python去实现吧😀 本文实现的有线性表、栈、队列、串、二叉树、图、排序算法。参照教材为 数据结构(C语言版)清华大学出版社 ,还有网上的一些大神的见解。由于包含代码在内,所以内容很多,分了几篇,话不多说,我们直接步入正题🙈 注:本文实验环境:Anaconda 集成 python 3.6.5 ( 故代码为 python3 ) 由于本文代码过多,故每一步不做太详细的介绍,我尽量在代码中解释细节,望体谅 串 串是由零个或者多个字符组成的优先序列,一般记为是s = ‘a1a2…an’ ,python对字符串的操作已经比较成熟和简单,所以我们这里着重介绍串的模式匹配算法,这就不得不提KMP匹配算法,这种算法和正则表达式有类似之处,一个用了DFA的思想,一个用了NFA的思想。 KMP算法的思想是,当匹配失败时,可以利用已经知晓的一部分文本内容,避免从头开始重新匹配。这个匹配的过程可以使用有限状态自动机(DFA)。可以看看 这位大神 的描述。 每当一趟匹配过程中出现字符比较不等时,不需要回溯I指针,而是利用已经的带的“部分匹配