leaf

Codeforces Round #463 F. Escape Through Leaf (李超线段树合并)

旧巷老猫 提交于 2020-11-24 03:02:49
听说正解是啥 set启发式合并+维护凸包+二分 根本不会啊 , 只会 李超线段树合并 啦 ... 题意 给你一颗有 $n$ 个点的树 , 每个节点有两个权值 $a_i, b_i$ . 从 $u$ 跳到 $v$ 的代价是 $a_u \times b_v$ . 你需要计算每个节点跳到叶子的最小代价 . $(n \le 10^5, -10^5 \le a_i, b_i \le 10^5)$ 题解 我们首先考虑一个很容易的 $dp$ , 令 $dp_i$ 为 $i$ 跳到叶子的最小代价 . 那么显然有一个转移 此处 $v$ 是 $u$ 的后代 . $$\displaystyle dp_u = \min_v {a[u] \times b[v] + dp_v}$$ 暴力转移是 $O(n^2)$ 的显然无法接受 . 那么考虑优化 , 不难发现这个转移就是 李超线段树上求多条直线 $y=kx+b$ 在 $x=k$ 最值的形式 . $(k = b[v], x = a[u], b=dp_v)$ 那么显然可以考虑用李超线段树维护这个 $dp$ . 对于树上的每个点 , 可以用一颗李超线段树维护这个点子树的所有直线信息 . 然后我们只需要考虑合并几颗子树信息了 , 不难发现是 套路的 线段树合并 . (这样时间空间复杂度都正确了?) 我们直接同时遍历两颗线段树 ,

分布式序列

杀马特。学长 韩版系。学妹 提交于 2020-11-20 02:20:59
一、背景 在复杂分布式系统中,特别是微服构架中,往往需要对大量的数据和消息进行唯一标识。随着系统的复杂,数据的增多,分库分表成为了常见的方案,对数据分库分表后需要有一个唯一ID来标识一条数据或消息(如订单号、交易流水、事件编号等),此时一个能够生成全局唯一ID的系统是非常必要的。 业务对分布式ID规则有哪些要求?对分布式ID系统有什么要求?分布式ID算法有哪些?业内大厂是怎么用的?我们又是怎么玩的?接下来一 一揭晓。 二、分布式序列要求 分布式序列是一个通用的产品,要满足以要求: 1、全局唯一性 在同一场景下不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 2、趋势递增 在主键的选择上面我们应该尽量使用有序的主键保证写入性能、同时有利于索引提高查询的性能。 3、序列数据类型 序列的数据类型决定的存储空间大小,序列尽可能用整类型,以MYSQL bigint unsigned为例存储空间为8字节,范围(0~2*2^63-1 )是一个极大的整数,足以满足需求。 4、简单易用 能够拿来即用,接入方便,同时在系统设计和实现上要尽可能的简单。 三、序列常用算法 3.1、UUID UUID 含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准。 UUID是由一组32位数的16进制数字所构成,UUID理论上的总数为1632=2128

这三年被分布式坑惨了,曝光十大坑

≡放荡痞女 提交于 2020-11-15 08:00:00
这是我的第 60 篇原创文章 作者 | 悟空聊架构 来源 | 悟空聊架构 (ID:PassJava666) 转载请联系授权(微信ID:PassJava) 本篇主要内容如下: 主要内容 前言 我们都在讨论分布式,特别是面试的时候,不管是招初级软件工程师还是高级,都会要求懂分布式,甚至要求用过。传得沸沸扬扬的分布式到底是什么东东,有什么优势? 借用火影忍术 风遁 · 螺旋手里剑 看过 火影 的同学肯定知道 漩涡鸣人 的招牌忍术: 多重影分身之术 。 这个术有一个特别厉害的地方, 过程和心得 :多个分身的感受和经历都是相通的。比如 A 分身去找卡卡西(鸣人的老师)请教问题,那么其他分身也会知道 A 分身问的什么问题。 漩涡鸣人 有另外一个超级厉害的忍术,需要由几个影分身完成: 风遁·螺旋手里剑。 这个忍术是 靠三个鸣人一起协作完成的。 这两个忍术和分布式有什么关系? 分布在不同地方的系统或服务,是彼此相互关联的。 分布式系统是分工合作的。 案例: 比如 Redis 的 哨兵机制 ,可以知道集群环境下哪台 Redis 节点挂了。 Kafka的 Leader 选举机制 ,如果某个节点挂了,会从 follower 中重新选举一个 leader 出来。(leader 作为写数据的入口,follower 作为读的入口) 那 多重影分身之术 有什么缺点? 会消耗大量的查克拉

面试被问分布式ID怎么办? 滴滴(Tinyid)甩给他

