随笔分类 -  算法

摘要:-- 定义一个双向链表节点 local Node = {} Node.new = function(key, value) local node = {} node.key = key node.value = value node.prev = nil node.next = nil return 阅读全文
posted @ 2024-03-25 10:06 天下太平 阅读(41) 评论(0) 推荐(0) 编辑
摘要:在游戏服务端架构中online server,有些也叫center server。 主要承载以下功能: 存储玩家的在线信息,处理上线和下线消息。 转发消息给特定玩家。 online server在架构图中的位置 online server集群内部架构图,以3个实例为例: 特点: svr之间相互连接, 阅读全文
posted @ 2022-10-09 11:34 天下太平 阅读(51) 评论(0) 推荐(0) 编辑
摘要:介绍 GeoHash是一种空间地址编码方法,能够把二维的空间经纬度数据编码成一个字符串。 一个字符串代表某一矩形区域,矩形区域内所有的点都共享相同的GeoHash字符串。相当于给区域内的点做了一个索引。 算法过程 对一个地理坐标编码时,按照初始区间范围纬度[-90,90]和经度[-180,180], 阅读全文
posted @ 2022-09-05 10:35 天下太平 阅读(112) 评论(0) 推荐(0) 编辑
摘要:分配问题 设n个代理和n个任务。 可以分配任何代理以执行任何任务,这会产生一些费用,该费用可能会因代理任务分配而异。 要求执行所有任务,方法是将每个任务恰好分配给一个代理,将每个任务恰好分配给一个代理,以使分配的总成本最小化。 也称作指派问题。 算法 匈牙利算法是一种在多项式时间内求解任务分配问题的 阅读全文
posted @ 2022-06-21 14:44 天下太平 阅读(613) 评论(0) 推荐(0) 编辑
摘要:解数独最好的算法叫舞蹈链:Dance Link X。 DLX=Dancing Links数据结构+X算法。 该算法主要是解决精确覆盖问题:比如有个集合X,以及其若干子集的集合Y,要求出一个Y的子集Y*,能够恰好分割X。 舞蹈链算法,需要构建一种数据结构,双向 十字 交叉 循环 链表。 DLX算法具体 阅读全文
posted @ 2022-06-08 16:15 天下太平 阅读(403) 评论(0) 推荐(0) 编辑
摘要:题目:数组排序,正数在左从大到小,负数在右从小到大 输入:3,4,1,2,-1,-4,-3,-2 输出:4,3,2,1,-4,-3,-2,-1 可以使用快排,实现cmp函数即可 template <typename T> int cmp(T a, T b) { if (a<0 && b<0) { r 阅读全文
posted @ 2022-06-07 10:32 天下太平 阅读(91) 评论(0) 推荐(0) 编辑
摘要:选取4张牌,最大数字为10,组合数为715,其中149个组合无解,566个组合有解。 (1, (1, 1, 1, 1), 'no ans') (2, (1, 1, 1, 2), 'no ans') (3, (1, 1, 1, 3), 'no ans') (4, (1, 1, 1, 4), 'no a 阅读全文
posted @ 2022-05-31 14:58 天下太平 阅读(380) 评论(0) 推荐(0) 编辑
摘要:随机取四个数字,用加、减、乘、除、括号5种运算,计算结果等于二十四。 穷举法 import itertools # 括号的组合只存在如下五种表达式结构 卡特兰数 formats = ['(({0[0]}{1[0]}{0[1]}){1[1]}{0[2]}){1[2]}{0[3]}', '({0[0]} 阅读全文
posted @ 2022-05-31 14:55 天下太平 阅读(424) 评论(0) 推荐(0) 编辑
摘要://升序排列 template <typename Comparable> int partition(vector<Comparable>& v, int left, int right) { if (left >= right) return left; int i = left, j = ri 阅读全文
posted @ 2022-05-20 10:53 天下太平 阅读(26) 评论(0) 推荐(0) 编辑
摘要:双指针写法 递归 template <typename Comparable> int partition(vector<Comparable>& v, int left, int right) { if (left >= right) return left; int i = left, j = 阅读全文
posted @ 2022-05-20 10:12 天下太平 阅读(53) 评论(0) 推荐(0) 编辑
摘要:牛顿迭代法 一阶泰勒展式:\(f(x) = f(x_0)+f^{'}(x_0)*(x-x_0)\) 假设$f(x)=x^N-a=0$,N=2时,\(f(x)=x^2-a \quad f^{'}(x)=2x\) 通过等式$f(x)=x_0^2-a+2x_0(x-x_0)=0$ 得到$x=\frac12 阅读全文
posted @ 2022-05-19 13:56 天下太平 阅读(220) 评论(0) 推荐(0) 编辑
摘要:一般算法 void mRandn(int n, int m) { for (int i = 0; i < n && m > 0; ++i) { if (rand() % (n - i) < m) { cout << i << ends; --m; } } } 选取数目满后,可以提前终止。 蓄水池抽样 阅读全文
posted @ 2022-05-19 11:45 天下太平 阅读(125) 评论(0) 推荐(0) 编辑
摘要:使用位运算的注意事项: 位操作只能用于整形数据,对float和double类型进行位操作编译器会报错。 位操作符的运算优先级比较低,尽量使用括号来确保运算顺序。 注意:一般运算不一定比位运算慢。编译器已经做的很好了,会把一般运算优化为位运算。 某些自作聪明的优化反而会误导编译器,使得编译器不进行更棒 阅读全文
posted @ 2022-05-17 18:31 天下太平 阅读(68) 评论(0) 推荐(0) 编辑
摘要:查表法 unsigned char reverse8(unsigned char c) { static unsigned char sta[16] = {//不多不少的静态数据 0x00,0x08,0x04,0x0C,0x02,0x0A,0x06,0x0E,0x01,0x09,0x05,0x0D, 阅读全文
posted @ 2022-05-16 16:03 天下太平 阅读(27) 评论(0) 推荐(0) 编辑
摘要:定点数数学库fpm(fixed-point math) github:https://github.com/MikeLankamp/fpm 仅包含头文件的实现,需要C++11或以上。 https://github.com/TxtpGame/fpm/blob/master/docs/index.md 阅读全文
posted @ 2022-04-21 10:58 天下太平 阅读(1014) 评论(0) 推荐(0) 编辑