
数据结构与算法
zhichaosong
总想搞点事情!
展开
-
基于统计语言模型的DNA语义识别算法的思考
核心思想:前n个字决定了后1个字的出现概率原创 2019-07-09 14:01:42 · 578 阅读 · 0 评论 -
红黑树的演变由来 - 理解红黑的含义及背后逻辑2-3树
前言红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证你理解了过后,再去看什么...转载 2019-03-27 14:44:18 · 2022 阅读 · 4 评论 -
Java中字节流16位分组补齐算法解析 -以国密SM4算法为例
在文件加密解密过程中,经常将字节流按 16 位分成一组,方便运算。但是源文件若不是16的整数倍怎么办?这就可能导致解密文件多出几个字节的失真。本文中的 padding() 算法即实现了最后一组 16 位的补齐以及最后的还原,代码如下:国密算法工程示例源码:https://github.com/zhichaosong/hsd-cipher-sm /** 余数补齐算法 */ pr...原创 2019-03-19 11:45:42 · 3687 阅读 · 5 评论 -
【极客笔记】链表(上):如何实现LRU缓存淘汰算法?
文章目录一、缓存淘汰策略二、单链表三、双向链表四、循环链表五、双向循环链表六、链表 VS 数组性能大比拼七、基于链表实现 LRU 缓存淘汰算法八、用单链表如何判断回文字符串一、缓存淘汰策略先进先出策略 FIFO(First In,First Out)最少使用策略 LFU(Least Frequently Used)最近最少使用策略 LRU(Least Recently Used)生活中...原创 2019-01-23 17:34:45 · 450 阅读 · 2 评论 -
【极客笔记】数组:为什么很多编程语言中数组都从0开始编号?
一、什么是数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。1.线性表(Linear List)线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。、2. 随机访问连续的内存空间和相同类型的数据来保证了这个特性a[i]_address = base_address...原创 2019-01-21 14:41:37 · 256 阅读 · 0 评论 -
【极客笔记】数据结构与算法学习书单
文章目录一、通俗读物二、入门趣味书三、教科书四、面试宝典五、经典一、通俗读物《算法帝国》:文科生都能读懂《数学之美》《算法之美》举例生动,通俗易懂二、入门趣味书《大话数据结构》生活例子有趣,不枯燥,400 多页两天就能读完《算法图解》主打“图解”,通俗易懂,只有不到 200 页三、教科书《数据结构和算法分析》《数据结构与算法分析 :C 语言描述》《数据结构与算...原创 2019-01-14 16:25:30 · 716 阅读 · 0 评论 -
【极客笔记】复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
一、最好情况时间复杂度(best case time complexity)在最理想的情况下,执行这段代码的时间复杂度。二、最坏情况时间复杂度(worst case time complexity)在最糟糕的情况下,执行这段代码的时间复杂度。三、平均情况时间复杂度(average case time complexity)平均时间复杂度的全称应该叫加权平均时间复杂度或者期望时间复杂度四...原创 2019-01-14 11:21:48 · 970 阅读 · 0 评论 -
【极客笔记】复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
文章目录一、大 O 复杂度表示法二、时间复杂度分析1. 循环法则2. 加法法则3. 乘法法则三、几种常见时间复杂度实例分析1. O(1)2. O(logn)、O(nlogn)3. O(m+n)、O(m*n)4. NP 问题5. 效率对比四、空间复杂度分析一、大 O 复杂度表示法大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐...原创 2019-01-10 10:26:43 · 248 阅读 · 0 评论 -
【极客笔记】如何抓住重点,系统高效地学习数据结构与算法?
文章目录一、20 个最常用的、最基础数据结构与算法二、让你事半功倍的学习技巧三、思维导图一、20 个最常用的、最基础数据结构与算法10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。二、让你事半功倍的学习技巧边学边练,适度刷题Practice...原创 2019-01-10 09:20:45 · 683 阅读 · 0 评论 -
关于最小生成树算法原理的一点思考
学最小生成树的时候一直有很多疑问:比如克鲁斯卡尔算法:为啥不能有回路?为啥从最小的边开始找?比如普利姆算法:随意选起点不会影响结果么?起点选的那条最短边就一定是最小树上的?一、克鲁斯卡尔算法思考1. 为啥不能有回路?原因1:如果有回路那边就是N条了,而不是N-1了,那为啥是N-1呢?因为一个边能连两个定点,N个定点不留孤岛肯定是N-1条边连起来;原因2:假设回路构成的路径总和最...原创 2018-11-07 15:38:04 · 1324 阅读 · 0 评论 -
【LeetCode】3. 无重复字符的最长子串(Longest Substring Without Repeating Characters,24.2%,中等)
一、题目描述给定一个字符串,找出不含有重复字符的最长子串的长度。示例1: 输入:”abcabcbb” 输出:3 解释:无重复字符的最长子串是 “abc”,其长度为 3。示例2: 输入:”bbbbb” 输出:1 解释:无重复字符的最长子串是 “b”,其长度为 1。示例3: 输入:”pwwkew” 输出:3 解释:无重复字...原创 2018-09-03 16:50:33 · 236 阅读 · 0 评论 -
【LeetCode】2. 两数相加(Add Two Numbers,28.6%,中等)
一、题目描述给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -&原创 2018-06-21 16:41:51 · 305 阅读 · 0 评论 -
【LeetCode】1. 两数之和( Two Sum,46.4%,简单)
一、题目描述二、思路分析三、解决方案方法一:暴力法方法二:两次哈希法一、题目描述你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]二、思路分析这个题目可...原创 2018-06-19 16:37:27 · 560 阅读 · 0 评论