筅森魡賤 提交于 2020-11-13 09:55:46
引言 接着 《一口气说出 9种 分布式ID生成方式,面试官有点懵了》 来继续详细的介绍分布式ID生成器,大家比较感兴趣的 美团(Leaf) 、 滴滴(Tinyid) 、 百度(uid-generator) 三个开源项目,美团(Leaf)已经讲完,详见 《9种分布式ID生成之美团(Leaf)实战》 ,今天结合实战搞一下滴滴开源的( Tinyid )。 Tinyid介绍 Tinyid 是滴滴开发的一款分布式ID系统, Tinyid 是在 美团(Leaf) 的 leaf-segment 算法基础上升级而来,不仅支持了数据库多主节点模式,还提供了 tinyid-client 客户端的接入方式,使用起来更加方便。但和美团(Leaf)不同的是,Tinyid只支持号段一种模式不支持雪花模式。 Tinyid的特性 全局唯一的long型ID 趋势递增的id 提供 http 和 java-client 方式接入 支持批量获取ID 支持生成1,3,5,7,9…序列的ID 支持多个db的配置 适用场景 :只关心ID是数字,趋势递增的系统,可以容忍ID不连续,可以容忍ID的浪费 不适用场景 :像类似于订单ID的业务,因生成的ID大部分是连续的,容易被扫库、或者推算出订单量等信息 Tinyid原理 Tinyid 是基于号段模式实现,再简单啰嗦一下号段模式的原理:就是从数据库批量的获取自增ID

机器学习笔记(1)决策树

僤鯓⒐⒋嵵緔 提交于 2020-11-10 03:09:03
系统不确定性的度量 先来看2个概念. 信息熵 $$h(\theta)=\sum_{j=0}^n \theta_jx_j$$ 基尼系数 $$G=1-\sum_{i=0}^n p_i^2$$ 二者都反映了信息的不确定性,是信息不确定性的不同评价标准. 关于信息熵,在数学之美中,有一段通俗易懂的例子. sklearn中使用决策树 在sklearn中使用decisiontree时,采用信息熵或者基尼系数,预测准确率并不会有很大差异. from sklearn.tree import DecisionTreeClassifier tree_clf = DecisionTreeClassifier(max_depth=2, criterion="entropy") tree_clf.fit(X, y) tree_clf = DecisionTreeClassifier(max_depth=2, criterion="gini") tree_clf.fit(X, y)    决策树原理 比如我们有一组数据,m个样本,n个特征.我们希望经过x次决策(实际上也就是类似与x次if-else判断,每一次if-else判断以后,我们的样本都可以被分成2部分,我们就可以计算这2部分的信息含量(也就是信息熵)),使得所有样本的不确定性最低.不确定性最低的含义也就是:模型最大可能地拟合了我们的数据. 决策树

分布式Id生成方案

元气小坏坏 提交于 2020-11-03 11:23:35
类SnowFlake这种方式为划分具体命名空间的一种ID生成方式。把64bits划分为多段,大致为标识+worker+时间戳+递增序列。具体位数划分决定了ID使用年限及ID的利用率。比如以上图示例:41位的时间戳可标识(1<<41)/(1000*60*60*24*365)大概为65年时间。10bit的worker可部署在1024台机器上10bit的自增序列可每毫秒产生1024个id.理论上每台机器可达到百万QPS值。具体划分根据公司内业务并发情况,业务可接入系统数来决定。 优点: 1.时间戳在高位,序列在低位保证ID是递增的。 2.无任何依赖外部系统,数据库以及中间件,保证服务更高的稳定性以及生成id的高性能。 3.可灵活分配bit位数。 缺点: 1.强依赖于硬件时钟,如果硬件时间回拨,可能会导致ID重复。 避免时钟回拨方案Id生成方式选择上还是选择类snowflake的方式,生成方式更灵活,可控,但需解决硬件时钟回拨的问题。解决时钟回拨的问题可以有以下两种方案: A. 代码发现发生时钟回拨后判断回拨长度,如果<=5ms则等待时间追上上次更新时间,如果>则抛出异常,返回错误码给调用端。(美团leaf分布式id做法) B. 消费未来时间,只在系统初次启动时记录System.currentTimeMillis().赋值为lastTime之后通过消费未来时间得到lastTime.

大型互联网公司分布式ID方案总结

