随笔分类 -  数据结构与算法

用解析树计算自定义表达式
摘要:不久前,我们遇到了这样的需求:项目方需要对各个业务系统进行监控,如果业务系统的分值低于某个预定的分数,则监控系统会自动为相关负责人发送告警信息。 需求 看起来并不难,我们把资源的状态由高到低分为致命、严重、警告三个级别,整个业务系统的状态受最严重节点的影响,例如:如果业务系统中有一个资源的状态是致命 阅读全文

posted @ 2021-02-18 11:42 我是8位的 阅读(563) 评论(1) 推荐(2) 编辑

网络流(4)——带有容量的顶点和二部匹配
摘要:缓解拥堵的高速公路 又是一个晴朗的假日,居住在A城市的上班族打算到附近的B城市看看自然风光。当大家将车开到高速上时,又一次遇到了毫无悬念的拥堵,两个城市间的收费站成了拥堵的重灾区。下图展示了两个城市间高速公路的网络模型。 图1 每个顶点代表一个收费站,v1是A城市的出口,v6是B城市的入口,边的权重 阅读全文

posted @ 2019-06-14 15:07 我是8位的 阅读(964) 评论(0) 推荐(0) 编辑

网络流(3)——找到最小st-剪切
摘要:在大规模战争中,后勤补给是重中之重,为了尽最大可能满足前线的物资消耗,后勤部队必然要充分利用每条运输网。与此同时,交战双方也想要以最小的代价切断敌军的补给,从而使敌军处于孤立无援的境地。在古今中外的各种重大战役中,上演了一幕幕补给线上的攻防战。 甲军的运输路线 假设甲、乙两军正在交战,图8.17是甲 阅读全文

posted @ 2019-06-12 17:18 我是8位的 阅读(1380) 评论(0) 推荐(0) 编辑

网络流(2)——用Ford-Fullkerson算法寻找最大流
摘要:寻找最大流 在大规模战争中,后勤补给是重中之重,为了尽最大可能满足前线的物资消耗,后勤部队必然要充分利用每条运输网,这正好可以用最大流模型解决。如何寻找一个复杂网络上的最大流呢? 直觉上的方案 一种直觉上的方案是在一个流网络找到一条从源点到汇点的未充分利用的有向路径,然后增加该路径的流量,反复迭代, 阅读全文

posted @ 2019-06-10 16:16 我是8位的 阅读(1807) 评论(0) 推荐(0) 编辑

网络流(1)——网络、流网络和网络流
摘要:在现实世界中,我们的生活受到大量网络的支配。网络流可以表示很多模型,比如管道中的石油、高压线中电流,或者计算机网络中的数据。网络流也可以解决很多问题,比如如何进行道路交通管控,以便有效地缓解早高峰的拥堵;在物流网运输中,在满足供需关系的同时,怎样使渠道成本最低;在轰炸机执行轰炸任务时,怎样才能给敌军 阅读全文

posted @ 2019-05-16 21:34 我是8位的 阅读(2854) 评论(0) 推荐(0) 编辑

退而求其次(4)——椭圆中的最大矩形
摘要:在椭圆x2+4y2=4 中有很多内接的矩形,这些矩形的边平行于x轴和y轴,找出它们中面积最大的一个。 先作图,椭圆的中心在原点,其内接矩形的中心也在原点。设矩形的其中一点内接椭圆于P(x,y) , P在第一象限: 矩形的两条边长分别是2x和2y,面积是A=4xy 。还知道x和y都在椭圆上,因此问题可 阅读全文

posted @ 2019-05-08 09:59 我是8位的 阅读(2290) 评论(0) 推荐(0) 编辑

退而求其次(3)——宿管员的烦恼
摘要:书接上文,在《退而求其次(1)——随机法》中宿管员使用了随机法分配宿舍,现在尝试使用遗传算法。 顺序编码和初始种群 遗传算法的首要问题是基因编码。对于分宿舍问题,每种分配方案是一个个体,其基因序列的每一个编码代表一个同学,要求处于同一基因序列中的所有基因代码均不能重复,也就是每个同学都是独一无二的。 阅读全文

