自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿白的技术空间

技术方案

  • 博客(80)
  • 收藏
  • 关注

原创 速解贪心策略

贪心算法是一种通过局部最优选择寻求全局最优解的算法策略。它适用于分解为多步骤的问题,每一步都选择当前最优解。本文介绍了贪心算法的核心思想、经典应用(如硬币找零、活动选择和跳跃游戏问题)以及代码实现。同时指出了贪心算法的局限性——在某些特殊情况下无法得到全局最优解(如非常规硬币系统)。文章还总结了贪心算法的特点(简单高效但不保证全局最优)和适用场景,建议在使用前验证其有效性,并为可能存在的失败情况准备备选方案。最后提供了判断是否使用贪心策略的实用建议。

2025-08-16 16:40:44 302

原创 速解算法复杂度

这篇文章系统介绍了算法复杂度分析的三个核心步骤(识别基本操作、计算操作次数、确定增长趋势),重点解析了对数复杂度O(log₁₀ n)的特征和数学本质。通过Python示例展示了如何分析数字位数计算等对数复杂度算法,对比了不同复杂度的性能特征,并提供了复杂度分析技巧和常见应用场景。文章还指出了复杂度分析的常见误区,强调理论模型与实际性能的差异。内容涵盖复杂度速查表、算法选择建议和数学验证方法,为理解算法效率提供了实用指导。

2025-08-16 15:12:45 744

原创 速解模拟法

本文介绍了模拟法在算法设计中的应用。模拟法通过重现现实场景,按照问题描述的规则逐步执行操作来解决问题。文章详细阐述了模拟法的核心思想、适用场景(如流程清晰的问题)和四步框架(初始化、循环迭代、状态更新、结果输出),并以约瑟夫环问题为例展示了Python实现。同时对比了模拟法与其他算法的差异,提供了优化技巧和学习建议。模拟法虽然时间复杂度较高,但具有实现简单、可读性强的特点,特别适合初学者理解和解决流程明确的中小规模问题。

2025-08-16 05:36:41 320

原创 速解中心扩展法

中心扩展法是一种高效解决回文串问题的方法,其核心是从字符串的每个字符或字符间隙向左右双向扩展,寻找最长对称子串。该方法通过O(n²)时间复杂度和O(1)空间复杂度,优于暴力解法和动态规划。具体实现时需考虑奇数长度(单字符中心)和偶数长度(双字符间隙)两种情况,通过比较左右字符并记录最大长度来获取结果。该方法适用于寻找最长回文子串、计算回文数量等问题,相比动态规划具有实现简单、空间效率高的优势,还可通过提前终止等技巧进行优化。典型应用包括在"babad"中找到"bab"

2025-08-16 04:57:59 176

原创 速解双指针

双指针是一种高效算法技巧,主要用于处理数组和链表问题。其核心思想是通过两个指针的协同工作来优化性能。常见类型包括:对撞指针(处理有序数组查找)、快慢指针(解决链表环检测和数组去重)、滑动窗口(处理子数组问题)。双指针能显著降低时间复杂度(如从O(n²)到O(n)),减少空间消耗(通常O(1)),并简化代码逻辑。它特别适合有序数组处理、链表操作和连续子数组问题,但不适用于需要随机访问的非线性数据结构。典型应用包括两数之和、链表环检测和最小子数组等场景。

2025-08-16 04:43:27 508

原创 速解动态规划

摘要:动态规划(DP)通过将复杂问题分解为重叠子问题并存储中间解来提高效率。核心特征包括重叠子问题、最优子结构和无后效性。以斐波那契数列和爬楼梯问题为例,DP解法通过定义状态(如dp[i])、初始化、状态转移(如dp[i]=dp[i-1]+dp[i-2])和计算结果四步实现。相比普通递归,DP避免了重复计算,时间复杂度从指数级降为O(n)。典型应用包括计数、最值和存在问题,可通过空间优化进一步减少内存消耗。学习建议从简单案例入手,理解状态转移方程的本质。

2025-08-16 04:16:06 227

原创 速解二分查找算法(极简理解)

二分查找是一种在有序数组中高效查找元素的算法,其核心思想是每次将搜索范围缩小一半。通过比较中间元素与目标值,算法能快速定位目标位置,时间复杂度为O(log n)。本文通过猜数字游戏类比,详细解释了算法原理,并提供了Python实现代码和逐步图解示例。二分查找适用于电话簿、字典等需要快速查询的有序数据集,但要求数据必须预先排序。当数据量较小时,线性查找可能更为简单直接。

2025-08-16 04:09:49 190

原创 O(log(m+n)) 时间复杂度

