- 博客(51)
- 收藏
- 关注
原创 MySQL基础
id INT PRIMARY KEY AUTO_INCREMENT, -- 自增ID(主键)INDEX idx_email (email) -- 普通索引。email VARCHAR(100), -- 邮箱。password VARCHAR(100) NOT NULL, -- 密码。-- 提交,真正生效。-- 回滚,全部撤销。-- 创建数据库(名字自己改,比如 testdb)-- 使用这个数据库(必须先选库,才能建表)
2026-04-12 15:11:19
376
原创 Python工程搭建
==================== 输出方式2:输出到文件(自动切割) ====================# ==================== 输出方式1:打印到控制台 ====================# ==================== 日志格式设置 ====================配置文件:不改变代码逻辑,在一个专门的文件里面改动参数以及其他的东西。# ==================== 使用示例 ====================
2026-04-08 15:07:09
506
原创 权重初始化
正交矩阵的范数为1,能很好地保持向量的长度(从而防止梯度消失/爆炸)。:考虑到 ReLU 会使大约一半的神经元输出为0(方差减半),所以需要将方差扩大一倍来补偿。:通过精心设计权重的初始分布(如均匀分布或正态分布)的方差,使其与网络层的。一个好的初始化方法能让网络在训练初期就处于一个“信号流动顺畅”的状态。:所有神经元计算相同,梯度相同,更新后仍相同。:生成一个随机矩阵,然后将其正交化,作为权重矩阵。),且权重和输入独立同分布,均值为0。是该层的输出(激活前的值)。:保持输入和输出的方差一致。
2026-04-04 19:43:31
179
原创 梯度消失与梯度爆炸
反向传播时,靠近输出层的梯度(如第10层)数值较大,但每向前传播一层,梯度就要乘一次该层的导数(≤0.25)以及权重矩阵。例如第5层梯度为1,第4层梯度约为 10×1=1010×1=10,第3层梯度约为 10×10=10010×10=100,……(1)梯度消失:在sigmoid函数与Tanh函数中,靠近输出层的的梯度比较大,在反向传播中,随着层数增加,梯度不断乘以小于1的数,越靠近输出层梯度越小。激活函数,权重初始化为较大的值(如均值为0,方差为10的高斯分布)。:一个5层的循环神经网络(RNN),使用。
2026-04-03 22:34:17
87
原创 算法题中的日期问题
上述代码需要注意此时main函数的年月日与NextDay函数的年月日并不是同一份数据。上述代码需要注意此时main函数的年月日与NextDay函数的年月日是同一份数据。2已知某年某月某日是星期几,过了若干天是星期几。这种问题都可以总结为已知某年某月某日,求明天是几月几号。如:1已知某年某月某日,问过了若干天是几年几月几日。我们可以定义一个count=1表示是本年的第几天。3输入年、月、日,计算该天是本年的第几天。在很多算法题中,会有很多关于日期的问题。我们如何利用上面的模板来解决呢。
2026-02-14 21:13:26
164
原创 结构体与联合体
所以也正是根据这些链路信息,可以构造出一个图,各个路由器知道一个区域的所有路由信息,就可以使用迪杰斯特拉算法,来计算转发数据包的最好的路径,这也就是RIP协议。联合体:多种物体,即老师:职工号,姓名,教学科目等同时也有学生(在实际使用中,定义一个结构体变量要么是老师,要么是学生,不能同时是老师和学生)我们知道在计算机网络中。路由器的链路要么连接网络,要么连接其他路由器。不能既是网络又是路由器,此时既可以使用联合体进行对链路的定义。结构体:一个物体,其有多种属性,如学生:学号,姓名,所在班级等。
2026-02-07 15:51:46
836
原创 数组指针与指针数组
在数组指针中,p=*p,这只是在值上相等而已,但表达的意义不同。在C语言中,数组名在大多数表达式中会被隐式转换为指向其首元素的指针。所以不解引用时是指向整个数组的指针,解引用后得到该数组(数组名),而数组名是一个指针。在指针数组中,这个数组中,每一个元素是一个指针,指向二维数组中的每一行,所以可以将其看作是二级指针。所以,我们可以把后面两个字看作是一个名词,前面两个字是一个形容词。指针数组:首先是一个数组,其中每个元素是一个指针。数组指针:首先是一个指针,其指向一个数组。运行结果(每次运行结果不一样)
2026-02-07 15:15:55
201
原创 leetcode11盛最多的水
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。本题也可以使用嵌套循环暴力解O(n^2),但是超出了时间复杂度的限制,所以我们采取双指针,时间复杂度为O(n)轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2026-02-05 19:23:55
519
原创 HDU2096小明a+b
输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两个非负整数A和B(A和B均在int型可表示的范围内).对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于100, 那么小明也仅保留计算结果的最后两位.小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算.给定非负整数A和B, 你的任务是代表小明计算出A+B的值.对于每组测试数据, 输出小明A+B的结果.
2026-02-05 18:57:28
122
原创 leetcode160相交链表
请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。,函数返回结果后,链表必须。
2026-02-03 14:57:39
550
原创 算法题--剩下的树
来源:牛客网有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。两个整数L(1<=L<=10000)和M(1<=M<=100)。
2026-02-03 11:42:52
386
原创 完数vs盈数
输出2到60之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数) 其中两个数之间要有空格,行尾不加空格。一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。若因子之和大于该数,则称其为“盈数”。求出2到60之间所有“完数”和“盈数”。
2026-02-03 11:16:23
184
原创 leetcode279完全平方数
numSquare(n)=min(numSquare(n-1)+1,num(Square(n-4)+1,num(Square(n-9)+1......num(Square(n-i*i)+1),其中i*i<n。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。假设输入n,那么输出就应该是numSquare(n)的完全平方数的最少数量。
2026-01-31 16:28:56
251
原创 读者写者问题
若为写者优先则第一个写者会给读者上锁,若写者只能一个一个使用再给资源上锁,使用完解锁,最后一个写者会给读者开锁,其中访问记录写者数Wcount的时候也需要上锁与解锁,此外第一个读者也会给写者上锁,最后一个读者也会给写者解锁(读者可以一起读就不用给临界资源上锁)(写者给读者上锁与写者给读者上锁则实现读写互斥)。但若有源源不断的写者则会导致读者饥饿。但若有源源不断的读者则会导致写者饥饿。
2026-01-30 10:49:14
190
原创 UTF-8和ASCII
1使用合适的编码规则,否则会导致存储丢失,如使用ASCII码无法存储希腊字母。2使用统一的解码规则,如使用UTF-8编码,但使用GBK解码就会导致出现乱码。utf-8是包含全世界语言用得到的,现在都是用这种方式进行编码。ascii是美国制定的编码规则,只有数字英文字母和特殊符号。当然还有其他编码规则如GBK,GB2312等等。上面所提到的编码规则也可以叫字符集。所以现在打代码都是使用UTF-8。
2024-09-16 20:45:22
492
原创 Linux常用快捷键
如忘记mkdir指令,只需要输入m+tab+tab即可找到所有以m开头的指令。可以实现对命令,参数,文件内容的补全。清空当前终端所有内容。
2024-09-15 14:06:39
438
原创 虚拟机和Linux发行版
虚拟机是一种软件,用于模拟安装另一个操作系统可以是windows,Linux,andriod等等 常见的有vmware,Oracle virtualBox等等。而Ubuntu和centos是Linux发行版,是基于Linux的拓展延伸。
2024-09-12 00:37:09
302
原创 linux与unix
此外unix并不兼容,主流的unix系统有三种AIX,HP-UX,Solaris运行在各自的服务器,但非常稳定,并行度非常高,是PC机无法比拟的。linux既可以进行命令行操作,也可以进行图形化的操作。linux具有很好的跨平台性,可以运行在多种硬件平台。linux是开源的,unix是闭源的。unix大多需要与指定硬件配套使用。linux要求较低,unix要求高。unix只是命令行下的操作。
2024-09-11 22:03:32
662
原创 c实现动态数组
使用malloc函数就可以声明一个动态的数组,随着不同输入而变化。由于c语言的数组常规的定义都是需要规定长度,后续也无法变化。那么我们如何通过输入一个整数n,定义一个长度为n的数组。这种通过程序员分配释放空间的,都是存在堆区。
2024-09-11 21:07:14
300
原创 Python的单例模式
假设上述Python文件是strT_tool.py,那么接下来再新建一个Python文件test.py。定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。避免构造大量的对象,减少开销,特别是很多工具类。设计模式是一种编程的套路,极大地方便软件开发。目的:确保一个类只有一个对象存在。
2024-08-14 22:47:04
197
原创 关于前后端的理解
有一天你用手机进行购物,然后加了一个商品进入购物车,但是你看的太入迷了,你的手机掉进了下水道里拿不回来了。这时你回家打开电脑,并打开那台手机在掉进下水道时还在运行的那个购物软件,你就会发现刚刚加入购物车的商品还在购物车中。服务端上的一个软件(后端)回复response,所回复的数据就是客户端所需要的数据,客户端拿到数据之后就会在前端给客户展示。软件是一整套系统,在手机或者电脑上运行的只是很小一部分,这一部分就是前端,通过网络还有后端服务对这个软件提供支持。那么前端就是数据的展示和数据的交互。
2024-08-14 12:43:52
374
原创 多线程与线程池的理解
当线程池为空时,若有任务需要完成,线程池会自动生成一个线程,以该线程去执行任务,执行完了该线程回到线程池中,当又有任务来的时候,就可以用刚刚回到线程池的线程执行任务;若提交任务时,线程池没有空闲进程且未到达可创建线程的上限时,则线程池可以创建线程,当任务执行完后再还到线程池中;可以这么理解,微信是一个进程,里面的朋友圈和视频号为线程,即软件中互相独立,可以同时运行的功能,若该软件中独立的功能很多,那就是多线程。操作系统能够运算调度的最小单位,被包含于进程直至,是进程的实际运作单位。
2024-08-14 11:59:54
364
原创 不使用分支语句实现绝对值
一个数a的二进制长度为bit_length,那么a加上全为1且长度为bit_length的二进制数=a-1。一个数a的二进制长度为bit_length,那么a加上全为0且长度为bit_length的二进制数=a。异或全为0且长度为bit_length的二进制数将保持不变。异或全为1且长度为bit_length的二进制数将会取反。负数的补码=对应正数的补码(原码)取反+1。那求回对应正数就应该-1再取反。
2024-08-13 10:14:31
259
原创 计算比x大的最小的2次幂
如x=1011000,那比x大的最小的2次幂为10000000。所以只需要找出x二进制数中最高位的1即可,再左移即可。若x=555,则比x大的最小的2次幂为1024。以上x均为十进制,若转化为二进制则很好理解。若x=31,则比x大的最小的2次幂为32。
2024-08-07 11:12:32
161
原创 利用Python实现归并排序
得到mid,则从0到mid-1以及从mid到len(a)-1分别进行mergesort,这就会得到两个有序列表,因为不断的递归下,列表长度不断减小,最终都会小于等于2,变得有序。在mergr中,当两个列表的长度均大于0时,两个指针同时在0处,随着不断弹出两个列表下标为0处的元素,直至其中任一列表长度为0,再将两个列表剩下的元素追加到新列表中。首先将无序列表分成两个有序列表,再对这两个有序列表进行合并,这就需要两个函数来实现。再用一个mergr函数对两个有序列表进行合并。
2024-08-06 20:51:52
228
原创 位运算的技巧
x&1判断x的二进制的最后一位是1还是0,因为一个数的二进制从倒数第二位到最高位都是2的多少次方,只有最末位可以表示为2的0次方,所以最后一位是1则为奇数,为0为偶数。假设一个数是2的n次方,则这个数的二进制数最高位m为1,其余位置为0,那么该数-1所得的二进制数就会是第m位为0,从m-1位往右均为1,此时两者进行与运算所得就是0。x&(~(1<<i)),先将1左移i位,再进行非运算,如此一来x的第i位与0进行与运算,则变为0,其他位数与1进行与运算保持原数。四.将x第i位设置为1。七.获取x最低位的1。
2024-08-01 20:54:55
193
原创 C++中的赋值运算符
运算符 示例 结果 = a=3 a=3 += a=3;a+=2; a=5 -= a=3;a-=2; a=1 *= a=3;a*=2 a=6 /= a=3;a/=2 a=1 %= a=3;a%=2 a=1
2024-07-31 13:04:17
180
原创 Python计算组合数
从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。初始化一个dp数组,然后利用C(i,i)=1与C(i,0)=1完成第一个判断,再利用当j>i的不合理性,来使得C(i,j)=0,最后则是利用公式完成动态规划。在Python中可以使用动态规划实现。所以可以用Python实现。此时还有利用这个公式计算的。计算组合数有如下公式。
2024-07-31 12:58:04
1547
原创 利用python实现分解质因数
任意一个大于1的整数,都可以分解为若干质数的积,如24=2*2*2*3,那么该如何用Python实现呢。然后就是直到n无法被i整除时跳出内层循环,同时在每次内层循环执行时更新n的值。先新建一个factor列表,然后从2开始遍历到n,如24则从2遍历到24。当n==1时,意味着以及分解完成。
2024-07-31 12:40:03
479
原创 利用python实现快速排序
快速排序的思路其实很简单,在列表中选出一个数作为标准,再将列表中比它小的数放在左边,比它大的数放在右边,此时以该数的左边是一个无序列表,右边也是一个无序列表,此时再对该数左右两边再做一次上述操作即可。
2024-07-22 19:49:03
310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2