posted @ 2019-05-06 13:38 我是8位的 阅读(952) 评论(0) 推荐(0) 编辑

退而求其次(2)——遗传算法
摘要:小偷又来了 在搜索的策略(2)——贪心策略中,小偷撬开了一个保险箱,利用贪心法偷走了里面的物品并卖了个好价钱。现在小偷又来了,他光顾了同一个保险箱,保险箱中的物品还和之前一样,有5个物品A,B,C,D,E,它们的体积分别是3,4,7,8,9,价值分别是4,5,10,11,13,只不过每种物品仅有一个 阅读全文

posted @ 2019-04-28 18:14 我是8位的 阅读(1905) 评论(0) 推荐(0) 编辑

退而求其次(1)——随机法
摘要:又是一年开学季,来自全国各地的新生聚集到校园里。 入学的第一件事是分配宿舍。为了提升学生住宿的满意度,今年学校特意就学生的一些信息进行了调查,并要求宿管员根据问卷对宿舍进行最合理的分配,力争全体新生都对分配结果满意,问卷如下: 一共收到了数百份问卷,在宿管员的桌子上堆了厚厚的一摞。为了叙述方便,我们 阅读全文

posted @ 2019-04-22 12:22 我是8位的 阅读(648) 评论(0) 推荐(0) 编辑

A*搜索详解(2)——再战觐天宝匣
摘要:书接上文。在坦克寻径的,tank_way中,A*算法每一步搜索都是选择F值最小的节点,步步为营,使得寻径的结果是最优解。在这个过程中,查找最小F值的算法复杂度是O(n),这对于小地图没什么问题,但是对于大地图来说,openlist将会保存大量的节点信息,此时如果每次循环仍然使用O(n)复杂度的算法去 阅读全文

posted @ 2019-04-15 20:30 我是8位的 阅读(745) 评论(0) 推荐(0) 编辑

A*搜索详解(1)——通往基地的最短路线
摘要:假设地图上有一片树林,坦克需要绕过树林,走到另一侧的军事基地,在无数条行进路线中,哪条才是最短的? 这是典型的最短寻径问题,可以使用A*算法求解。A*搜索算法俗称A星算法,是一个被广泛应用于路径优化领域的算法,它的行为的能力基于启发式代价函数,在游戏的寻路中非常有用。 将地图表格化 A*算法的第一个 阅读全文

posted @ 2019-04-11 11:06 我是8位的 阅读(4017) 评论(0) 推荐(1) 编辑

搜索的策略(3)——觐天宝匣上的拼图
摘要:小说《溥仪藏宝录》讲述了一个曲折离奇的故事。在故事中,溥仪试图利用藏有大清皇家宝藏秘密的宝盒——“觐天宝匣”复辟清朝。这个宝匣是他从宫中带走的唯一宝物,里面藏着富可敌国的巨额宝藏,足以发动第三次世界大战。由于种种原因,溥仪将宝匣藏于太极皇陵。抗战期间,爱国人士崔二侉子带领众人深入太极皇陵,盗走了觐天 阅读全文

posted @ 2019-04-08 10:55 我是8位的 阅读(2204) 评论(0) 推荐(0) 编辑

搜索的策略(2)——贪心策略
摘要:贪心策略 很多时候,我们只需要找到问题的最优解,如果使用盲目搜索策略,就必须先找出所有解,再进一步比较哪个是最优的,当在解空间十分庞大时,难免有些浪费体力的感觉。这时候,不妨试试更高效的贪心策略。 贪心策略也叫贪心算法(greedy algorithm)或贪婪算法,是一种强有力的穷举搜索策略,它通过 阅读全文

posted @ 2019-03-29 17:43 我是8位的 阅读(4735) 评论(0) 推荐(0) 编辑