文章摘要: O(log(m+n))时间复杂度代表高效的分治策略,典型应用于两个有序数组合并后的中位数查找问题。其核心是通过二分法每次排除一半数据:比较两数组的中间元素,较小值所在数组的前半部分可被排除,逐步缩小搜索范围。Python实现中需处理奇偶长度、数组越界等边界条件。该算法将O(m+n)的线性复杂度优化为对数级,数据量翻倍仅需增加1次操作。关键优势在于同时利用两个数据集的有序性,实现对数级别的快速收敛。

2025-08-15 18:58:35 728

原创 二分查找算法

二分查找高效指南(Python版) 二分查找通过每次排除一半数据,在有序数组中快速定位目标,时间复杂度仅O(log n)。核心步骤: 初始化左右指针 循环计算中间位置 比较目标值并移动指针 终止条件为left>right ⚠️ 注意:数据必须有序,避免指针更新错误。适用场景包括游戏排名、字典查询等。相比线性查找的O(n),二分查找在千级数据中仅需10次操作,但需支持随机访问。Python实现时需注意整数除法和边界条件。

2025-08-15 18:56:21 266

原创 滑动窗口算法

滑动窗口算法是一种高效处理子串/子数组问题的技巧。它通过双指针(左右边界)动态调整窗口范围,将时间复杂度从O(n²)优化到O(n)。适用于最长不重复子串、固定大小子数组和、最小覆盖子串等问题。核心步骤:初始化指针和记录器→右指针扩展窗口→左指针收缩窗口→更新结果。算法分为固定大小窗口(如连续k元素和)和可变大小窗口(如无重复字符子串)两种类型,通过哈希表记录窗口信息,在遍历过程中维护有效解。典型应用包括LeetCode的3、76、209、340等题目。

2025-08-15 17:17:42 169

原创 链表(Linked List)速成

链表摘要(Python版) 链表是一种非连续存储的数据结构,由节点(Node)构成,每个节点包含数据域和指针域。Python实现时,用类定义节点,通过next指针连接节点形成链式结构。链表支持O(1)时间复杂度的头部插入/删除,但随机访问需要O(n)时间。相比数组,链表动态扩容灵活但缓存不友好,适合频繁插入删除的场景。常见类型包括单链表、双向链表和循环链表,是栈/队列等数据结构的基础实现方式。理解链表有助于掌握指针操作和内存管理原理。

2025-08-15 13:54:11 743

原创 速解哈希表,数组, 时间复杂度,空间复杂度

摘要:Python中数组(list)通过索引快速访问元素,哈希表(dict)通过键值对实现高效查找。时间复杂度衡量算法执行速度,如哈希表查找为O(1),数组遍历为O(n);空间复杂度评估内存使用,如固定变量为O(1),动态数组为O(n)。关键区别在于数组按编号访问,哈希表按键查询,两者在时间和空间效率上各有特点。记忆口诀:数组编号访问快,哈希表键值秒查找,时间复杂度看速度,空间复杂度算内存。

2025-08-15 03:11:07 497

原创 2.数据类型--数值类型

代码】2.数据类型--数值类型。

2022-07-18 13:22:38 1026 2

原创 3.MongoDB文档数据操作

1.添加文档db.集合名称.insert(docunment)# 注:每一条数据就是一个document ----- 也就是一条json一条db.study.insert({'快乐':1,'喜欢':1})多条db.study.insert([{'快乐':1,'喜欢':1},{'name':'张三','age':18}])2.查询文档# 查看全部数据db.集合名称.find()# 格式化显示db.集合名称.find().pretty()# 查看符合条件的数据

2022-05-11 00:08:30 460

原创 2.mangodb基础操作

1.进入与退出进入 mongo退出 exit2.库操作1. 显示所有的库 show dbs2.切换/创建数据库 use 数据库名称3. 查看所在库: db4. 删除当前库: db.dropDatabase()3.集合操作语句1.显示当前数据库的集合: show collections2.创建集合: db.createCollection('name')name: 集合名3.删除集合 db.集合名称.drop().

2022-05-11 00:04:29 408

原创 1.认识MongoDB

1.简介基于分布式文件存储的开源数据库系统旨在为web应用提供可扩展的高性能数据存储解决方案将数据存储为一个文档,文档类似于json格式2.数据模型

2022-05-10 23:59:50 250

原创 django启动找不到setting文件以及无法分配ip地址

No module named 'settings'That IP address can't be assigned to.

2022-05-08 17:48:31 1516

原创 17.线程池

1.池的概念主线程: 相当于生产者,只管向线程池提交任务。 并不关心线程池是如何执行任务的。 因此,并不关心是哪一个线程执行的这个任务。线程池: 相当于消费者,负责接收任务, 并将任务分配到一个空闲的线程中去执行2.自定义线程池实现import datetimeimport timefrom queue import Queuefrom threading import Threadclass ThreadPool:

2022-05-08 17:37:43 334

