数据结构与算法
文章平均质量分 67
kevin--你不知道的事
IT是最不讲理的行业
展开
-
转载:超详细理解:kmp算法next数组求解过程和回溯的含义
转载:超详细理解:kmp算法next数组求解过程和回溯的含义 前言 KMP算法是用来求一个较长字符串是否包含另一个较短字符串的算法。具体算法下一篇写吧,这篇主要解释next数组的求解。 代码 代码应该都看过了,先贴在这里,其中最难理解的地方就是求next数组,以及k往前回溯,这转载 2021-09-18 16:48:48 · 251 阅读 · 0 评论 -
转载:白话解析:一致性哈希算法 consistent hashing
转载:白话解析:一致性哈希算法 consistent hashing 白话解析:一致性哈希算法 consistent hashing 在了解一转载 2021-08-06 13:16:01 · 117 阅读 · 0 评论 -
转载:赋值与memcpy性能比较
转载:比memcpy更快的内存拷贝strcpy与memcpy:一直以来都觉得memcpy是很高效的。相比于strcpy等函数的逐字节拷贝,memcpy是按照机器字长逐字进行拷贝的,一个字等于4(32位机)或8(64位机)个字节。CPU存取一个字节和存取一个字一样,都是在一条指令、一个内存周期内完成的。显然,按字拷贝效率更高赋值与memcpy:赋值是用的mov,memcpy是循环,多了判断和跳转,所以小内存的拷贝赋值效率高一些另外CPU的快速执行与cpu的缓存机制有关,小内存读取会加快速度..转载 2021-07-05 17:50:00 · 2618 阅读 · 0 评论 -
转载:并发无锁队列
转载:并发无锁队列 并发无锁队列 </h2> <div class="postbody"> <div id="cnblogs_post_body" class="blogpost-body blogpost-body-html">并发无锁队列学习之一【开篇】1、前言 队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流转载 2021-06-30 17:08:19 · 207 阅读 · 0 评论 -
转载:巧夺天工的kfifo
转载:巧夺天工的kfifo 本文已有修订版本:《巧夺天工的kfifo(修订版)》,欢迎前往阅读。Linux kernel里面从来就不缺少简洁,优雅和高效的代码,只是我们缺少发现和品味的眼光。在Linux kernel里面,简洁并不表示代码使用神出鬼没的超然技巧,相反,它使用的不过是大家非常熟悉的基础数据结构,但是kernel开发者能从基础的数据结构中,提炼出优美的特性。kfifo就是这样的一类优美代码,它十分转载 2021-06-28 11:28:10 · 224 阅读 · 0 评论 -
转载:【LeetCode-链表】链表的中间节点
转载:【LeetCode-链表】链表的中间节点 【LeetCode-链表】链表的中间节点题目描述输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。题目链接: https://leetcode-cn.com/problems/middle-of-the-linked-list/思路1#使用快慢指针。s转载 2021-06-18 18:52:18 · 53 阅读 · 0 评论 -
转载:LeetCode - 删除链表的倒数第N个节点
转载:LeetCode - 删除链表的倒数第N个节点 题目 给定一个链表,删除链表的倒数第 n 个节点并返回头结点。 例如, 给定一个链表: 1->2->3->4->5, 并且 n = 2.当删除了倒数第二个节点后链表变成了 1->2->3转载 2021-06-18 17:51:08 · 69 阅读 · 0 评论 -
转载:合并有序链表
转载:合并有序链表【LeetCode021】合并有序链表合并有序链表(Merge Two Sorted Lists)将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路分析:我们拿到题目首先注意到的是,有序,并且这两个链表的长度是不定的,所以有可能出现的情况是:一个链表为空,另外一个链表是4个长度。 这些细节我们在分析问题的时转载 2021-06-18 16:10:12 · 178 阅读 · 0 评论 -
转载:链表中环的检测
转载:链表中环的检测题目描述:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [转载 2021-06-17 20:12:21 · 252 阅读 · 0 评论 -
转载:看一遍就理解,图解单链表反转
转载:看一遍就理解,图解单链表反转看一遍就理解,图解单链表反转前言反转链表是程序员必备的基本素养,经常在面试、笔试的过程中出现。一直觉得反转链表实现代码不是很好理解,决定搬leetcode那道经典反转链表题出来,用十多张图去解析它,希望加深大家对链表反转的理解,谢谢阅读。leetcode的反转链表原题&答案题目描述:反转一个单链表。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL分析:假设存在转载 2021-06-16 17:02:28 · 152 阅读 · 0 评论 -
转载:二叉搜索树(+新增理解笔记)
转载:数据结构与算法——平衡二叉树理解笔记:1二叉搜索树又称二叉查找树,亦称为二叉排序树就是二叉树经过排序的,排序规则是左子树上所有节点的值均小于它的根节点的值,右子树上所有节点的值均大于它的根节点的值2遍历:递归实现[(1)如果树是空的,则查找结束,无匹配。(2)如果被查找的值和节点的值相等,查找成功。(3)如果被查找的值小于节点的值,递归查找左子树,(4)如果被查找的值大于节点的值,递归查找右子树,]3插入:递归实现 --注意递归时找到的条件是插入的节点是空的说明找到了[(转载 2021-06-01 19:31:17 · 81 阅读 · 0 评论 -
【数据结构与算法】二叉树+二叉搜索树+平衡二叉树+红黑树--效率比较
分析方法:[二叉树用到递归,与二叉树高度有关,有多高,就有多少次递归,时间复杂度就是"O(树高)"二叉树的高度与节点关系:假设节点为N,则树的高度保持在logN附近;所以二叉树的查找效率一般是O(logN)]1二叉树 --任意的2二叉搜索树: --是二叉树经过排序的,任意一个节点都满足左节点值小于等于父节点,右节点值大于等于父节点[又称二叉查找树,亦称为二叉排序树查找性能:[数目为N,树高保持logN附近,查找递归需要logN次,时间复杂度为O(logN)当先...原创 2021-05-28 17:17:01 · 1332 阅读 · 0 评论 -
【数据结构与算法】二叉树+二叉搜索树+平衡二叉树+红黑树--区别(个人总结)
https://xiaozhuanlan.com/topic/50364718921二叉树 --任意的2二叉搜索树: --是二叉树经过排序的,任意一个节点都满足左节点值小于等于父节点,右节点值大于等于父节点[又称二叉查找树,亦称为二叉排序树]普通二叉树的增删改查:增加 --直接加入删除 --分为删除的节点无左右节点,有左节点,有右节点,有左右节点 --无左右节点,直接删除,后面的补上 --有左节点,删除后,把左节点补上 -...原创 2021-05-28 17:15:56 · 242 阅读 · 0 评论 -
转载:深入学习二叉树(一) 二叉树基础(+新增理解笔记)
转载:深入学习二叉树(一) 二叉树基础前言树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列。在学习与总结的同时更加深入的了解掌握二叉树。本系列文章将着重介绍一般二叉树、完全二叉树、满二叉树、线索二叉树、霍夫曼树、二叉排序树、平衡二叉树、红黑树、B树。希望各位读者能够关注专题,并给出相应意见,通过系列的学习做到心中有“树”。1 重点概念1.1 结点概念结点是数据结构中的基础,是构成复杂数据结构的基本组成单位。1转载 2021-05-27 19:49:49 · 240 阅读 · 0 评论 -
转载:什么是平衡二叉树(AVL)(+新增理解笔记)
转载:什么是平衡二叉树什么是平衡二叉树(AVL) Wiki:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是{\displaystyle O(\log {n})}。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL 树得名于它的发明者 G. M. Adelson-Velsky 和 Evgenii Landis,他们在1962年的论文《An a转载 2021-05-27 13:52:28 · 395 阅读 · 0 评论 -
转载:30张图带你彻底理解红黑树(+新增理解笔记)
转载:30张图带你彻底理解红黑树写在前面当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在学习过程中也会存在我的疑问,那么本文对你会有帮助,本文帮助你全面、彻底地理解红黑树!本文将通过图文的方式讲解红转载 2021-05-26 14:13:44 · 127 阅读 · 0 评论 -
转载:求第k小的数、第k大的数、中位数的三种算法(nth_element()、快速选择算法、直接排序法)
转载:https://blog.csdn.net/qq_41708792/article/details/103130479?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-14.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-14.control转载 2021-03-22 13:59:48 · 614 阅读 · 0 评论 -
【数据结构与算法】笔记--快速选择算法
快速选择算法:【#include <iostream>#include "windows.h"#include <vector>#include <algorithm>void Swap(vector <int>& arr, int i, int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;}int Partition(vector <i...原创 2021-03-22 11:23:29 · 90 阅读 · 0 评论 -
转载:算法的时间与空间复杂度(一看就懂)
转载:https://zhuanlan.zhihu.com/p/50479555算法的时间与空间复杂度(一看就懂)算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们转载 2021-03-19 13:48:16 · 114 阅读 · 0 评论