搜索的策略(1)——盲目搜索
摘要:早在1952年,克劳德·香农就已经是电子信息界的传奇人物,但是对当时的普通大众来说,他仍然是个陌生人。不过在即将开始的会展后,他就人尽皆知了。 在会议展上,香农展示了一只木制的、带有铜须的玩具老鼠,这只老鼠能够在迷宫中穿梭,最终找到出口处的金属硬币。老鼠是通过试错的方式探索迷宫的,通过胡须,它可以感 阅读全文

posted @ 2019-03-29 17:25 我是8位的 阅读(3217) 评论(0) 推荐(0) 编辑

密码疑云 (3)——详解RSA的加密与解密
摘要:上一篇文章介绍了RSA涉及的数学知识,本章将应用这些知识详解RSA的加密与解密。 RSA算法的密钥生成过程 密钥的生成是RSA算法的核心,它的密钥对生成过程如下: 1. 选择两个不相等的大素数p和q,计算出n=pq,n被称为RSA算法的公共模数; 2. 计算n的欧拉数φ(n),φ(n)=(p-1)( 阅读全文

posted @ 2019-03-22 18:06 我是8位的 阅读(5138) 评论(2) 推荐(0) 编辑

密码疑云 (2)——RSA加密机制需要的数学知识
摘要:在公钥密码体制提出不久,人们就找到其中的三种,其中最著名的当属RSA体制。RSA是一种非对称加密体制,在公开密钥加密和电子商业中被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。 阅读全文

posted @ 2019-03-20 14:35 我是8位的 阅读(1111) 评论(0) 推荐(0) 编辑

密码疑云 (1)——加密与签名
摘要:希尔顿·丘比特先生拿着一张稀奇古怪的纸条找到福尔摩斯,上面画着一行跳舞的小人: 他的妻子看到这些小人就会非常惊恐,而且这些奇怪的小人文字会经常出现在他家的窗台上和工具房的门上,他对此感到相当困扰,因此想求福尔摩斯帮忙解开这个谜团。 福尔摩斯拿着这些画着小人的纸条仔细观察,发现这些小人只有有限的几种, 阅读全文

posted @ 2019-03-14 11:08 我是8位的 阅读(926) 评论(0) 推荐(0) 编辑

算法分析(3)——冒泡排序真的慢吗?
摘要:在初学编程的时候,曾经有两个问题让我感到迷惑,第一个是利用中间变量交换另外两个变量,另一个就是冒泡排序。但是后来发现,冒泡排序几乎是所有排序算法中最简并且容易实现的,实际上许多人了解的第一个排序算法就是冒泡排序。总有人说:“日本人说英语口音太重,听不懂”,就好像没有口音能听得懂一样,人们也经常说冒泡 阅读全文

posted @ 2019-03-05 15:41 我是8位的 阅读(942) 评论(0) 推荐(0) 编辑

算法分析(2)——大O和大Θ
摘要:当一个软件遇到了性能瓶颈时,首要的改进是软件功能重构,适当删除可能拖垮系统的业务需求。客户对“实时”相当感兴趣,然而又有几个使用者能够真正清楚什么地方应该是实时的?这一点同样体现在其它行业,生厂商想要降低生产成本,相比于对供应商的原料压价,提高生产率、改进制作工艺、优化生产线是更好的办法。 第二个应 阅读全文

posted @ 2019-03-02 16:15 我是8位的 阅读(1526) 评论(0) 推荐(0) 编辑

算法分析(1)——数据的影响和函数的增长
摘要:算法分析 在编写代码的某一时刻,自然会产生一段代码比另一段代码运行得更快的思想。算法分析的任务便是尽可能多地发现算法的性能特征,以便让程序员利用这些特征做出正确的选择。在分析之前,首先要了解影响算法性能的因素并排除一些混淆视听的干扰项。 数据对性能的影响 也许我们都曾经遇到过这种情况,在某一特定的时 阅读全文

posted @ 2019-02-23 22:52 我是8位的 阅读(1136) 评论(0) 推荐(0) 编辑

导航