原创 2.redis数据库基本操作

0.基本操作连接redis redis-cli / redis-cli --raw(中文不解析问题)退出 exit 开始 停止 重启操作服务端 sudo service redis start/stop/restart切换数据库 select nredis数据库没有名称, 默认为16个, 通过0~15标识, 连接默认第一个数据库1.全局key操作1. 查看所有key:

2022-05-06 16:41:33 537

原创 1.redis简介

1.NosqlNoSQL(Not Only SQL) 指的是非关系型数据库, 是对不同于创痛的关系型数据库的数据库管理系统的统称 NoSQL是web2.0海量数据催生的产物 特点: 1.支持SQL语法: NoSQL的世界没有一种通用的语言,每种NoSQL数据库都有自己的语法以及擅长的业务场景 2.读写性能高 NoSQL的读写性能都非常高,尤其是在海量数据下,它的表现十分优秀

2022-05-06 16:20:20 714

原创 django server启动配置问题 Error: Please enable Django support for the project

Error: Please enable Django support for the project

2022-05-06 15:57:47 4099 3

原创 UnicodeDecodeError:‘utf-8‘codec can‘t decode byte 0xd5 in position 0:invalid continuation byte

UnicodeDecodeError:'utf-8'codec can't decode byte 0xd5 in position 0:invalid continuation byte

2022-05-06 15:23:45 3904 10

原创 16.线程队列

1.什么是队列?队列(queue),是先进先出(FIFO, First-In-First-Out)的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作,队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加2.队列操作我们经常会遇到这样的一个问题,这里有成千上万条数据,每次需要取出其中的一条数据进行处理,那么引入多线程该怎么进行任务分配?我们可以将数据进行分割然后交给多个线程去跑,因

2022-05-05 16:54:43 281

原创 15.线程间的通信

互斥锁 在多线程中,所有变量对于所有线程都是共享的 因此,线程间共享数据最大的危险就在于多个线程同时修改同一变量数据 那就乱套了 所以需要互斥锁来锁住数据"""因为线程属于同一进程,因此他们之间共享内存区域------------------全局变量是公共的"""import threadinga = 1def func(): global a a += 1t1 = threading.Thread(target=func).

2022-05-05 16:52:48 188

原创 14.线程进阶操作(join,setDaemon)

1.主线程与子线程主线程与子线程的概念-----------------------------主线程:当一个程序启动时,就有一个线程开始运行(由上往下运行) 该线程通常叫做程序的主线程子线程:因为程序是开始时就执行的,如果需要再创建线程, 那么创建的线程就是这个主线程的子线程主线程的重要性体现在两个方面: 1.是产生其子线程的线程 2.通常它必须最后完成执行,比如执行各种关闭操作2.joinjoin: 阻塞调用

2022-04-28 16:28:05 285

原创 13.线程

1. 线程模块python通过两个标准库_thread和threading,提供对线程的支持,threading对_thread进行了封装threading模块提供了Thread,Lock,Block,Condition等组件因此实际的使用中我们一般都使用threading2.Thread类常用参数说明----target 表示调用对象,即线程要执行的任务----name 子线程的名称----args 传入target任务中的位置参数,是一个元组,参数间

2022-04-28 16:27:10 245

原创 12.实现日志流处理

1.简要处理流程1、创建一个logger2、设置下logger的日志的等级3、创建合适的Handler(FileHandler要有路径)4、设置下每个Handler的日志等级5、创建下日志的格式6、向Handler中添加上面创建的格式7、将上面创建的Handler添加到logger中8、打印输出logger.debug\logger.info\logger.warning\logger.error\logger.critical2.简要实现import loggi

2022-04-28 16:25:12 437

原创 10.日志模块-logging

1.日志概念"""a- 日志是一种可以追踪某些软件运行时所发生事件的方法。b- 软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。c- 一个事件可以用一个可包含可选变量数据的消息来描述此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。"""通过log的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用log足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的log同时也分了多个级别,那么

2022-04-28 16:19:22 649

原创 9.datetime模块

1.简介datetime是python处理时间的标准库2.基本方法类名注解data日期对象,常用属性:year, month, daytime时间对象,hour,minute,second,毫秒datetime日期时间对象,常用属性有year, month, day,hour,minute,second,毫秒(microsecond)timedelta时间间隔,返回时间间隔 days,seconds, microseconds,millisecond

2022-04-28 16:17:32 224

原创 13.表关系

