算法

再译《A *路径搜索入门》之流畅版??

蓝咒 提交于 2020-03-25 03:53:12
3 月,跳不动了?>>> A *路径搜索入门 帕特里克·莱斯特发表于2003年10月8日下午8点33人工智能 如果您发现文中有错误或问题(丢失的影像或文件,受损代码,不正确的文本格式等),导致无法阅读它时,请联系编辑,以便能更正。感谢您帮助我们改善这个资源。 更新于2005年7月18日 这篇文章已被翻译成阿尔巴尼亚语,中文,法语,德语,葡萄牙语,俄语和西班牙语。欢迎其他的翻译。在这篇文章的末尾有联系的电子邮件地址。 对于初学者, A *(读A-星,译者注:老外读A-star)算法可能有些复杂。虽然在网上有很多解释A *算法的文章,大多数写给有基础的。这篇是给纯新手的。(译者记:各位新手如果有看不懂的,对不起是翻译的错。) 本文并不试图成为这个主题的权威著作。相反,是阐述原理并准备让你能去阅读所有其他的材料及明白他们在说什么。在本文的末尾提供一些较好,能进一步阅读的资料的链接。 最后,这篇文章不是具体的方案。你应该能够接受在文中出现的任何计算机语言。就如同你所期望的那样,不管怎样, 在本文的末尾,有一个演示程序的链接。演示包中有两个版本:一个是C++,一个是Blitz Basic(http://www.blitzbasic.com/Home/_index_.php)。如果想运行A *的程序,也有可执行文件的。 可是我们正在超越自己。从头开始吧... ■简介:搜索区域

再译《A *路径搜索入门》之三

故事扮演 提交于 2020-03-25 03:51:31
3 月,跳不动了?>>> ■ 继续 搜索 Continuing the Search 要 继续 搜索,我 们简单 地 选择在 开启列表中具有最小 F 值 的方 块 。然后,我 们用选择 方 块 作 以下 事情 : To continue the search, we simply choose the lowest F score square from all those that are on the open list. We then do the following with the selected square: 1. 把 它从 开启列表 取出,并加入到 关 闭 列表 。 1.Drop it from the open list and add it to the closed list. 2. 检查 所有的相 邻 方 块 。忽略那些 在 关 闭 列表 里 或不可行走的( 墙 ,水或其他非法地形),如果它 们还不在 开启列表中 , 加方 块 到 开启列表 。将 选 定方 块作为 新方 块的 “父”。 2. Check all of the adjacent squares. Ignoring those that are on the closed list or unwalkable (terrain with walls, water, or other

软工结队博客

空扰寡人 提交于 2020-03-24 14:45:23
[软工]结对项目作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 结对项目作业 我在这个课程的目标是 学习工程化开发软件,体验团队开发和结队开发 这个作业在哪个具体方面帮助我实现目标 体验结队编程的过程 班级 006 项目地址 https://github.com/BUAA-SE/extremely-weak-GeoGebra PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 · Estimate 估计这个任务需要多少时间 10 10 Development 开发 · Analysis · 需求分析 (包括学习新技术) 100 180 · Design Spec 生成设计文档 50 70 · Design Review 设计复审 (和同事审核设计文档) 40 50 · Coding Standard 代码规范 (为目前的开发制定合适的规范) 50 80 · Design 具体设计 80 100 · Coding 具体编码 300 500 · Code Review 代码复审 50 70 · Test 测试(自我测试,修改代码,提交修改) 150 240 Reporting 报告 ·Test Report 测试报告 30 40 ·Size

[干货]基础机器学习算法

岁酱吖の 提交于 2020-03-24 13:55:39
原文链接 本篇内容主要是面向 机器学习 初学者,介绍常见的机器学习 算法 ,当然,欢迎同行交流。 哲学要回答的基本问题是从哪里来、我是谁、到哪里去,寻找答案的过程或许可以借鉴机器学习的套路:组织数据->挖掘知识->预测未来。组织数据即为设计特征,生成满足特定格式要求的样本,挖掘知识即建模,而预测未来就是对模型的应用。 特征设计依赖于对业务场景的理解,可分为连续特征、离散特征和组合高阶特征。本篇重点是机器学习算法的介绍,可以分为监督学习和无监督学习两大类。 无监督学习算法很多,最近几年业界比较关注主题模型,LSA->PLSA->LDA为主题模型三个发展阶段的典型算法,它们主要是建模假设条件上存在差异。LSA假设文档只有一个主题,PLSA假设各个主题的概率分布不变(theta都是固定的),LDA假设每个文档和词的主题概率是可变的。 LDA算法本质可以借助上帝掷骰子帮助理解,详细内容可参加Rickjin写的《LDA数据八卦》文章,浅显易懂,顺便也科普了很多数学知识,非常推荐。 监督学习可分为分类和回归,感知器是最简单的线性分类器,现在实际应用比较少,但它是神经网络、 深度学习 的基本单元。 线性函数拟合数据并基于阈值分类时,很容易受噪声样本的干扰,影响分类的准确性。逻辑回归(Logistic Regression)利用sigmoid函数将模型输出约束在0到1之间

设计模式--- 模板方法模式

半城伤御伤魂 提交于 2020-03-24 09:43:26
故事背景:考题抄错会做也白搭 1. 概述   定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 2. 模式中的角色   2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。   2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。 3. 模式解读   3.1 模板方法类图    3.2 模板方法模式代码实现 /// <summary> /// 抽象类 /// </summary> public abstract class AbstractClass { // 一些抽象行为,放到子类去实现 public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); /// <summary> /// 模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,它们推迟到子类去实现。 /// </summary> public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine("Done the method."); } }

设计模式 - 模板方法模式

╄→гoц情女王★ 提交于 2020-03-24 09:42:04
1. 概述   定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 2. 模式中的角色   2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。   2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。 3. 模式解读 3.1 模板方法类图    3.2 模板方法模式代码实现 /// <summary> /// 抽象类 /// </summary> public abstract class AbstractClass { // 一些抽象行为,放到子类去实现 public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); /// <summary> /// 模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,它们推迟到子类去实现。 /// </summary> public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine("Done the method."); } } /// <summary> ///

递归算法题(兔子)

不打扰是莪最后的温柔 提交于 2020-03-24 09:05:22
问题: 古典问题:3个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子, * 假如兔子都不死,问每个月的兔子总数为多少? 代码: import java.util.Scanner; public class Else {   public static void main(String[] args) {     int n=new Scanner(System.in).nextInt();     int totle = 2;     System.out.println(digui(n)*2);   }   private static int digui(int n) {     int totle = 1;     if (n==1||n==2) {       totle = 1;     }     if (n>2) {       totle = digui(n-1)+digui(n-2);     }     return totle;   } } 来源: https://www.cnblogs.com/-rainbow-/p/7410830.html

推荐系统实践读书笔记与思考

天涯浪子 提交于 2020-03-24 06:24:43
推荐系统评测 一个网站3各参与方,用户、网站、内容提供方,好的推荐系统目标就在增加用户与网站互动,提高网站收入(这是公司最关注的),所以在推荐系统中需要综合考虑三方的利益。 在进行推荐时要注重用户体验并且也要考虑相关商家的利益,最终能使得网站收入提升。 在推荐系统早期,预测准确度是推荐系统的重要指标,这个指标的好处就是比较容易通过离线计算来得到,这样方便对不同推荐算法的研究。 准确预测并不代表好的推荐,比如用户已经打算买某个item ,无论系统是否给他推荐,他都准备买,对于用户来说他觉得推荐不够新颖,对于服务提供商来说没有增加潜在消费者中的销量,从实际效果来说这是一个比较失败的推荐。为了全面评测三方利益,从不同角度提出了很多评价指标。 推荐系统中实验方法 1. 离线实验 离线实验步骤比较简单,通过日志数据获取用户的行为数据,并按照一定格式来生成数据集;将数据集按照一定规则切分成训练集与测试集;在训练集上训练模型,在测试集上进行验证,通过指定的评价指标进行算法效果的评估。 这个方法的主要缺点就是:无法获取商业上关注的指标,如点击率,PV,VU,转化率等。但是优点也是非常明显的:不需要实际系统中控制权、不需要真实线上用户的参与、速度快可以进行大量算法的测试工作。 2. 用户调查 如果需要准确评价一个算法需要上线测试,但是如果对算法不是很有把握的时候,上线测试有比较大的风险

MD5算法分析

て烟熏妆下的殇ゞ 提交于 2020-03-24 06:13:19
1、 MD5是什么? MD5即Message-Digest Algorithm 5(消息摘要算法第五版)的简称,是当前计算机领域用于确保信息传输完整一致而广泛使用的散列算法之一(又译哈希算法、摘要算法等),主流编程语言普遍已有MD5的实现。 2、 什么是散列算法? 在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的“散列”或“消息摘要”(Message digest)。 3、 散列函数的基本特性 散列函数必须具备两个基本特征:单向性和碰撞约束。 3.1、单向性是指其的操作方向的不可逆性,在散列函数中是指只能从输入推导出输出,而不能从输出计算出输入; 3.2、碰撞约束是指不能找到一个输入使其输出结果等于一个已知的输出结果 或者不能同时找到两个不同的输入使其输出结果完全一致。 一个函数只用同时严格的具备了这样的特性,我们才能认可这样的一个HASH。 4、单向性的典型运用: 4.1、密码加密 利用散列函数的单向性,我们能够实现口令,密码等安全数据的安全存储。密码等很多关键数据我们需要在数据库中存储,但是在实际运用的过程中,只是作比较操作,因此我们可以比较HASH结果。 5、碰撞约束的典型运用: 5.1、用做字典的键(可哈希)

进程调度算法总结

五迷三道 提交于 2020-03-24 03:43:52
FCFS(First come first serve)先来先服务算法: 简单的排队算法,维护一个队列,后来的只能排在队尾等待。 非抢占。 缺点:不够智能,对于cpu密集型进程不友好,比如:一个只需要1ms运行时间的cpu密集型进程,但是之前有一个要读5s的io密集型进程。那么即使那个cpu密集型进程只需要运行1ms,但是必须等待足足5s才能运行! SJF(Shortest job first)最短作业优先: 这种算法假设我们可以预测每个进程需要运行的时间。比如有5个进程,分别运行时间是:1,3,2,5,1。 这个算法顾名思义,先取需要最短运行时间的进程来运行,所以执行顺序就是:1,1,2,3,5。其实就是算法里的贪心法。 SJF调度是最优调度(贪心法),但问题是怎么预测运行时间呢?所以其实这个算法只能作为比较,无法真正实现。 非抢占。 SJF算法还有一个变种:最短剩余时间优先。是选择剩余运行时间最少的进程来调度,所以这个算法是 抢占的 。 RR(Round robin)轮转调度: 每个进程被分配一个时间片,一般为20~50ms。每个进程只能最多使用一个时间片的时间,如果没用完时间片就运行完毕,那么可以直接调度下一个进程;如果用完了时间片还没运行完毕,系统会把该进程重新放到队尾。 时间片的选择是有要求的,因为在切换进程的时候要进行上下文切换。如果上下文切换的时间不比一个时间片小多少