主页

广告展示的”随机“选择:三种算法的深度对比

在互联网广告投放、负载均衡、A/B测试等场景中,我们经常需要按照预设权重从多个选项中进行选择。本文将深入探讨三种不同的加权随机选择算法,并通过大规模模拟实验对比它们的性能表现。 问题背景 假设我们有4个广告,权重分别为2、3、4、5,需要每次展示2个不同的广告。看似简单的需求,实际上涉及到几个关键问题: 如何确保长期展示比例符合权重设定? 如何处理”不重复选择”带来的概率分布变化? 在需要结果可重现的场景下,如何实现确定性选择? 理论分布的计算 简单权重 vs 不重复选择 首先需要理解一个重要概念:当我们进行不重复选择时,实际的概率分布会与简单权重比例有所不同。 简单权重比例(假设每次选择独立): Ad0: 2/14 = 14.29% Ad1: ...

阅读更多

GPC(General Polygon Clipper)多边形布尔运算库

概述 它最初由 Alan Murta 在曼彻斯特大学开发。 官方主页:Alan Murta’s GPC page Key operations supported: Difference (A-B) Intersection (A∩B) Exclusive-or (A⊕B) Union (A∪B) 算法特点 扫描线算法(Sweep Line): 预处理阶段 Inital Validation: 检查简单的空结果情况 使用边界框测试优化(minimax_test)识别潜在的轮廓 构建局部最小值表(LMT): 为主体(subject)和裁剪(clip)多边形构建LMT 对于...

阅读更多

valhalla 算路引擎

基于openstreetmap数据的算路引擎,括路径规划、等时线计算、高程采样、地图匹配和旅行优化 核心特性 Tiled Hierarchical Data Structure: Allows for small memory footprint on constrained devices, enables offline routing, and provides a means for regional extracts and partial updates. 支持在资源受限设备上使用较小内存,便于离线路由,并支持区域提取与局部更新。 Dynamic Runtime Costing: Edge and vertex costing via a plugin archite...

阅读更多

渲染为什么需要三角化:渲染管线的最小单位

在图形渲染领域,有一个不成文的共识:一切几何,最终都要变成三角形。 无论你在建模时使用的是曲面、N边形、多边折线还是Bezier曲线,到了 GPU 渲染阶段,都会经历一个不可或缺的步骤——三角化(Triangulation)。 这篇文章将带你理解:为什么渲染一定要三角化?有哪些主流三角化算法?OpenGL 又是如何处理三角形的? 一、为什么渲染必须三角化? 1. 三角形是最稳定的平面单位 任意三个不共线的点,唯一确定一个平面。 多边形(如四边形)如果顶点不共面,就可能出现 扭曲 或 不确定面方向。 三角形天然“平”,不管顶点位置如何,都不会在图形管线中引起数学歧义。 稳定性意味着更少的渲染bug、更容易进行裁剪、光照、纹理插值等操作。 2. 三角形最适...

阅读更多

bsdiff 二进制diff库

简介 提供两个文件的 binary diff 的patch 补丁 Patch 的数据结构 Control Data: 补丁过层指导 Diff Data: 新旧两个版本文件的差异 Extra data:在新文件里完全没有的data 基于stream的设计 通过stream来抽象 io 操作,方便在多种环境(实测linux server, android,ios设备都有一致性, server打出来的patch 可以直接在端上merge) 二进制diff算法 Suffix Array Generation 后缀数组 针对于 老文件,进行 利用 qsufsort 进行排序,实际上就是产出一份方便匹配的数据 为每个字节值创建桶(0-255) 计算每个字...

阅读更多

spdlog 和 GLOG 的核心区别

spdlog 和 GLOG 的核心区别 维度 GLOG (Google Logging) spdlog 项目起源 Google 内部老项目(2000年代初) 轻量、高性能现代日志库(C++11以后) 库大小 很重、依赖复杂(GFLAGS、线程库) 单头文件版也有,非常轻量 初始化 必须全局初始化(InitGoogleLogging) 直接即用,支持单独 logger、多 logger 依赖 gflags、pth...

阅读更多

tippecanoe 地图网格切分工具

Tippecanoe 是一个命令行工具,用于从大型地理空间数据集构建矢量瓦片集。其主要目的是实现尺度无关的可视化,在所有缩放级别上保留原始数据的密度和细节, 简化(RDP)、索引(R-Tree)、裁剪(Clipping)、投影(Mercator)、合并(Union)等 概述 结构 1. 命令行工具 tippecanoe:主要工具,用于生成矢量瓦片 tile-join:用于合并瓦片和连接 CSV 属性的工具 tippecanoe-decode:将矢量瓦片转换回 GeoJSON 的工具 tippecanoe-json-tool:用于操作 GeoJSON 的实用工具 tippecanoe-enumerate:列出 MBTiles 文件中的瓦片 2. 核...

阅读更多

sglang 对 DeepSeek的 MLA的矩阵乘 load阶段融合的优化

主要优化点 PR标题: Fuse q_a_proj and kv_a_proj for DeepSeek models 动机(Motivation): 在 DeepSeek V3 模型的 Self-Attention 结构中, q_a_proj(query after attention projection)和 kv_a_proj(key-value after attention projection)都以同一个 hidden state 作为输入。 因此可以把它们合并为一个模块, 这样: 只需要 一次 DeepGemm 调用(矩阵乘), 减少了一次 kernel launch 开销, 提升整体推理速度。 具体修改(Modifications) ...

阅读更多