![](https://img-blog.csdnimg.cn/2020011413513863.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 88
介绍开发中各种类型的常用算法。
Hirezy
人生没有彩排,每一个细节都是现场直播。
永远不抱怨,抱怨只能体现你的无能。
展开
-
深入解析Hashtable、LinkHashMap、TreeMap
在深入解析HashMap文章中我从散列表的角度解析了HashMap,在深入解析ConcurrentHashMap解析了ConcurrentHashMap的底层实现原理。本文是HashMap系列文章的第三篇,主要内容是讲解与HashMap相关的集合类。HashMap本身功能已经相对完善,但在某些特殊的情景下,他就显得无能为力,如高并发、需要记住key插入顺序、给key排序等。实现这些功能往往需要付出一定的代价,在没有必然的需求情景下,增添这些功能是没必要的。原创 2024-07-17 21:10:56 · 574 阅读 · 0 评论 -
深入解析ConcurrentHashMap
ConcurrentHashMap优秀的CAS+自旋锁+synchronize并发设计,是整个框架的重点所在。从而保证了ConcurrentHashMap的线程安全。原创 2024-07-17 20:46:25 · 1085 阅读 · 0 评论 -
深入剖析HashMap实现原理
HashMap本质上是一个散列表,那么就离不开散列表的三大问题:散列函数、哈希冲突、扩容方案;同时作为一个数据结构,必须考虑多线程并发访问的问题,也就是线程安全。这四大重点则为学习HashMap的重点,也是HashMap设计的重点。原创 2024-07-16 20:54:06 · 1076 阅读 · 0 评论 -
Android图片压缩原理分析(三)—— 哈夫曼压缩讲解
查阅源码后发现:在Android系统在7.0版本之前内部使用的是libjpeg非turbo版,并且为了性能关闭了Huffman编码计算,使用默认的哈夫曼表,而不是算数编码。从Android 7.0版本开始,系统内部使用了libjpeg-turbo库并且启用Huffman编码,标示就是optimize_code已经设置为了TRUE,也就是默认使用Huffman压缩计算生成新的哈夫曼表。libjpeg-turbo是一个C语音编写的高效JPEG图像处理库,相当于是一个libjpeg的增强版。原创 2023-08-24 17:11:35 · 1957 阅读 · 0 评论 -
Android图片压缩原理(二)—— 鲁班压缩算法解析
前面几篇文章,我们了解了一些关于。原创 2023-08-22 00:15:00 · 2971 阅读 · 0 评论 -
算法系列(二)并查集
算法系列(二)并查集算法 - 并查集前言Quick FindQuick Union加权 Quick Union路径压缩的加权 Quick Union比较前言用于解决动态连通性问题,能动态连接两个点,并且判断两个点是否连通。方法描述UF(int N)构造一个大小为 N 的并查集void union(int p, int q)连接 p 和 q 节点int find(int p)查找 p 所在的连通分量编号boolean connec原创 2022-01-30 21:15:00 · 1009 阅读 · 0 评论 -
算法系列(一)栈和队列
算法 - 栈和队列算法 - 栈和队列栈1. 数组实现2. 链表实现队列栈public interface MyStack<Item> extends Iterable<Item> { MyStack<Item> push(Item item); Item pop() throws Exception; boolean isEmpty(); int size();}1. 数组实现public原创 2022-01-27 10:46:12 · 998 阅读 · 0 评论 -
Leetcode 题解(四)数组与矩阵
Leetcode 题解 - 数组与矩阵Leetcode 题解 - 数组与矩阵1. 把数组中的 0 移到末尾2. 改变矩阵维度3. 找出数组中最长的连续 14. 有序矩阵查找5. 有序矩阵的 Kth Element6. 一个数组元素在 [1, n] 之间,其中一个数被替换为另一个数,找出重复的数和丢失的数7. 找出数组中重复的数,数组值在 [1, n] 之间8. 数组相邻差值的个数9. 数组的度10. 对角元素相等的矩阵11. 嵌套数组12. 分隔数组1. 把数组中的原创 2022-01-26 14:15:00 · 1112 阅读 · 0 评论 -
Leetcode 题解(二) 二分查找算法
Leetcode 题解 - 二分查找Leetcode 题解 - 二分查找1. 求开方2. 大于给定元素的最小元素3. 有序数组的 Single Element4. 第一个错误的版本5. 旋转数组的最小数字6. 查找区间正常实现Input : [1,2,3,4,5]key : 3return the index : 2public int binarySearch(int[] nums, int key) { int l = 0, h = nums.length原创 2022-01-23 22:30:00 · 588 阅读 · 0 评论 -
浅谈网络通信中的流量整形
前言在前面的《浅谈网络通信中的 ACK、NACK 和 REX》一文中,我们知道了网络通信中的丢包重传的相关理论和方法,既在网络发生丢包的情况下的补救措施,本文则往前进一步,介绍下如何通过流量整形技术,尽可能地避免网络发生丢包。举个栗子下面我们就以高速路堵车为例,举例说明:堵车的原因有很多种,我们先聊聊图中的这种:假设某公路是 3 股道,也就是说,每时刻能同时进入该公路的车辆并行是 3 辆,那么,如果某一时间段,同时试图并行进入该公路的车辆超过 3 辆,则必然会出现由于公路的承载能力不够带来的 “堵原创 2021-08-31 17:48:44 · 6910 阅读 · 2 评论 -
Android 缓存机制
一、Android 中的缓存策略一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的。当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存。因此 LRU(Least Recently Used)缓存算法便应运而生,LRU 是近期最常使用的算法,它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象。采用LRU 算法的缓存有两种:LrhCache 和原创 2021-07-31 15:16:40 · 12066 阅读 · 1 评论 -
Bitmap详解(中)之像素级操作
一:载入与像素读写在Android SDK中,图像的像素读写能够通过getPixel与setPixel两个Bitmap的API实现。1.1 getPixel读取像素Bitmap API读取像素的代码例如以下:int pixel = bitmap.getPixel(col, row);// ARGBint red = Color.red(pixel); // same as (pixel >> 16) &0xffint green = Color.green(pixel); /原创 2021-04-07 01:16:38 · 7642 阅读 · 0 评论 -
Python图像的二值化
什么是图像二值化在认识二值化前,我们先简单介绍一下几个概念:彩色图像彩色图像有blue,green,red三个通道,取值范围均为0-255灰度图灰度图:只有一个通道,取值范围在0-255,所以一共有256种颜色二值图像二值图像,只有两种颜色,既黑色和白色图像二值化图像的二值化也很简单,大概二步就可以完成,具体如下第一步:获取阈值获取阈值很简单,OpenCv的threshold函数进行全局阈值,也可通过OpenCv的adaptiveThreshold获取局部阈值原创 2021-03-15 15:22:20 · 39370 阅读 · 11 评论 -
Android 音频开发(一) 基础入门篇
今天主要讲解下Android音频开发的入门知识,希望对想入门却不知如何下手的朋友有所帮助,同时希望能得到高手的指点和帮助。深入细化基础技能知识点大致细化如下10个知识点。音频开发的主要应用有哪些(应用场景有哪些)?音频开发的具体内容有哪些?开发音频应用的难点有哪些?音频开发必备基础概念有哪些?常见的音频编码方式有几种?常见的音频压缩格式有几种?Adndroid VoIP相关的开源应用有哪些 ?常见的音频算法处理的开源库有哪些 ?Android提供了哪些音频开发相关的API?10.音原创 2021-02-27 18:57:36 · 5129 阅读 · 0 评论 -
Pytorch搭建自己的模型
前言PyTorch、TensorFlow都是主流的深度学习框架,今天主要讲解一下如何快速使用pytorch搭建自己的模型。至于为什么选择讲解pytorch,这里我就简单说明一下自己的使用感受(相对TensorFlow来说),也就是pytorch对比TensorFlow有哪些区别。二者区别pytorch是一个动态的框架,而TensorFlow是一个静态的框何为静态的框架呢?我们知道,TensorFlow的特性是,首先我们需要先构建一个TensorFlow的计算图,构建好计算图之后,这样一个计算原创 2020-11-23 20:53:22 · 13496 阅读 · 4 评论 -
OpenCV系列(一)之图像平滑
目标使用各种低通滤镜模糊图像将定制的滤镜应用于图像(2D卷积)接下来,就简单介绍一下这俩种常用的滤镜技术。图像模糊(图像平滑)通过将图像与低通滤波器内核进行卷积来实现图像模糊。这对于消除噪音很有用。它实际上从图像中消除了高频部分(例如噪声,边缘)。因此,在此操作中边缘有些模糊。(有一些模糊技术也可以不模糊边缘)。OpenCV主要提供四种类型的模糊技术。平均这是通过将图像与归一化框滤镜进行卷积来完成的。它仅获取内核区域下所有像素的平均值,并替换中心元素。这是通过功能cv.blur()或cv原创 2020-10-16 18:35:22 · 5554 阅读 · 0 评论 -
音视频数据处理入门:原始视频格式YUV,NV12,NV21,YV12,YU12(I420)
我们知道,在Camera中设置Preview的回调函数onPreviewFrame时谷歌推荐我们使用NV21,YV12两种格式,因为这两种格式几乎在所有的设备里都通用。然而,视频的格式远远不止这俩种,有时可能需要转成NV12,YU12(I420)。。。。。那么,我们就需要理解如何将这些码流格式实现互相转换。我们首先先了解什么是YUV,什么是RGB,因为这是构成图像的基本元素。音视频编码颜色模型中就包括两种RGB和YUV。1.什么是YUV,什么是RGB1.1 什么是RGBRGB我们比较熟悉,它就是我们原创 2020-08-05 18:18:51 · 11605 阅读 · 3 评论 -
走进OpenCV
介绍OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主原创 2020-07-25 18:13:40 · 11284 阅读 · 1 评论 -
用Python从视频中提取每一帧的图片
我们经常会看到某些视频的画面感觉貌美如画,就像出水的芙蓉一般,就情不自禁想截取下来,却又烦于截图的繁琐,现在我就教大家使用Python提取视频中每一帧的画面,让大家不错过每一个精彩的瞬间!准备工作既然是视屏,那么,我们就需要录一段视屏,或者有实时的视屏源,有了视屏源,下面就是要开始实时预览,同时实现实时的抠图。所需要的库只需要准备好cv2,numpy插件即可,可以自行百度 (自行安装)实战分析一切的准备工作准备完毕了,那么剩下的就是实战部分,认真分析,你会发现,整个过程可以分为三步完成,原创 2020-07-17 16:24:59 · 33515 阅读 · 20 评论 -
图像实战 - RGB、YUV图像格式介绍
最近在做人脸识别的项目,所以接触到也采坑了不少关于图像方面的技术,比如RGB、YUV图像格式,今天就主要记录一下常用的几种图像格式:BGR24、NV21、NV12、I420、YUYV…。以下介绍这几种图像格式的内存排列方式。一、相关图像颜色空间介绍1. RGB颜色空间RGB颜色空间以Red、Green、Blue三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。常见的RGB格式有:RGB_565、RGB_888、ARGB_8888、ARGB_4444等。但是也有列外,尤其原创 2020-07-01 20:23:11 · 13830 阅读 · 0 评论 -
使用opencv-python读取多个(海康\大华)网络摄像头的视频流,解决实时读取延迟问题
在上一篇博客中,主要介绍了python之opencv按帧提取视频中的图片,但是,由于最近在做人脸识别的项目,用的是大华的监控摄像头,我发现大华的摄像头实时读取延迟问题特别严重,尤其是主码流,这个问题困扰了我好久,最终想到的方式就是自己实时推流,经过实践,终于解决了实时读取延迟问题。前言同样需要准备对应的python开发环境,具体参考上一篇python之opencv按帧提取视频中的图片,里面介绍了详细的需要的库文件。好了,既然是自己实现实时预览推流,那就要确定使用推流方式,我这里使用的是RTSP地址和格原创 2020-06-27 22:18:45 · 77600 阅读 · 44 评论 -
python之opencv按帧提取视频中的图片
大家应该都有这样的情况:在看到某些视频的画面时感觉美如画,想截取下来却又烦于截图的繁琐,现在我就教大家使用Python提取视频中每一帧的画面,让大家不错过每一个精彩的瞬间!所需的库既然是用是利用python版的opencv来实现视频的预览抠图,那么,需要准备需要的库的如下。cv2pip install opencv-pythonnumpypip install "numpy-1.11.3+mkl-cp27-cp27m-win_amd64.whl安装完所需的库文件后,我们就开始利原创 2020-06-20 10:44:37 · 23442 阅读 · 8 评论 -
主流语言实现冒泡排序算法
什么是冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。下面主要讲解几种常用开发语言的冒泡排序的实现逻辑:主流语言实原创 2020-06-19 21:10:42 · 1705 阅读 · 0 评论 -
Android修图处理算法—— drawBitmapMesh算法实现瘦脸效果
一.初识Canvas.drawBitmapMesh()1. 方法介绍分析先看drawBitmapMesh官方api介绍:打开元源码看看drawBitmapMesh的详细介绍,就知道这个方法参数的具体描述。函数的几个参数的意思如下:bitmap:将要扭曲的图像meshWidth:控制在横向上把该图像划成多少格meshHeight:控制在纵向上把该图像划成多少格verts:网格交叉点坐标数组,长度为(meshWidth + 1) * (meshHeight + 1) * 2vertOff原创 2020-05-25 15:23:58 · 3328 阅读 · 0 评论 -
欧几里得度量
前言说到L1范数和L2范数,搞python开发或者算法的小伙伴应该时常有接触,但是欧几里得范数可能有些人听着会有些陌生,乍一看以为是多么难的东西,其实欧几里得范数就是L2范数,只是叫法不同而已。今天,就来详细介绍一下欧几里得泛数。但是,为了方便哪些不了解L1范数的小伙伴,我还是打算用一句简单的话概括一下L1范数。L1范数是指向量中各个元素绝对值之和。好了,下面正式介绍L2范数,也就是欧几里得范数。定义在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。使用这个距原创 2020-05-20 19:04:30 · 1556 阅读 · 0 评论 -
十进制与二进制快速互转换计算心得
前一篇我们介绍了模2运算的加减乘除运算 ,虽然,我们了解了模二运算的基本法则,但是,如果每次都要计算,那就未免觉得太繁琐,所以,这里我总结了一套自己的运算心得供大家学习。接下来,我们就要讲解一下如何基础算法中快速实现进制的转换。举个栗子:我们求以前求一个10进制的数转换成2进制的过程大致如此,用这个十进制数“除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去...原创 2020-05-05 13:14:02 · 2054 阅读 · 0 评论 -
模2运算的加减乘除运算
在基础的算法中,我们学的基本都是模二运算法则,什么是模二运算,这里简单做一下介绍。模2运算是一种二进制算法,CRC校验技术中的核心部分。与四则运算相同,模二运算也包括模二加法、模二减法、模二乘法、模二除法四种二进制运算。与四则运算不同的是模二运算不考虑进位和借位,模二算术是编码理论中多项式运算的基础。模二算术在其他数字领域中的应用也是很广泛的。移位寄存器的每一级只可能有两种不同的存数(或状态...原创 2020-05-05 12:30:43 · 19990 阅读 · 2 评论 -
for循环之性能优化
前言for循环是开发时常用的语法之一,比如对数组,集合的遍历等,但是如果使用不好也会出现很多新能损耗的问题,今天就来讲解一下for循环的常用性能优化问题。嵌套循环嵌套循环是有俩层或者俩层以上的循环嵌套在一起,下面直接上代码说明。外大内小嵌套: /** * 大循环驱动小循环(即外大内小) */ private static void bigSmall...原创 2020-01-19 11:24:43 · 20281 阅读 · 13 评论 -
别让for循环毁了你的程序(二)
上一篇,我们讲解了:别让for循环毁了你的程序(一),今天我继续讲解for循环还会带来哪些坑。这些坑都是开发中的小细节,都是值得我们注意的。. 在遍历ArrayList时调用 ArrayList.remove()方法。举个栗子一:移除所有能被2整除的数 List<Integer> list=new ArrayList<>(); ...原创 2020-01-09 18:53:45 · 740 阅读 · 3 评论 -
别让for循环毁了你的程序(一)
前言for循环是开发中常用的,但是使用for循环仍然有很多有需要注意的地方。今天我们就来细说for循环带了的坑。for循环问题一,遍历list集合出现死循环。今天,同事遇到了一个奇怪的问题,问题是这样的,他遍历向一个集合添加数据,结果发现for循环变成了死循环。大致代码如下。//学生类class Student{ private String name;//性命 private ...原创 2020-01-09 17:39:00 · 2848 阅读 · 4 评论 -
OpenGL(三)——OpenGL着色器基础
上一篇我们介绍了OpenGL基础相关的知识:OpenGL图形绘制和OpenGL入门,今天介绍一下OpenGL另一重要的成员----OpenGL着色器。什么是OpenGL着色器?Open GL ES 着色器语言是一种高级的图形编辑语言,主要特性有一下几点:OpenGL ES着色器语言是一种高级的过程语言对顶点着色器,片元着色器使用的是同样的语言,不做区分基于C/C++的语法及流程控制完...原创 2020-01-08 19:24:06 · 653 阅读 · 3 评论 -
【Android自定义View】Bitmap的绘制和颜色滤镜
前言Bitmap在开发中是经常遇到的,因为他用到的地方有很多,比如Android的图片预览,自定义相机,自定义美颜相机,图片滤镜,图像算法。。。。,既然使用场景这么多,今天就先讲一下Android中常用的吧。今天,我们来说说Bitmap相关的绘制以及颜色滤镜。看看我们是怎样虐狗的哈看看虐狗前的图原图,是一只可爱的阿拉斯加。Bitmap 绘制Bitmap的绘制,主要有以下4个方法,其中2...原创 2020-01-07 10:55:15 · 9167 阅读 · 6 评论 -
C++必备基础
前言最近在做人脸识别和音视频项目,所以必不可少的会接触到一些c++的东西,比如图片处理框架,OpenCV,音视频处理框架OpenGL等等,这些都是比较难搞的东西,但是,他们都有一个共同点,就是要用到c++相关的东西,今天,恰好有空,就总结一下c++常用基础知识。c++关键的技术点我简单的归纳一下,有一下几大类。...原创 2020-01-06 17:17:00 · 673 阅读 · 5 评论 -
图像处理常用八大算法
前言图片处理是开发过程中经常遇到和要处理的问题,毕竟图片是比较耗系统资源,网络资源,存储空间。。。,因此,图片的处理显得格外重要,去百度查阅资料,就会看到很多关于读片处理的方法,以及图片的加载框架,他们都是用来处理图片的。常见的图片处理方式大概有如下几类。比如图片的等比缩放,图片海量加载,图片的裁剪,图片的无损压缩,图片的旋转,图片实现画中画,图片实现阴影,改变图片形状等然后,这些操作只是符...原创 2020-01-03 13:54:10 · 47258 阅读 · 10 评论