Deadly 提交于 2020-10-31 09:53:31
ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innodb存储引擎,UUID太长以及无序,所以并不适合在Innodb中来作为主键,自增ID比较合适,但是随着公司的业务发展,数据量将越来越大,需要对数据进行分表,而分表后,每个表中的数据都会按自己的节奏进行自增,很有可能出现ID冲突。这时就需要一个单独的机制来负责生成唯一ID,生成出来的ID也可以叫做 分布式ID ,或 全局ID 。下面来分析各个生成分布式ID的机制。 这篇文章并不会分析的特别详细,主要是做一些总结,以后再出一些详细某个方案的文章。 数据库自增ID 第一种方案仍然还是基于数据库的自增ID,需要单独使用一个数据库实例,在这个实例中新建一个单独的表: 表结构如下: CREATE DATABASE `SEQID`; CREATE TABLE SEQID.SEQUENCE_ID ( id bigint(20) unsigned NOT NULL auto_increment, stub char(10) NOT NULL default '', PRIMARY KEY (id), UNIQUE KEY stub (stub) ) ENGINE=MyISAM; 可以使用下面的语句生成并获取到一个自增ID begin;

大型互联网公司分布式ID方案总结

你离开我真会死。 提交于 2020-10-31 08:27:45
ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innodb存储引擎,UUID太长以及无序,所以并不适合在Innodb中来作为主键,自增ID比较合适,但是随着公司的业务发展,数据量将越来越大,需要对数据进行分表,而分表后,每个表中的数据都会按自己的节奏进行自增,很有可能出现ID冲突。这时就需要一个单独的机制来负责生成唯一ID,生成出来的ID也可以叫做 分布式ID ,或 全局ID 。下面来分析各个生成分布式ID的机制。 数据库自增ID 第一种方案仍然还是基于数据库的自增ID,需要单独使用一个数据库实例,在这个实例中新建一个单独的表: 表结构如下: CREATE DATABASE `SEQID`; CREATE TABLE SEQID.SEQUENCE_ID ( id bigint(20) unsigned NOT NULL auto_increment, stub char(10) NOT NULL default '', PRIMARY KEY (id), UNIQUE KEY stub (stub) ) ENGINE=MyISAM; 可以使用下面的语句生成并获取到一个自增ID begin; replace into SEQUENCE_ID (stub) VALUES (

STM32在线升级OTA,看这一篇就够啦~

≡放荡痞女 提交于 2020-10-28 20:28:34
❝ 本文是博主在学习OTA时,up主阿正推荐学习的文章,原作者leafguo,写的非常简洁明了,在获得授权后整理发布,可以在文末点击阅读原文跳转到原文章。 ❞ 简介 本文主要讲解在线升级(OTA)的基础知识, 主要是针对 IAP OTA 从 原理分析 , 分区划分 , 到 代码编写 和 实验验证 等过程阐述这一过程. 帮助大家加深对OTA的认识. 1. OTA基础知识 什么是BootLoader? BootLoader 可以理解成是引导程序, 它的作用是启动正式的 App应用程序 . 换言之, BootLoader 是一个程序, App也是一个程序, BootLoader程序 是用于启动 App程序 的. STM32中的程序在哪儿? 正常情况下, 我们写的程序都是放在STM32片内Flash中(暂不考虑外扩Flash). 我们写的代码最终会变成二进制文件, 放进Flash中 感兴趣的话可以在 Keil >>> Debug >>> Memory 中查看, 右边Memory窗口存储的就是代码 接下来就可以进入正题了. 进行分区 既然我们写的程序都会变成二进制文件存放到Flash中, 那么我们就可以进一步对我们程序进行分区. 我使用的是 F103RB-NUCLEO开发板 ,他的Flash一共128页, 每页1K.见下图: 以它为例, 我将它分为三个区. BootLoader区 、

教程丨 一文详尽CatBoost

柔情痞子 提交于 2020-10-26 04:03:00
转载自:Datawhale(ID:Datawhale) 作者:潘华引 本文 13867 字 ,建议阅读 35 分钟 。 本文详尽介绍CatBoost 。 CatBoost CatBoost是俄罗斯的搜索巨头Y andex在2017年开源的机器学习库,也是Boosting族算法的一种,同前面介绍过的XGBoost和LightGBM类似,依然是在GBDT算法框架下的一种改进实现,是一种基于对称决策树(oblivious trees)算法的参数少、支持类别型变量和高准确性的GBDT框架,主要说解决的痛点是高效合理地处理类别型特征,这个从它的名字就可以看得出来,CatBoost是由catgorical和boost组成,另外是处理梯度偏差(Gradient bias)以及预测偏移(Prediction shift)问题,提高算法的准确性和泛化能力。 集成学习 CatBoost主要有以下五个特性: 无需调参即可获得较高的模型质量,采用默认参数就可以获得非常好的结果,减少在调参上面花的时间; 支持类别型变量,无需对非数值型特征进行预处理; 快速、可扩展的GPU版本,可以用基于GPU的梯度提升算法实现来训练你的模型,支持多卡并行; 提高准确性,提出一种全新的梯度提升机制来构建模型以减少过拟合; 快速预测,即便应对延时非常苛刻的任务也能够快速高效部署模型。