1.一对一学生表中有学号,姓名,学院但是学生还有电话,地址等私密信息,不会放在学生表中,因此会另外一个详情信息表此时详情信息表与学生表是一一对应的关系主键+主键实现create table student( id int primary key, name varchar(20));create table studentDetails( id int primary key, sex varchar(20) not null, age i

2022-04-28 16:15:54 219

原创 12.字段约束条件

1.概念约束是一种限制,通过对表中的数据做出限制,来确保表中数据完整性,唯一性2.默认值–default插入数据时,如果没有明确为字段赋值,则自动赋予默认值在没有默认值的情况下,默认为nullcreate table tb( id int, name varchar(20), age int default 18 );3.非空约束–not null限制一个字段的值不能为空,insert的时候必须为该字段赋值。注意:空字符不等于是nullcre

2022-04-28 15:48:40 807

原创 11.查询---连接查询(表与表)

1.内连接 – (inner join)无条件内连接: 无条件内连接,又名交叉连接/笛卡尔连接 第一张表中的每一项都会和另外一张表的每一项依次组合select * from 表名1 inner join 表名2有条件内连接: 在无条件内连接的基础上,加上一个on句子 当连接的时候,筛选出那些有实际意义的记录来进行组合select * from 表名1 inner join 表名2 on 根据两表数据设置条件,多个用and连接例如:select

2022-04-28 15:47:16 179

原创 10.查询---子查询

1.概念:将一个查询结果留下来用于下一次查询(select中嵌套select)2.要求1.嵌套在查询内部;2.必须始终出现在圆括号内3.案例# 求平均年龄select avg(age) from student# 查找年龄大于19的人select * from student where age > 19;# 查找年龄大于平均年龄的人 ---- 子查询select * from student where age > (select avg(age) f

2022-04-28 15:38:38 80

原创 9.查询--聚合与分组

1.常用聚合函数column --- 字段名函数作用注释count(column)统计数据个数空的不计个数sum(column)求和只求数字和max(column)最大值avg(column)平均值min(column)最小值group_concat(column)列出字段全部值2.分组查询(group by)select 字段 from 表 group by 字段select 字段, count(*) f

2022-04-28 15:37:23 141

原创 8.mysql查询--筛选

1.比较运算符号符号解释=等于= | 大于等于!= | 不等于< | 小于| 大于<= | 小于等于is null | 可以为空(针对字段申明)is not numm | 不可以为空(针对字段申明)2.逻辑运算符符号解释not非and与or非3.扩展排序排序 ----- order byselect field_name from tb_name order by field_col asc/

2022-04-26 14:17:08 2652

原创 7.MySQL数据类型

一个汉字 2个字节一个字节 8位2进制数字节: --- Byte 一种计算计量单位(计量存储容量)字符: --- 指代计算机使用的文字及符号ASCALL码中: 一英文字符 ---- 1字节 一汉字 ---- 2字节汉字根据情况而定(2~3字节)1.数值类型下面的表显示了需要的每个整数类型的存储和范围。常用的为:int数值类型小写特性范围(有符号)范围(无符号)TINYINTtinyint用一个字节存放小整数(-.

2022-04-26 14:14:02 138

原创 6.MySQL表结构修改

1.修改表名alter table tb_name rename to new_name;2. 修改字段名# data_type: 字段类型alter table tb_name change old_name new_name data_type;# 注意:后面的字段类型必须跟修改前修改后3. 修改字段类型# data_type: 字段类型alter table tb_name modify filed_name data_type;4.添加字段# dat

2022-04-26 14:10:56 994

原创 5.MySQL表数据常规操作

filed_name: 字段名1.插入数据1. 指定字段插入 (一条数据,多个字段)insert into tb_name(filed_name) values(filed_values);2. 全字段插入 (一条数据)insert into tb_name values(all_filed_values);2. 多行插入 insert into tb_name(filed_name) values(filed_values),(filed_values)......;i

2022-04-26 14:06:44 540

原创 8.base64模块

1.简介base64 --- url编码 - 正常的url中只能包含ASCLL字符的,也就是字母,字母和一些符号 - url编码就是一种用来避免url出现特殊字符(汉字之类的)编码方式 base64 是一种 用64个字符年表示任意二进制数据的方法 (将二进制数据编码成ascall字符)使用了A-Z,a-z,0-9,/ 这64个字符2.特点用来将非ascall字符的数据转化成ascall字符的一种方法常用对url的编码可以将不可打印的·1二

2022-04-26 14:00:50 282

原创 7.hashlib模块与加密解密

1.数据安全 -- 数据时代为了保证数据安全性,防止数据泄露,汪汪需要对数据进行加密; -- 对于敏感数据,加密措施更加令人发指 - 加密: 是最常用的安全保密手段,利用技术手段把重要的数据变为乱码传输; - 解密:到达目的后,再利用相同手段或者不同手段还原2.概念-- 对称加密 数据加密与解密使用相同的密钥-- 非对称加密 加密与解密用两把不同的密钥, 公钥用于加密数据 私钥用于解密数据

2022-04-26 13:57:39 3379

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除