- 博客(96)
- 收藏
- 关注
原创 强化学习: Q-learning实例python实现
实现步骤:随机生成一个Q表,初始化状态为S0; 在当前状态下选择一个动作执行:如果Q表全为0,随机选择。否则,10%的时间随机选择一个动作执行,90%的时间选择当前状态下,使得Q值最大的一个动作A执行; 根据当前状态和当前动作,获得下一个会产生的状态S_和奖励R;(此步根据现实自定义) 根据选择的动作,计算预估的Q值(即查Q表),真实的Q值 Q_real = R+lambda*max(Q(S'),即reward再加上后续状态中出现的最大的Q值。具体原理类似于贝尔曼方程; 更新Q表,Q(S,A..
2022-03-12 10:11:22 3236 1
原创 win10下Anaconda使用pyrouge
1.安装perlhttp://strawberryperl.com/处下载安装windows版本就行2.进入perl的CPAN Client安装XML:DOM,使用命令install XML:DOMPS: CPAN Client找不到的话在电脑本地搜一下就行了3.在https://github.com/summanlp/evaluation下载ROUGE-RELEASE-...
2020-05-02 13:00:55 1058 1
原创 数据结构day7——线性表和数组高级技术
1.跳跃表多级跳跃表中存储多个指针。0级跳跃表只有一个指针,就是普通的链表形式;每多一级,结点中的指针就多一个。0级指针的跳跃数是1,1级指针的跳跃数是2,2级指针的跳跃数是4,以此类推。检索时,先从某一级的指针查看,若其指向的下一个结点值比关键码要大,则级数减一;如果比关键码小,就继续访问下一个结点,依次类推直到找到关键码或找不到为止。第一次检索选择的指针级别也可以是随机的,也可以按...
2019-07-11 15:30:31 223
原创 数据结构day6——索引技术
1.线性索引线性索引的索引文件是一组顺序的关键码/指针对,按照关键码进行排序,指针指向磁盘中的完整记录。1)一维数组线性索引局限性:可能会太大了导致无法存到主存,只能存到磁盘,哪怕使用二分检索,造成的IO代价也很高。解决办法:二级索引;二级索引是存储目标关键码的索引文件所在的磁盘块的。比如说,一个线性索引文件占据磁盘中的一百块,则二级索引文件中就要保存一百项,每一项中存储的是该块...
2019-07-11 10:49:05 218
原创 PAT1004
题面略。思路:题目会给出树的结构,然后求每层叶结点的数目即可,基本思路是使用dfs,更需要考虑的是如何存储树结构。实际上,我们只需要能够访问到每个结点的子结点即可。可以考虑用为每个结点添加一个数据结构来存储其子结点,我这里选择的是队列。dfs算法:从根结点开始,从其子结点队列中取出一个进行访问,重复如此(注意每层都要维护一个层数的变量),直到到达了一个叶结点,则该层的叶结点数目加一。...
2019-07-09 17:07:37 97
原创 PAT甲级1003
题面略。思路:其目的是求s(source)到d(destination)的单源最短路径,比较容易想到的是dijikstra算法。回顾dijisktra算法的流程:将图中所有顶点分为两个集合,一个N,一个U,N表示该集合中的顶点已经访问过,U表示该集合中的顶点还没有访问。1)初始化:准备一个数组d,d[i]表示从起点到顶点i的最短路径,初始值等于起点与该顶点之间的边的代价cost[s][...
2019-07-09 09:02:40 232
原创 数据结构day5——检索
1.检索算法1)顺序表和线性表方法2)直接访问法(散列)3)树索引方法2.检索方法1)对于已排序的顺序表,最好用的是二分搜索2)词典检索(插值检索),像查词典一样,利用关键码的分布情况,首先在可能的范围中查看一个值,根据该位置的值决定下一次搜索的位置范围。3)自组织线性表,一种非根据键值检索的方式。按照数据被检索的频率排序,每次顺序查找,更新检索频率和重新排序。...
2019-07-06 16:35:48 201
原创 数据结构day5——外排序
1.外排序对磁盘上的记录进行排序。可用办法:1)使用虚拟存储,把整个文件读入虚拟存储中,然后允许内排序算法。问题在于虚拟存储大小有限制,磁盘上的文件过大的话可能无法放到虚拟存储中去。解决办法是利用缓冲池管理技术,克服虚拟存储大小的限制。2)调整内排序算法使之应用于外排序3) 置换选择算法在内存中开辟一部分作为数组,存放从磁盘中读出的一个块。假设这个块中有m条记录,根据这...
2019-07-06 14:09:23 207
原创 数据结构day5——内排序
1.交换排序:比较交换相邻记录称为一次交换,O(n^2)插入排序,选择排序,冒泡排序。2.shell排序,又叫缩小增量排序O(n^1.5)在不相邻的的记录之间进行比较和排序将序列分为子序列,并在子序列中执行插入排序。注意,子序列通常并不是连续的,比如一个16的序列,最初分为8个长度为2的子序列时,第0个和第8个元素才叫一个子序列,因此shell排序是在不相邻的记录之间进行比较交...
2019-07-06 09:55:32 108
原创 数据结构day4——图
1.什么是图也是一种数据结构,由顶点的集合和边的集合组成。其中,边是指顶点的偶对。表示方法:G=(V,E)边数较少的称为稀疏图(V<|V|log|V|),相反,边数较多的则称为密集图,所有可能边都存在的叫做完全图。边有方向性的图称为有向图,否则称为无向图若图中的各个顶点均带有标号,则为标号图。边上带有权值的称为带权图。如果图上的一条路径各个顶点互不相同,则称为简单...
2019-07-02 15:06:08 530
原创 数据结构day3——树
1.一些概念树:由一个或多个结点组成的有限集;有一个根结点和多棵子树。将最左边的子树的根结点称为树的最左子结点。出度:结点的出度是指一个结点的子结点的数目。森林:零棵或多棵树的集合边定理:结点为n的树必定有n-1条边,因为除了根结点其余结点都有一条边连接其父亲结点。树的周游:a.前序周游:递归的方式,先访问根结点,再访问其最左子结点所在子树,再访问其最左子结点的右兄弟结点……,...
2019-06-29 11:05:19 297
原创 数据结构day2——堆与优先队列
1.堆的简介堆是用完全二叉树实现的,用于按某种优先级存放数据;最大值堆:每个结点的值大于或者等于其所有子结点的值;最小值堆:每个结点的值都小于或者等于其所有子结点的值;值得一提的是,堆结构中,任意两个兄弟结点之间的大小并没有必然联系。因此,对于给定的一组数据,堆并不是唯一的。2.实例:最大值堆的实现,基于数组的存储其中,堆的构造过程是将所有非叶结点从上往下调,且每次选择与...
2019-06-28 21:38:01 124
原创 数据结构day2——二叉树
1.什么是二叉树由有限结点组成,这棵树或者为空,或者由一个根节点和两棵不相交的二叉树组成。2.一些概念1)路径:从结点n1经过n2,n3……到nk的这条线路称为路径,路径长度为k-1.2)结点的深度与层数:一个结点M的深度和所在层数等于从根节点到M的路径的长度;3)树的高度:等于最深的结点的深度值+1.4)满二叉树:二叉树的每个结点,要么是叶结点,要么就一定有两个不为空的子...
2019-06-28 19:38:03 265
原创 数据结构day2——队列
1.什么是队列一种先进先出的线性表。2.实现方式1)顺序队列高效率队列:假定循环数组的概念,随着往队列里不断的插入和取出数据,整个队列往数组的右边移动,再将数组的第n-1个位置定义为位置0的前驱。这样可使得队列的插入和删除的时间复杂度都为O(1).这样做会出现新的问题,就是如何判断队列的空或者满。定义两个指针,分别是front,指向队列的首个元素,rear指针,指向队列的最...
2019-06-28 09:18:00 112
原创 数据结构day1——栈
1.什么是栈后进先出(LIFO)的线性表,仅能在一边进出。2.实现方式有:顺序栈和链式栈顺序栈的实现:将数组的尾部当作栈顶,在栈顶尾部进行pop和push操作只需要常数时间。//顺序栈的实现public class Astack implements StackADT{ private static final int defaultsize=10;//栈的默认大小 pri...
2019-06-27 17:27:09 114
原创 数据结构day1—— 线性表
1.什么是线性表由有限元素组成的序列。2.线性表的分类1)有序线性表:元素的值与其所在位置有关;2)无序线性表:元素的值与其所在位置并无联系。3.线性表ADT的定义public interface ListADT { public void clear(); public void insert(Object item);//插入数据到当前指针处(前置插入) pub...
2019-06-27 14:49:17 253
原创 数据结构day1 —— 一些基本定义
1.什么是数据结构理解为数据项的组织及其相关操作。2.为什么需要数据结构提高程序效率。3.抽象数据类型与数据结构1)什么是数据类型:类型是一组值的集合。数据类型即一个类型以及定义在该类型上的一组操作。数据项只是数据类型的一个成员,是该类型的一条记录。2)抽象数据类型ADT:仅定义了数据项的逻辑形式,隐藏了实现细节的数据类型。数据结构就是对抽象数据类型的物理实现。4.问题...
2019-06-27 09:19:24 157
原创 LeetCode4. Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).意思是在O(log(m+n))中,找出两个已经排好序的数组的...
2018-03-30 21:38:05 124
原创 LeetCode25. Reverse Nodes in k-Group
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.k is a positive integer and is less than or equal to the length of the linked list. If the number of no...
2018-03-30 18:04:01 465
原创 LeetCode24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.For example,Given 1->2->3->4, you should return the list as 2->1->4->3.Your algorithm should use only constant ...
2018-03-24 16:12:10 110
原创 LeetCode22. Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is:[ "((()))", "(()())", "(())()", "()(())", "...
2018-03-24 15:50:31 101
原创 LeetCode19. Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the en...
2018-03-24 13:39:10 107
原创 LeetCode18. 4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.做法1:基于3sum的做法,嵌个套找每个数对应的...
2018-03-21 22:39:49 107
原创 LeetCode17. Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given below.Input:Digit string "23"...
2018-03-21 16:07:39 117
原创 LeetCode16. 3sum closet
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly...
2018-03-20 22:38:45 173
原创 LeetCode15 3sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.这个题的主要难度在于消除重复,我们其实很容易找到所有加起来等于0的三个数的集合,但是要控制...
2018-03-20 22:32:51 122
原创 LeetCode12.Integer To Roman
Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.题目还是很简单的,主要在于这些数都在3999之内,也就是说最大的千位上的表示就是MMM,而且每一位之间的表示是并不互相影响的。由于数量很小,完全可以穷举。个位上的只有"",I","II",...
2018-03-20 22:24:56 108
原创 LeetCode11. Container With Most Water
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two ...
2018-03-10 16:24:43 96
原创 LeetCode6. ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H NA P L S I I G...
2018-03-09 21:35:35 97
原创 LeetCode5.Longest Palindromic Substring
题目大意:找出一个字符串中包含的最长的回文字符串。做法:首先建立一个二维数组isPd[][]来保存从下标i到下标j之间的字符串是否时回文字符串(设j>i),如果是则为1,否则为0.那么问题来了,如何判断一个字符串是回文字符串呢,分两种情况:如果s[i]=s[j],有1.j-i<3,这时候要么是aa这种字符串,要么是aba这种情况,而这两种情况都是回文字符串;2.当j-i>3时,有...
2018-03-09 20:09:09 112
原创 LeetCode3. Longest Substring Without Repeating Characters
题目大意:找一个字符串中没有重复字母的最大子串。做法1:取一个变量ans用来保存当前已经查看到的子串的最大长度,用map来保存当前查看到的子串中的字符的位置,如果下一个查看到的字符被判定为曾在map中出现过的话,说明当前查看到的最大子串在上一个字符已经结束,清空map从这个重复的字符第一次出现的位置重新开始计算。做法2:道理和做法1一模一样,只不过这里引入一个start值来substring保存开...
2018-03-06 22:53:01 124
原创 LeetCode2.Add Two Numbers
ExampleInput: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8Explanation: 342 + 465 = 807.题目:用两个链表分别表示倒着两个数,返回这两个数的和,也用链表倒着表示。做法:倒着表示的话,相当于两个数从链表头加起,就是从个位开始加起,如果大于10的话就有进位,这时候,保存...
2018-03-06 19:28:02 131
原创 LeetCode268. Missing Number
题目大意:数组中保存着从0到n的数字,中间有一个缺失的数字,找出它。使用O(1)的空间,O(N)的时间。做法:如果没有那个缺失的数字,数组中的数字应该是从0到n-1的每个数字,此时数组的和为n*(n-1)/2;当有一个数字缺失时,缺失的那个数字由n来补上,于是数组的和增加了(n-缺失数字的值)。按照这个原理,只需要对数组求和就可以了。...
2018-03-04 20:44:00 129
原创 LeetCode242. Valid Anagram
题目:判断两个字符串是否由相同的字符构成。(每个字符出现的次数相同,顺序不一定相同)。做法:ascll编码的字符共有256个,可以建立两个256大小的数组,用来保存对应编号的字符出现的次数,最后只需要比较一遍两个数组中字符出现的次数是否相同即可。还有一种办法是将两个字符串都排序,最后满足要求的两个字符串相等。不过这样的话用时会较长。...
2018-03-04 20:06:20 101
原创 LeetCode237. Delete Node in a Linked List
再只知道一个结点的情况下,删除单链表中的这个结点。做法:将此结点之后的结点全部前移一个就好了。或者
2018-03-04 19:40:44 109
原创 LeetCode235. Lowest Common Ancestor of a Binary Search Tree
题目:在BST中找某两个结点的最近共同祖先。思路:当遍历到某个结点时,倘若这两个目标结点的值刚好一个在该结点左边一个在该结点的右边,或者这两个目标结点的值存在与当前结点相等的,那么这个结点肯定是他们的共同最近祖先结点。所以做法也很简单,遍历整个二叉树,若两个结点的值都比当前结点值小,就遍历当前结点的左子树,如果都大于当前结点的值,就遍历当前结点的右子树。直到找到符合要求的结点为止。...
2018-03-04 17:09:06 101
原创 LeetCode234. Palindrome Linked List
题目:判断一个单链表是否是回文的。要求是O(n)的时间和O(1)的额外空间。思路:前面有一道题是reverse单链表,我们可以想,如果把链表倒置了,那么就很好比了。然而这里直接用reverse的方法其实是不符合要求的,因为我们会建造一个新的链表,已经用了不止O(1)的空间了。那么可以将原reverse函数稍做修改,无需将前面的结点链接在本结点之后了,同时我们需要另一个指针,这个指针在第一个指针顺利...
2018-03-04 16:34:01 104
原创 LeetCode232. Implement Queue using Stacks
题目:使用栈来构建一个队列只需要保持栈里的元素的顺序与队列里的顺序一致,就能正常地做各种操作了。只需要在push的时候就做到这一点。两种做法,一是使用两个栈,在push的时候先将栈1中的元素全部压倒栈2中,这时候再把目标元素压入栈1,然后将栈2中的元素全部取回即可。做法2,只使用一个栈,但2需要用递归操作来完成元素的取出于放回,栈本身就是递归的,所以这个也不难理解。...
2018-03-04 15:12:09 92
原创 LeetCode231. Power of Two
题目:判断一个整数n是否为2的幂次思路:将n按2倍缩小,判断其对2的余数,如果余数不为0,肯定不是2的倍数,注意0和1需要特殊判断。第二种方法是用按位与,加入一个数是2的倍数,那么这个数的二进制表示一定是最高位为1,其余位全为0,而n-1就是最高位为0,其余位全为1,这样的话n&n-1的结果就为0,以此来判断这个数是否为2的幂次十分高效。...
2018-03-04 14:55:24 183
原创 LeetCode226. Invert Binary Tree
Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9to 4 / \ 7 2 / \ / \9 6 3 1用递归就可以轻松的实现,把每个结点的左右交换一下就好了。...
2018-03-03 16:34:15 102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人