算法基础学习
文章平均质量分 85
秋月霜风
风吹古木晴天雨,月照平沙夏夜霜。
展开
-
顺时针旋转矩阵算法
顺时针旋转矩阵是计算机科学和图像处理中的一个经典问题。这个操作意味着将矩阵的每个元素移动到它在顺时针旋转后应该处于的位置。原创 2024-05-23 06:00:00 · 817 阅读 · 0 评论 -
Redis知识点学习(二)
当哈希表中的**元素太多(负载因子过高)或太少(负载因子过低)**时,为了保持操作的效率,需要对哈希表的大小进行调整。,而不会被其他线程或处理器核心中断。不过,由于ziplist是连续存储的,这种顺序扫描的速度相比于链式结构会有所提高,特别是在数据量较小的情况下。锁的实现和应用跨越了软件和硬件的多个层面,包括应用程序中的同步机制、操作系统的调度策略,以及硬件支持的原子操作。优先级继承是指,当高优先级线程等待由低优先级线程持有的锁时,低优先级线程临时继承高优先级线程的优先级,以减少高优先级线程的等待时间。原创 2024-05-22 06:15:00 · 1288 阅读 · 0 评论 -
Redis知识点学习(一)
CAUTION]造成阻塞的主要原因是KEYS命令需要扫描整个数据库来查找匹配特定模式的所有key。如果数据库中的key数量非常多,而且使用的模式比较宽泛(例如*匹配所有key),那么KEYS命令就需要遍历数据库中的每一个key来检查是否匹配,这会消耗大量的时间和计算资源。在这个过程中,Redis是单线程的,意味着在执行KEYS命令期间,Redis无法执行其他任何命令。因此,如果KEYS命令执行时间过长,就会导致Redis服务器在这段时间内无法响应其他客户端的请求,造成阻塞。原创 2024-05-21 06:00:00 · 1472 阅读 · 1 评论 -
大、小顶堆学习
删除操作(通常指删除最大元素):根节点被删除(从堆中移除最大元素),最后一个元素被移动到根节点位置,然后向下调整其位置,以满足大顶堆的性质。删除操作(通常指删除最小元素):根节点被删除(从堆中移除最小元素),最后一个元素被移动到根节点位置,然后向下调整其位置,以满足小顶堆的性质。大顶堆适用于需要快速访问最大元素的场景,如实现优先队列,其中优先级最高的元素(即值最大的元素)需要被首先处理。小顶堆适用于需要快速访问最小元素的场景,如实现优先队列,其中优先级最低的元素(即值最小的元素)需要被首先处理。原创 2024-05-20 00:13:36 · 1061 阅读 · 0 评论 -
限流算法学习
计数器算法计数器算法是最简单的限流算法,它在一个时间窗口内统计请求次数,如果请求次数超过了设定的阈值,则拒绝服务。这种方法实现简单,但存在时间窗口切换时的瞬间流量突增问题。滑动窗口算法滑动窗口算法是对计数器算法的改进,它将时间窗口分成多个小的窗口,通过维护这些小窗口的计数,可以更平滑地控制流量。这种算法可以较好地解决计数器算法中存在的突增问题。令牌桶算法令牌桶算法通过一个固定容量的令牌桶来控制流量,系统以恒定速率往桶中添加令牌,处理请求时需要从桶中取出令牌,如果桶中没有令牌,则拒绝服务。原创 2024-05-09 14:13:30 · 772 阅读 · 1 评论 -
时间轮算法
时间轮由固定数量的槽组成,形成一个圆环结构。每个定时任务被分配到其超时时间对应的槽中。随着时间的推进,指针每移动到一个新的槽,就检查并执行该槽中所有到期的定时任务。如果任务的超时时间超过了一个轮周期,可以通过多层时间轮结构来管理。较高层次的时间轮管理更长的超时时间,当低层时间轮转满一圈时,会触发上一层时间轮前进。时间轮算法广泛应用于各种系统中进行定时任务调度,如网络服务器中管理连接超时、操作系统中的定时器服务、数据库中的定期任务调度等。考虑一个简单的例子,一个有60个槽的时间轮,每个槽代表1秒。一个定原创 2024-05-08 22:01:47 · 829 阅读 · 0 评论 -
rust 实现GUI页面方法
Egui 是一个用 Rust 编写的即时模式 GUI 库,它旨在为游戏和交互式应用提供简单、快速且可移植的图形用户界面。与传统的保留模式 GUI 库不同,即时模式 GUI(Immediate Mode GUI,简称 IMGUI)不需要开发者维护一个单独的应用程序状态和界面状态,界面元素(如按钮、滑块等)是在每一帧绘制时即时创建和处理的。FLTK 是一个跨平台的轻量级 GUI(图形用户界面)库,它以其简洁和高效而闻名,特别适合用于开发需要快速启动和低资源消耗的桌面应用程序。原创 2024-05-04 20:56:07 · 1463 阅读 · 2 评论 -
学习选择排序的可视化实现(一)
开始:从数组的第一个元素开始,假设最小(或最大)元素就是第一个元素。比较:遍历未排序的部分,找到实际的最小(或最大)元素。交换:将找到的最小(或最大)元素与未排序部分的第一个元素交换位置。重复:移动到下一个元素,重复步骤2和3,直到数组完全排序。原创 2024-05-03 15:31:29 · 521 阅读 · 0 评论 -
学习冒泡排序的可视化实现(一)
调整排序逻辑以响应状态变量:在绘制循环中,根据is_sorting和is_paused变量的值来决定是否执行排序步骤。例如,您可以使用一个全局变量来记录当前排序的进度,并在每次窗口绘制事件中只执行一次或几次元素比较和交换。定义控制状态变量:在main函数中,定义几个变量来表示排序的状态(是否正在排序、是否暂停等)和一个变量来存储原始数组以方便重置。处理输入事件:监听键盘或鼠标事件来控制排序的开始、暂停和重置。绘制控制按钮:在窗口中绘制表示开始、暂停和重置操作的按钮,并处理点击这些按钮的事件。原创 2024-05-02 22:19:37 · 833 阅读 · 0 评论 -
使用rust学习基本算法(二)
贪心算法是一种在每一步选择中都采取当前状态下最优的选择,以期望通过一系列的局部最优解来达到全局最优解的算法策略。它的主要特点是局部最优解的选择,希望通过这种方式来解决某些优化问题。但需要注意的是,贪心算法并不保证能够得到全局最优解,它的正确性需要根据具体问题来分析。原创 2024-04-23 06:00:00 · 1229 阅读 · 0 评论 -
使用rust学习基本算法(一)
这个算法可以找到从图中一个指定的源节点到所有其他节点的最短路径。算法从源节点开始,逐步将距离源节点最近的节点加入到已找到最短路径的节点集合中,并更新其他节点到源节点的距离,直到所有节点都被处理过。在这里,我们创建了一个Edge结构体来表示边,它包含目标节点的索引node和从源节点到该节点的成本cost。此函数接受一个邻接列表表示的图和一个起始节点索引,返回一个包含从起始节点到所有其他节点的最短路径成本的向量。节点0有两条边,一条到节点1(成本为2),另一条到节点2(成本为4)。定义边和优先队列中的元素。原创 2024-04-22 06:00:00 · 1112 阅读 · 0 评论