
算法学习
SiriusQiu
纸质阅读成瘾
展开
-
动手学深度学习,搭建过程
动手学深度学习,搭建过程一个所见即所得的学习工具,可以一遍阅读一遍查看代码。并且关于深度学习的介绍比较简单。项目路径在:https://github.com/d2l-ai/d2l-zh.git,码云搜d2l-zh有不少镜像安装miniconda。根据操作系统从官网下载miniconda,下载了以后是个脚本文件,运行即可。就是要记得退出终端重进一下下载源码,更新环境。miniconda会构造一个python运行环境,把你需要的依赖库给安装好,你需要哪些依赖都写在environment.yml里,比如哪原创 2020-10-06 01:48:50 · 421 阅读 · 1 评论 -
算法学习13——笔试老大难,二分法的各种模板
文章目录二分法模板二分基本型左区间的最大值右区间的最小值二分法个人觉得二分法学习分两个阶段,第一个阶段是处理各种基本的二分场景,就是在数组中根据下标来搜索各种想要的数;第二阶段就是不再基于数组构建二分模型,而是各种搜索,我觉得很多题的难度不亚于动态规划。第二阶段只能靠多练习吧。模板二分基本型二分的本质是,根据某一个判断(条件),在一个排序数组中检索某一个数,基本型的意思就是,这个判断有三种结果:大于、小于、等于,我们只需要返回使等于成立的情况。并且只需要和当前数进行比较,不需要和左右比较。pub原创 2020-08-17 11:20:24 · 286 阅读 · 0 评论 -
算法学习13——红黑树
文章目录红黑树红黑树的性质红黑树的插入红黑树红黑树是一棵二叉搜索树,拥有二叉搜索树的性质:左子树的所有值小于根节点,右子树的所有值大于根节点。同时还具有近似平衡性质,近似平衡指的是任何节点的左右子树高度不会超过一半。它相对平衡二叉树的优势在于,任何不平衡都可以在三次之内的旋转解决,而平衡二叉树最坏会达到树的高度级别的旋转次数。红黑树的性质红黑树节点除了左节点,右节点,关键字的值三个基本二叉树元素之外,还维护了红黑色作为标记。同时null被定义成为叶子节点,具有关键字的节点被定义成为内部节点。红黑树原创 2020-07-27 22:40:42 · 569 阅读 · 0 评论 -
算法学习12——区间合并
区间合并给出一个区间的集合,请合并所有重叠的区间。思路按区间左端进行排序扫描排序后的区间,进行排序原创 2020-07-24 11:17:32 · 113 阅读 · 0 评论 -
算法学习11——位运算
位运算求n的二进制表示中的第k位的值x=n>>kx&1lowbit,返回x的最后一位1:x&(-x)基于lowbit计算x中二进制表示中1的个数每次减轻最后一位1,计算次数源码:x,反码:~x,补码:~x+1=-x...原创 2020-07-24 11:15:35 · 162 阅读 · 0 评论 -
算法学习10——java中的map
文章目录算法学习10——java中的mapmap接口AbstractMap抽象Map域方法HashMap域静态类方法算法学习10——java中的mapmap接口定义了一个用来把keys映射到maps的对象,一个map不能包含重复key,每个key最多映射一个value的值这个提供三个collection视图,允许返回keys的set,values的collection,和key-value的键值对映射。如果将可变对象作为键值需要格外注意方法功能int size();返回原创 2020-07-21 09:10:32 · 363 阅读 · 0 评论 -
算法学习09——计数、基数、桶排序
文章目录计数、基数、桶排序计数排序基数排序桶排序计数、基数、桶排序嘿嘿嘿,懒得写代码了计数排序计数排序的思想和实现都很简单,就是统计每个元素出现的次数,然后迭代每个元素的次数进行排序基数排序获取最大的数获取最大的数的位数按照低位的数字,使用稳定的排序算法,对数组进行排序类似的思路,使用稳定的算法从低位到高位,对数组进行排序桶排序将数组划分成为多个区间每个区间进行排序...原创 2020-07-20 19:15:48 · 200 阅读 · 1 评论 -
算法学习08——快速排序
快速排序此处只有一个我背的滚瓜烂熟的模板public void quickSort(int[] arr, int left, int right){ if(left >= right) return; int i = left - 1; int j = right + 1; int x = arr[left]; while(i < j){ while(arr[++i] < x); while(arr[--j] &g原创 2020-07-20 18:47:09 · 110 阅读 · 0 评论 -
算法学习07——堆操作
文章目录堆操作基本操作插入和弹出最大的元素从一个数组建立堆序堆排序源码堆操作基本操作上滤: private void percolateUp(int index){ //如果以及到达根节点,无法继续上滤,返回即可 if(index==0) return; //获得父节点 T parent = (T)elements[(index-1)/2]; //当前节点 T current = (T)elements[index]; //父节点比当前原创 2020-07-20 17:09:47 · 230 阅读 · 0 评论 -
算法学习06——堆
文章目录~~堆~~二叉堆堆操作建堆堆排序堆**堆序性质:**和普通的树不同的是,堆具有堆序性质。所谓堆序性质,即堆的根节点要比所有字节点大,并且递归地具有此性质。即树根比左孩子和右孩子要大,同时左孩子在左子树中最大,右孩子在右子树中最大。**结构性质:**类似完全二叉树,底层上的元素被全部填满,底层从左往右填入元素。二叉堆二叉堆即每个节点最多只有两个节点的堆结构,每个节点(序号i)的父节点,左子节点,右子节点具有如下的变换关系父节点: ⌊i/2⌋\left \lfloor i/2 \ri原创 2020-07-20 12:40:07 · 75 阅读 · 0 评论 -
06Leetcode每日一题——字符串压缩
文章目录06Leetcode每日一题——字符串压缩题目分析06Leetcode每日一题——字符串压缩漏了好几天打卡,心痛。。。题目字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1输入:“aabc...原创 2020-03-16 23:45:46 · 191 阅读 · 0 评论 -
05Leetcode每日一题——将数组分成和相等的三个部分
文章目录05Leetcode每日一题——将数组分成和相等的三个部分代码05Leetcode每日一题——将数组分成和相等的三个部分代码class Solution { public boolean canThreePartsEqualSum(int[] A) { int sum = 0; for(int a : A){ sum ...原创 2020-03-11 22:30:47 · 168 阅读 · 0 评论 -
04Leetcode每日一题——二叉树的直径
文章目录04Leetcode每日一题——二叉树的直径代码04Leetcode每日一题——二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。代码class Solution { public int diameterOfBinaryTree(TreeNode root) { if(root...原创 2020-03-10 17:40:14 · 202 阅读 · 0 评论 -
03Leetcode每日一题——买卖股票的最佳时机
文章目录03Leetcode每日一题——买卖股票的最佳时机分析03Leetcode每日一题——买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。分析就是求给定数组中prices[i]-prices[j]的最大值,其中i&...原创 2020-03-09 19:08:06 · 174 阅读 · 0 评论 -
02Leetcode每日一题——零钱兑换
文章目录02Leetcode每日一题题目分析至上而下的动态规划02Leetcode每日一题题目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。分析很容易想到用动态规划解决,在此之前先写个暴力递归观察一下。核心思路就是:总数是amount,数组是coins,用每个...原创 2020-03-08 22:12:57 · 165 阅读 · 0 评论 -
01Leetcode每日一题——队列的最大值
文章目录Leetcode每日一题0307题目分析代码最大值是O(1),插入是O(n),删除是O(1)的算法代码Leetcode每日一题0307题目实现一个队列,操作要求支持输入,输出,查找最大值。要求输出输出的时间复杂度是O(1)要求三个操作的时间复杂度都是O(1)请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 po...原创 2020-03-07 16:35:47 · 378 阅读 · 0 评论 -
字符串匹配算法
文章目录字符串匹配算法暴力求解KMP算法java中的indexOf方法字符串匹配算法一串文本字符串String,一个模式字符串pattern,字符串匹配算法的工作就是检测String中是否含有对应模式字符串。然后返回模式字符串pattern在文本字符串String所在的位置,如果不存在返回-1。或者返回一个布尔值代表这个String是否含有对应模式字符串。暴力求解暴力求解即从第0个字符开始...原创 2020-02-14 12:04:05 · 317 阅读 · 0 评论 -
算法学习05——树(五)伸展树
文章目录树(五)——伸展树基本概念展开树(五)——伸展树基本概念伸展树:它保证从空树开始连续M次对树的操作最多花费O(MlogN)时间。摊还时间:当M次操作的序列总的最坏情形运行时间为O(Mf(N))时,我们就说它的摊还运行时间是O(f(N))。一棵伸展树每次操作的摊还代价是O(logN),即经过一系列的操作,有点操作可能花费时间多一些,有点可能要少一些。伸展树的基本想法是,当一个节点...原创 2019-08-21 11:13:12 · 241 阅读 · 0 评论 -
算法学习04——树(四)AVL树和旋转操作原理
文章目录树(四)——AVL树和旋转操作原理基本概念旋转单旋转双旋转树(四)——AVL树和旋转操作原理基本概念高度:根到其叶子的的最长路径距离,空子树的高度被规定为-1。AVL树是带有平衡条件的二叉查询树。通常来说,一棵AVL树的每个节点的左子树和右子树的高度最多相差1。在高度为h的AVL树中,节点数最少是S(h),S(h)可由递推关系得出:S(h)=S(h-1)+S(h-2)+1;同时S(...原创 2019-08-21 09:10:31 · 280 阅读 · 0 评论 -
算法学习03——树(三)二叉树的平均情况分析
树(三)——二叉树的平均情况分析显而易见,一个二叉树所支持的操作时间复杂度取决于操作项所在的节点深度,即O(d),d是节点的深度。因此计算二叉树所支持的操作的时间复杂度需要求解一个树的所有节点的平均深度。一棵树的所有节点深度的和称为内部路径长,即D(N),而D(1)=0,因为只有根节点的路径为0。一颗N个节点的树由一个i个节点的左子树和N-i-1个节点的右子树以及一个根节点组成。i个节点的左子...原创 2019-08-20 17:46:13 · 1019 阅读 · 0 评论 -
算法学习02——树(二)树的简单实现
文章目录树(二)——树的简单实现接口实现类树(二)——树的简单实现接口public interface Tree<T extends Comparable<? super T>> { class Node<T>{ T data; Node<T> left; Node<T> ri...原创 2019-08-20 10:27:31 · 209 阅读 · 0 评论 -
算法学习01——树(一)
树树预备知识二叉树相关性质二叉树查找树的平均深度为O(logN)N个节点的二叉树都需要N+1个null链二叉树的相关应用:表达式树总结树本文梳理了一些关于数据结构中树的学习,有什么不对的地方请尽情打脸预备知识树:一些节点的集合树叶:没有儿子的节点路径:节点n1,n2,…,nk的一个序列,使得对于1<=i<k节点ni是ni+1的父亲长:是为该路径上的边的条数,即k-1。从...原创 2019-04-03 15:54:09 · 328 阅读 · 0 评论