- 博客(10)
- 收藏
- 关注
原创 Jedis快速实现分布式锁
redis的setnx和事务在实现分布式锁申请和释放上均有不足。本文通过Jedis依赖快速实现基于Redis的分布式锁。其中申请锁使用了参数SetParmas,释放锁调用lua脚本。
2020-04-10 20:22:27
1095
原创 赞同反对功能简单实现
类似知乎、微博、腾讯视频等Web2.0应用,mysql等传统关系型数据库可能对类似一篇回答、文章、评论的点赞和反对功能性能上表现吃力,以Redis为代表的NoSql等内存数据库逐渐变得流行。这一应用场景主要面临两个难题:一是在并发情况下保证对用户态度的数据一致性,例如unique约束等;而是为用户提供高速的查询接口,例如对不同态度分别计数功能。本文基于Mysql和Redis两种方式来实现赞同反对这一功能,后者能够较好的解决以上两个技术难题。
2020-03-08 18:55:17
371
原创 图(邻接矩阵)的最短路径
求图的最短路径,有两个经典的算法——dijkstra和floyd算法。dijkstra算法适合稀疏图(邻接链表)求单点到其他点的最短路径。floyd算法适合稠密图(邻接矩阵)求各点到其他点的最短路径。邻接矩阵是图的一种简单的表示形式。dijkstra算法虽然适合邻接链表,算法题中也常用邻接矩阵实现。宏定义点个数100,使用typedef定义边权重的类型int,方便程序的调试,同时用int(...
2019-02-01 22:53:11
11340
原创 BFS寻找多钥匙迷宫所有路径
前驱问题:胜利大逃亡迷宫最优解问题用队列解决,迷宫所有路径问题因为涉及回溯就用栈解决。前半句在理,后半句我曾经这么以为。用队列也可以找到所有路径,而且找到路径的先后是按照步数升序排列的,这一点比栈好。也就是说栈并不能保证找到的路径是按步数升序排列的,甚至有从长到短排列的趋势。另外,回溯产生的大量递归开销可能是百个点规模以上迷宫无法承受的,能用迭代就不用递归。下面的代码是通过BFS实现对...
2018-10-31 22:10:10
975
原创 胜利大逃亡之STL队列
因为自己远不如编译器聪明,所以要熟悉STL工具的使用。读者也可以自行实现(循环)队列类。4576 胜利大逃亡题目描述 Descriptionelfness被魔王抓走了,这次魔王把elfness关在一个n*m的地牢里。地牢的某个地方安装了一个带锁的门,钥匙藏在地牢的另外一个地方,elfness想要通过这个门,就必须先走到藏钥匙的地方取钥匙。刚开始的时候elfness被关在(sx,...
2018-10-16 16:20:38
331
原创 对数效率求斐波那契数
讨论一个著名的数列——斐波那契数列(Fibonacci sequence),其第0项为0,第1项为1,从其第2项开始,每一项都为前面两项的和,即:C语言中,我们很自然能够得出如下的递归代码:#define var __int64var Fibonacci2(int n) { if (n <=1) { return n; } return Fibonacci2(n...
2018-10-05 10:20:10
334
原创 C实现Sobel算子边缘检测
计算机中的图像是由点阵形式保存的。通常,边缘检测是检测图像灰度值的不连续性,可以使用Sobel算子检测一阶导数,从而发现边缘。Sobel算子是3*3矩阵:分别对原图像进行滤波,分别得到水平和垂直边缘。对矩阵使用滤波,要用到卷积运算。实现的方法有很多种,例如matlab的imfilter和conv2,opencv的filter2D等,甚至可以它们封装的Sobel进行检测,我...
2018-09-30 11:39:22
5103
2
原创 C简单实现矩阵相关和卷积
相关和卷积是两个相反的概念,卷积需要将模板矩阵旋转180°,当然可以相对地将原图像和模板重合部分做一个旋转,简化计算。下面是C代码实现分别用相关和卷积实现滤波。#include<stdio.h>#include<malloc.h>#define var int#define v1_row 5#define v1_col 5#define v2_row ...
2018-09-29 20:51:26
993
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人