算法
文章平均质量分 68
爱思考的实践者
我的到来,让世界变得更好。My coming makes this world a better place to live in.
展开
-
leetcode206---反转链表---java实现
给你单链表的头节点 ,请你反转链表,并返回反转后的链表。原创 2022-06-11 10:54:33 · 396 阅读 · 1 评论 -
背包问题之多重背包
一、多重背包问题描述有3种物品和1个背包,背包最多只能装下15公斤的物品。怎样选择物品,使得背包能装下并且得到的价值最大。物品的重量、价值和个数如下所示:物品编号 重量 价值 件数 物品1 3公斤 2元 4件 物品2 4公斤 3元 3件 物品3 5公斤 4元 2件 二、解题思路我们先看下0-1背包实现原理:背包问题之0-1背包算法详解_爱思考的实践者的博客-CSDN博客。对比分析发现,多重背包与0-1背包原创 2022-03-23 20:56:04 · 2378 阅读 · 1 评论 -
背包问题之0-1背包算法详解
一、0-1背包问题描述有5件物品和1个背包,背包最多只能装下8公斤的物品。怎样选择物品,使得背包能装下并且得到的价值最大。物品的重量和价值如下所示:物品1: 6公斤 价值48元物品2: 1公斤 价值7元物品3: 5公斤 价值40元物品4: 2公斤 价值12元物品5: 1公斤 价值8元原创 2022-03-21 23:06:56 · 12765 阅读 · 2 评论 -
8皇后回溯算法递归方案探究及JAVA实现
8皇后问题简介八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上,不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。第一种方案算法思考,初步思路:(1) 构建二维int或者short型数组,在内存.原创 2021-10-12 15:06:48 · 161 阅读 · 0 评论 -
go juju/ratelimit 简单使用示例
从接口限流了解到令牌桶。经过调研,发现 go语言 juju/ratelimit 令牌桶限流器使用比较多,于是研究了下。具体令牌桶原理,请自行查询资料。下面给出一个简单应用的例子:package mainimport ( "fmt" "github.com/juju/ratelimit" "time")func main() { b := newBucket(1*time.Second, 100) for i := 0; i < 1000; i++ { before原创 2021-04-22 17:25:19 · 1075 阅读 · 0 评论 -
限流(Rate limit)算法详解
一、前言保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。今天和大家谈谈限流算法的几种实现方式。本文所说的限流并非是Nginx层面的限流,而是业务代码中的逻辑限流。为什么需要限流呢?按照服务的调用方,可以分为以下几种类型服务:1.1 与用户打交道的服务比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮的情况:用户增长过快(这是好事) 因为某个热点事件(微博热搜) 竞争对象爬虫 恶意的刷单这些情况都是无法预知的,不知道什么时候会有10倍、甚至20倍的转载 2021-04-19 20:59:59 · 1312 阅读 · 0 评论 -
归并排序原理及其Java实现
一、归并排序原理归并排序(Merge Sort)是建立在归并操作上的一种有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将“已有序的子序列”合并,得到完全有序的序列。将两个有序表合并成一个有序表,称为二路归并。1.1 归并操作示例对于数列{6,202,100,301,38,8,1},初始状态为:6,202,100,301,38,8,1第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;第二次归并后原创 2021-04-06 17:29:26 · 307 阅读 · 0 评论 -
shardingsphere-雪花算法总结
一、默认配置的雪花算法在表的sharding规则中,如果没有指定生成分布式ID的配置项,那么将会使用默认配置的雪花算法ID生成器来生成生成分布式ID。spring.shardingsphere.sharding.default-key-generator.column=idspring.shardingsphere.sharding.default-key-generator.type=SNOWFLAKEspring.shardingsphere.sharding.default-key...原创 2021-03-12 14:50:46 · 3288 阅读 · 1 评论 -
分布式ID生成方案概览
目录一、为什么要用分布式ID?1.1 什么是分布式ID?1.2 分布式ID需要满足那些条件?二、 分布式ID都有哪些生成方式?2.1 基于UUID2.2 数据库自增ID2.3 数据库多主模式生成ID2.4 号段模式2.5 基于Redis模式生成ID2.6 雪花算法三、大厂开源分布式ID生成器3.1 百度(uid-generator)3.2. 美团(Leaf)3.2.1 号段模式3.2.2 snowflake模式3.3 滴滴(Tinyid)3原创 2021-02-20 12:00:53 · 188 阅读 · 0 评论 -
负载均衡--加权随机算法(Weight Random)
加权随机法根据服务器的配置和系统的负载,分配不同的权重,按照权重随机请求后端服务器。一、算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},权重为 W = {W0, W1, W2, …, Wn},权重之和为 weightSum, 服务器列表为 serverList,算法可以描述为:1、初始化 serverList,将 W0 个 S0 加入至serverList,将 W1 个 S1 加入至serverList,依据此规则,将所有的服务器加入至 serverList 中;2原创 2020-11-12 17:26:35 · 1314 阅读 · 2 评论 -
负载均衡--随机算法(Random)
随机算法是指:从服务器列表中,随机选取一台服务器进行访问。由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果。一、算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},算法可以描述为:1、通过随机函数生成 0 到 N 之间的任意整理,将该数字作为索引,从 S 中获取对应的服务器;假定我们现在有如下四台服务器:服务器地址 权重 192.168.1.1 1 192.168.1.2原创 2020-11-12 15:16:34 · 1516 阅读 · 2 评论 -
负载均衡--加权轮询算法(Weight Round)
加权轮询算法:不同的后端服务器,在机器的配置和当前系统的负载方面,可能并不相同。因此,它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求;给配置低、负载高的机器分配较低的权重,降低系统负载。加权轮询算法能很好地处理这一问题,并将请求顺序地按照权重分配到后端服务器。一、算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},默认权重为 W = {W0, W1, W2, …, Wn},服务器列表为 serverList,算法可以描述为:1、初始化 s原创 2020-11-12 10:55:06 · 2653 阅读 · 4 评论 -
php实现获取某指定叶子结点到根结点的路径
问题:有一个多叉树,如下所示: class node { public $data = null; public $children = null; public function __construct($data) { $this->data = $data; } } $r...原创 2019-10-30 15:59:51 · 372 阅读 · 0 评论 -
php实现获取从叶子结点到根结点的路径
问题:有一个多叉树,如下所示: class node { public $data = null; public $children = null; public function __construct($data) { $this->data = $data; } } $r...原创 2019-10-30 15:46:09 · 560 阅读 · 0 评论 -
php执行sha256和hmac_sha256
最近,在PHP项目中使用到了hmac_sha256加密方式。于是,研究了下sha256和hmac_sha256的加密方式,将使用方法记录下来,为其他同学提供参考。<?php$params = array( 'title' => '测试标题', 'content' => '测试内容', 'original' => 1, 'subTitle' => '测试副标题',原创 2020-06-08 16:51:35 · 11603 阅读 · 0 评论 -
C++和go实现加权轮询调度算法(Weight Round-Robin Scheduling)
在多台机器实现负载均衡的时候,经常用到轮询调度算法(Round-Robin Scheduling)。轮询调度算法就是:以循环的方式,依次将请求调度到不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。1、算法流程:假设有一组服务器 S = {S0, S1, …, Sn-1} ,...原创 2018-11-11 19:10:22 · 2424 阅读 · 0 评论 -
负载均衡--轮询算法(Round)
轮询法是指:将请求按顺序轮流分配到服务器上,均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。一、算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},算法可以描述为:1、从 S0 开始,依次调度 S0,S1, S2, …, Sn;2、若所有服务器都已被调度过,则从头开始,循环调度;假定现在有四台服务器,如下所示:服务器地址 权重 192.168.1.1 1 192.168.1.2 2 192.168.1.3原创 2020-11-09 20:05:37 · 1567 阅读 · 2 评论 -
负载均衡--平滑加权轮询算法(Smooth Weight Round Robin)
对于加权轮询算法,从宏观角度讲,权重高的服务器被访问的次数高一些,整体近似均衡;从微观角度讲,权重高的服务器会被连续访问到,局部没有那么均衡。为了更好地解决均衡问题,nginx 的作者提出了均衡加权轮询算法。一、算法描述假设有N台服务器 S = {S0, S1, S2, …, Sn},默认权重为 W = {W0, W1, W2, …, Wn},当前权重为 CW = {CW0, CW1, CW2, …, CWn}。在该算法中有两个权重,默认权重表示服务器的原始权重,当前权重表示每次访问后重新计算的权重原创 2020-11-06 18:42:46 · 746 阅读 · 2 评论 -
Simhash的生成及存储
一、背景介绍根据Detecting Near-Duplicates for Web Crawling论文中的介绍,在互联网中有很多网页的内容是一样的,但是它们的网页元素却不是完全相同的。每个域名下的网页总会有一些自己的东西,比如广告、导航栏、网站版权之类的东西,但是对于搜索引擎来讲,只有内容部分才是有意义的,虽然网页元素不同,但是对搜索结果没有任何影响,所以在判定内容是否重复的时候,应该忽...转载 2018-09-04 17:15:02 · 2917 阅读 · 2 评论