![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 72
fanged
野生程序员。。。这里主要是一些学习笔记和心得。。。
展开
-
JPG压缩
以下是一个简单的JPEG压缩算法的示例代码,展示了压缩图像的基本过程。该代码基于Python和Pillow库,并利用了基本的DCT和量化。Pillow是Python中较为基础的图像处理库,主要用于图像的基本处理。下面是一个python版本的例子,该例子只能处理灰度图哈,量化矩阵的选择会影响压缩质量和压缩比。逆DCT变换:对反量化后的系数应用逆DCT变换。量化:使用量化矩阵对DCT系数进行量化。反量化:对量化后的DCT系数进行反量化。组合图像:将处理后的块组合回原图像。先发一个python版本。原创 2024-03-31 11:33:38 · 104 阅读 · 0 评论 -
线性回归求解
最小二乘法和梯度下降算法在目标和应用上有所区别,理解它们的关系和差异,有助于选择合适的方法解决具体问题。1是平方计算可导,更加方便。代入总成绩 X=450X = 450X=450,Y = 14.49+0.1325×450=14.49+59.625=74.115。这个基本上算是目前机器学习的基石了,说起来也算是高中的知识范围,我不知道是不是人人都懂了,我觉得我不是很懂,所以专门写一篇来总结总结。上面的过程基本不算难,就是回归系数的推算,看了下是最小二乘法。其中,XXX 是自变量矩阵,YYY 是因变量向量。原创 2024-07-14 16:20:36 · 342 阅读 · 0 评论 -
e的意义。
这里再说说对数,如果a的x次方等于N,那么数x叫做以a为底N的对数(logarithm),记作x=logaN。ln是e为底,那么就是loge,也就是e的多少次方等于多少。不过这里不是这个,是说的数学上那个e,写这个也挺尴尬的。在计算机发明以前,在欧美使用非常多,据说在曼哈顿计划中的工程师,人人都要带一个对数尺用来方便计算。然后绕不开的就是一个ln,这个是一个以e为底的对数,也就是自然对数。logn 表示对数函数,即如果一个算法的时间复杂度为 O(logn),意味着算法的运行时间与输入规模的对数成正比。原创 2024-07-09 23:27:35 · 117 阅读 · 0 评论 -
音视频的Buffer处理
最近在做安卓下UVC的一个案子。正好之前搞过ST方案的开机广告,这个也是我少数最后没搞成功的项目。当时也有点客观原因,当时ST要退出机顶盒市场,所以一切的支持都停了,当时啃他家播放器几十万行的代码,而且几乎没有文档,真的是非常痛苦。后面虽然功能是搞出来了,但是不稳定,持续几次后就会crash。还记得当时最后到底层ST是用的滑动窗口缓存,双指针,一个写指针和一个读指针,当时我做了一个管道往缓存中注数据。主要就是共享内存,滑动窗口,双缓冲,环形缓冲这些内容。就是两个buffer,一个读一个写,写完之后交换。原创 2024-06-20 14:20:23 · 613 阅读 · 0 评论 -
线程池的思考
但是这样做有一个问题就是占用CPU资源,sleep的时候占用了CPU资源,而用pthread_cond_wait可以不占用CPU。2 任务怎么来管理,是不是一定要做任务队列。我自己做的第一版没这个,就会出现如果线程全忙,那么多的任务只有丢弃。所以任务队列是需要的。很多网上的代码,都是互斥体和条件变量一起用。为什么要用条件变量,我开始是真的没想明白。有一说一,线程池其实在国内用的不多。就算是C底层的程序员,用线程池也很少。查了一下GPT,说是防止虚假唤醒,多处理器场景。回来想想,这个还是单个任务的思路。原创 2024-02-15 22:50:41 · 103 阅读 · 1 评论 -
卡尔曼滤波小结
最近再接触卡尔曼滤波是因为一个声源定位库,Open embeddeD Audition System,它里面有两个部分,一个是定位,一个是跟踪。第二次更新:计算权重 :22.5/(22.5+25) = 0.47,预计状态:50.13+0.47(48.44−50.13)=49.33米,更新估计方差:(1−0.47)*22.5=11.84。第一次更新:计算权重 :225/(225+25) = 0.9,预计状态:60+0.9(49.03−60)=50.13米,更新估计方差:(1−0.9)*225=22.5。原创 2024-03-31 11:34:11 · 122 阅读 · 0 评论 -
动态规划的实践(1)
F(10) = F(9) + F(8),想一想也很好理解。F(9)到F(10)只有1步的走法,没有其它的选择。F(8)到F(10)也只有2步的走法,没有其它的选择。我也是刚学动态规划,感觉动态规划能干的事情,其实很多其它算法也能写出来,那么DP的优点在哪呢?我第一步想到的解法是递归,按照这个思路,其实很快就有答案。第二就是动态规划和树的感觉比较接近,我接触的几个都可以用递归来处理,都存在可以剪枝的优化。一个是从头开始,一个是倒着开始。但是毕竟这个题是有关动态规划的,详细看了下动态规划的思路。原创 2023-12-27 01:16:49 · 342 阅读 · 1 评论 -
递归用法总结(二叉树深度为例)
但是面临一个问题,就是当前层数和最大层数,必须要使用全局变量来记录,而在leetcode中,全局变量没法再初始化,所以就不可用。想破脑袋也没想出来怎么解决,后面求助了chatgpt,给的代码也是有这两个全局变量。从最底层开始计数,想来也是非常合理的,其实递归的本质或者从动态规划来说,也是应该自底而上,这样才能拆成更小的独立问题。如上面的二叉树,在3的时候是层1,9的时候就是层2,如果返回了层数就-1,然后使用一个变量记录最大值。提交上去看了下,可以通过但是成绩也不是很理想,应该可以加个字典什么的缓存一下。原创 2023-12-30 03:57:12 · 508 阅读 · 0 评论 -
查找循环链表(leetcode 141)
malloc的内存是在堆上分配,而且是从下往上,如果新的malloc内容,一般来说地址都在更高位。个人觉得这种方法还是太投机了,leetcode这边是按照顺序分配,但是谁能保证其它情况后面的节点就一定是后分配内存呢?一开始我的想法很简单,做一个循环,然后把之前遇到过的地址放在一个数组中,遇到新的地址就和之前的数组比对,看是否存在,如果存在,则返回true。就是判断新的节点地址是否小于之前节点,如果是,则存在闭环。一开始不好理解,但是如果循环是一个圈,那么快指针没多久就会回来,和慢指针重合,检测到闭环。原创 2024-01-02 04:19:03 · 362 阅读 · 0 评论 -
算法矩阵提速原理
其实就我来看,计算机懂个P的高等数学,什么线性代数,概率,微积分,对于计算机来说都没有意义,没有意义,没有意义。但是在实践中,很多算法一旦上了矩阵,就跟开了外挂一样,速度飞快,这个又是什么原因呢?这里又要说说图形,音视频的数据的一些特点了,这些数据就是矩阵运算的最好示范,现在的CPU架构中,为了加速这些运算,所以进行了很多特别的优化,比如超线程,SIMD等等。简而言之,在现在的CPU体系中,使用矩阵运算,可以更贴近现在的架构,比如Cache的结构,SIMD的指令集以及一些其它指令集。所以会觉得速度很快。原创 2024-04-22 14:52:00 · 508 阅读 · 0 评论 -
线性代数的一些理解(更新中)
设 𝑥(𝑡) 表示车辆在时间 𝑡t 时的位置。其中,第一个矩阵是转移矩阵 𝐴,它将 𝑥(𝑡𝑖)映射到 𝑥(𝑡𝑖+1);其中,𝑥(𝑡) 表示车辆在时间 𝑡t 时的位置(单位:米),𝑡 表示时间(单位:秒),2𝑡 表示车辆在时间 𝑡t 时已经行驶的距离。其中 𝑥(𝑡𝑖)表示车辆在时间 𝑡𝑖ti 的位置,𝑥(𝑡𝑖+1) 表示车辆在时间 𝑡𝑖+1 的位置,𝑣 表示车辆的速度。每个时间步长的长度为 Δ𝑡=𝑡𝑓−𝑡0𝑁。我们可以将位置 𝑥(𝑡)视为一个列向量,时间 𝑡 视为一个标量,速度 𝑣 视为一个常数。原创 2024-05-11 03:14:21 · 229 阅读 · 0 评论