- 博客(12)
- 收藏
- 关注
原创 多线程和线程同步 生产消费者模型
生产者可以在缓冲区满时等待条件变量,消费者可以在缓冲区空时等待条件变量。缓冲区 :生产者和消费者之间共享的存储区域。消费者 :负责处理或消费数据的线程或进程。消费者从共享的缓冲区或队列中取出数据进行处理。生产者和消费者需要同步,以确保生产者在缓冲区满时停止生产,消费者在缓冲区空时停止消费。互斥锁(Mutex):用于保护对缓冲区的访问,确保同一时间只有一个线程可以访问缓冲区。生产者 :负责生成数据或任务的线程或进程。生产者和消费者在访问缓冲区时需要互斥,以避免数据竞争。
2024-12-03 22:47:54
137
原创 算法题跳台阶
继续优化空间,f2是从上往下递归的然后再从下往上回溯的,最后回溯的时候来合并子树从而求得答案 f3的是,不用递归的过程,直接从子树求得答案。计算f[5]的时候只用到了f[4]和f[3], 没有用到f[2]...f[0],所以保存f[2]..f[0]是浪费了空间。要求:时间复杂度:O(n)O(n) ,空间复杂度: O(1)O(1)时间复杂度:O(2^n) 空间复杂度:递归调用栈O(n)时间复杂度:O(n) 没有重复计算 空间复杂度: O(n)时间复杂度:O(n) 空间复杂度O(1)
2024-12-03 14:46:59
187
原创 C++ 线程池的实现(学习笔记)
线程池是一种常用的一种并发编程技术,主要用于管理和复用线程,以提高多线程应用程序的性能和资源利用效率。线程池是一组预先创建的线程,这些线程在应用程序的生命周期内保持活动状态,当应用需要执行任务时可以将任务提交到线程池中,线程池会自动选择一个空闲的线程来执行该任务,线程池主要目的时减少创建和销毁线程的开销,从而提高系统的响应速度和资源利用率。
2024-12-02 21:56:20
239
原创 【学习笔记】数据结构 第六章 排序
插入排序原理是通过构建有序序列,对未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。(类似于在摸牌时调整手上牌的顺序)。代码来源:B站up主码农论坛插入排序优化:插入排序存在两个不足:1.寻找插入位置2.移动元素优化方案1.对已排好序的序列,采用二分查找法2.携带多个元素(一般只插一个可以携带多个,在合适的位置插入)3.数据链表化4.希尔排序。
2024-08-02 00:57:25
1434
原创 【学习笔记】 数据结构 第五章 查找
是指在查找过程中,数据集合在查找之前是固定不变的,也就是说,查找过程中数据不发生增删改操作。静态查找通常采用静态数据结构,如数组或有序数组,通过某些查找算法(例如二分查找)来进行查找。则是指在查找过程中,数据集合可以随时发生增删改操作。动态查找通常采用动态数据结构,比如链表、平衡树、哈希表等,以支持在运行时对数据的操作。如果数据量固定,并且频繁查找,则选择静态查找更为合适。如果数据变化频繁,且查找操作不占主导,则动态查找更加灵活。
2024-08-01 23:37:02
867
原创 【学习笔记】数据结构 第四章 图
图 是由顶点(图中的节点被称为图的顶点)的非空有限集合v与边的集合E(顶点之间的关系)构成的。若图G中的每一条边都没有方向,则称G为无向图若图G中的每一条边都有防线,则称G为有向图。
2024-07-23 22:07:23
1570
原创 【学习笔记】数据结构 第二章 线性表
静态存储分配,编译时确定容量 ,用一段地址连续的存储单元依次存储线性表的数据,逻辑关系通过存储位置来实现动态存储分配,运行时分配空间,用一组任意的存储单元存放线性表的数据元素,用指针来反应数据元素之间的逻辑关系。2.插入和删除操作相对复杂,要移动大量元素。3.占用连续内存空间,大小固定,诺空间不足要扩容。4.适合元素数量固定 或 较少的场景如:静态数据 或 需要随机访问的情况。特点:1.元素在内存中不连续,每个节点除了存储的数据外还要存:指向下一个节点的指针。
2024-07-17 23:50:33
1778
原创 【学习笔记】数据结构 第一章
数据结构指的是:组织和存储数据的方式,以便于访问和修改。不同的数据结构在不同的应用场景中具有各自的优势和特点,程序员要选择合适的数据结构提高程序的效率和性能。
2024-07-17 17:52:41
256
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人