Dijkstra搜索算法原理及其程序实现
前言本文算是我学习这个算法的学习记录,因此我会更加侧重于程序实现的讲解,因为原理相关的内容我已经非常熟悉了,并且Dijkstra算法需要有一定图论相关的知识,不过没必要完全系统地学会,只需要知道无向图,有向图,邻接矩阵相关的概念就行了。
下面我将会以在图中寻找一个节点(称为“源节点”)到所有其它节点的最短路径的例子进行讲解,在文章的末尾将给出程序完整的Python与C++实现
基础知识下面的相关知识,是你在编程前必须要知道的
Dijkstra 算法从指定的节点(源节点)出发,寻找它与图中所有其它节点之间的最短路径。
Dijkstra 算法会记录当前已知的最短路径,并在寻找到更短的路径时更新。
一旦找到源节点与其他节点之间的最短路径,那个节点会被标记为“已访问”并添加到路径中。
重复寻找过程,直到图中所有节点都已经添加到路径中。这样,就可以得到从源节点出发访问所有其他节点的最短路径方案。
Dijkstra 只能用在权重为正的图中,因为计算过程中需要将边的权重相加来寻找最短路径。
Dijkstra算法可以看成是贪心策略与广度优先算法的结合,在每一次节点扩散的时候,都需要进行 ...
Windows的cmd使用Linux类命令
前言我在使用Vscode编写C/C++代码的时候,经常会用到Shell(你可以理解为命令行),但是我不得不说Windows下Dos命令极其难用且拉跨😩,于是!!🤓🤓我就在想能不能在Windows的命令提示符或者PowerShell下直接使用Linux的命令,然后我就在中文互联网上疯狂的搜索(💩里淘金)
存在的问题在中文互联网上搜索问题,通常都会得到以下的结果
他们给出的结果,无非就是
使用WSL或者是在虚拟机里面使用Linux
个人评价:可真是个小天才呢😅,这样我为啥不直接用Linux呢?还折腾那么多干嘛
使用Git Bash或者Cygwin
个人评价:太丑
更让我觉得好笑的是,这些文章都是搬的外网的一个博主的文章4 Ways to Run Linux Commands in Windows (itsfoss.com),搜索引擎一排下去都是差不多的内容,这还是在我屏蔽了csdn相关结果的情况下(关于如何屏蔽csdn的搜索结果可以看我的另一篇文章),可见要想在中文互联网找到解决自己需求的方法有多困难。
解决方法综上所述,经过我的一般探索,找到了一个可以在W ...
屏蔽csdn搜索结果的方法
前言鉴于你对知识质量的渴望,以及对挖掘知识金子的欲求,你一定想在浏览器结果中去除有关Csdn的全部内容😈**(确信)**,但是当你在用bing或者google搜索有没有可以屏蔽CSDN搜索结果的方法时,通常会有以下的结果,这些方法我基本上都尝试过,而且没啥用处,因此下面我分享一个确实有用的方法给大家。
效果图老规矩,我喜欢在看一系列繁琐的步骤前先看看效果,这样我才有继续看下去的欲望,相信大多数人都是这样想的😝
假设你非是不信邪,尝试通过在地址栏直接通过csdn的官网进行访问,会得到下面的结果
步骤
至少拥有一个脚本管理器,比如tampermonkey,安装后可以在浏览器的扩展选项卡中查看是否安装成功
下载屏蔽脚本Fuck CSDN (greasyfork.org)
打开tampermonkey,如何有相应的图标说明就安装成功了
尝试在搜索栏搜索相关内容,就能发现脚本将所有csdn相关的内容都隐去了
注:这个脚本只支持 Google / Baidu / Bing / 360 搜索,对于一些不常用的搜索引擎是没用的
脚本原理分 ...
bash常用快捷键
前言Linux的shell使用中有很多快捷键,可以帮你免去使用鼠标,这样会更高效,但是快捷键有很多,全部记住是不可能的,因此我会把比较常用的快捷键用加粗的字体区分开来
编辑命令
Ctrl + a :移到命令行首
Ctrl + e :移到命令行尾
Ctrl + f :按字符前移(右向)
Ctrl + b :按字符后移(左向)
Alt + f :按单词前移(右向)
Alt + b :按单词后移(左向)
Ctrl + xx:在命令行首和光标之间移动
Ctrl + u :从光标处删除至命令行首
Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Alt + d :从光标处删除至字尾
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符
Ctrl + y :粘贴至光标后
Alt + c :从光标处更改为首字母大写的单词
Alt + u :从光标处更改为全部大写的单词
Alt + l :从光标处更改为全部小写的单词
Ctrl + t :交换光标处和之前的字符
Alt + t :交换光标处和之前的单词
Alt + Backspace:与 Ctrl ...
mysql+php+html实现学生管理系统
前言本文使用Mysql+php+html实现一个简单的学生管理系统,实现了登陆,注册,总览学生信息,添加学生,查询特定的学生,删除指定的学生等功能。并且本文仅用来学习,因为在实际开发中都会使用框架比如前端的vue.js,后端用的springboot,使用这些框架能大幅提高开发效率,避免重复造轮子,所以你没必要非得用基础技术去造航空母舰。🙂
开发平台
Phpstudy/PhpEnv:我个人比较推荐phpEnv-专业优雅强大的php集成环境,毕竟Phpstudy太老了,PhpEnv界面操作简单,集成度高,免去配置Mysql数据库,Apache服务器的繁琐操作,直接就能使用。
Visual studio code:写代码的编辑器,你用自己喜欢的也行。
DataGrip:数据库的GUI管理工具,可以用图形化界面编写sql语句。
依赖项版本要求想要复刻我的代码,使用的软件版本尽量跟我开发的时候写的保持一致,不同的版本会导致兼容性的问题导致报错
Mysql:5.5.53
php:5.5.38
apache:不限
文章编写都是采用GBK编码,这个要注意
功能展示功能简要来说就是 ...
9.神经网络
人工智能文章系列
第1章:AI绪论与概述
第2.1章:知识表示
第2.2章:知识图谱
第3章:确定性推理
第4章:不确定性推理方法
第5章:搜索求解策略
第6章:专家系统
第7章:群智能算法
第8章:机器学习概述
第9章:神经网络
概述本章主要介绍人工神经网络的基本概念,以及几种重要模型,包括“单层感知机、两层感知机、多层感知机”等。
在此基础上,介绍两种重要的基础神经网络“Hopfield神经网络、BP神经网络”。
最后,着重介绍了深度学习中最常用的“卷积神经网络”。
人脑结构人脑由一千多亿(1011亿-1014 亿)个神经细胞(神经元)交织在一起的网状结构组成,其中大脑皮层约140亿个神经元,小脑皮层约1000亿个神经元。
人脑构造
大脑-皮层(cortex)
中脑(midbrain)
脑干(brainstem)
小脑(cerebellum)
人脑神经元结构人脑的神经元:约有1000种类型,每个神经元大约与103-104个其他神经元相连接,形成极为错综复杂而又灵活多变的神经网络。
工作状态:
兴奋状态:细胞膜电位 > 动作电位的阈值 → 神经冲动
抑制状态:细胞膜电位 ...
8.机器学习概述
人工智能文章系列
第1章:AI绪论与概述
第2.1章:知识表示
第2.2章:知识图谱
第3章:确定性推理
第4章:不确定性推理方法
第5章:搜索求解策略
第6章:专家系统
第7章:群智能算法
第8章:机器学习概述
第9章:神经网络
概述本章主要介绍的机器学习的概念、发展历程、发展趋势、相关应用,着重拓展机监督学习和无监督学习的相关知识。
重点:机器学习的定义和应用;
难点:机器学习算法及分类。
机器学习 - 重要性
MachineLeaning出现前自从50年代以后,AI的发展就磕磕碰碰,没达到足够震撼从早期的逻辑推理,到中期的专家系统,这些科研进步确实使我们离机器的智能有点接近了,但还有一大段距离
MachineLeaning出现后直到机器学习诞生以后,人工智能界感觉终于找对了方向。基于机器学习的图像识别和语音识别在某些垂直领域达到了跟人相媲美的程度。机器学习使人类第一次如此接近AI的梦想。
机器学习 - 类比人脑思考与决策机器善于处理数据不断提高性能
人类学习利用经验不断提高性能
思考:能否把“经验”变成数据,让机器可以“模仿”人类进行学习?
机器学习 - 何谓智慧人类区别于其 ...
7.群智能算法
人工智能文章系列
第1章:AI绪论与概述
第2.1章:知识表示
第2.2章:知识图谱
第3章:确定性推理
第4章:不确定性推理方法
第5章:搜索求解策略
第6章:专家系统
第7章:群智能算法
第8章:机器学习概述
第9章:神经网络
概述受自然界和生物界规律的启迪,人们根据其原理模仿设计了许多求解问题的算法,称为 “生物智能算法”,属于典型的元启发式随机优化方法。
主要包括“进化算法、群智能算法”两类。
遗传算法(重点):提供了进化算法的框架,然后介绍几种比较典型的改进遗传算法及其应用。
群体智能算法(次重点):包括“粒子群算法、蚁群算法”等。
进化算法EA - 定义、起源思想、应用定义:进化算法(evolutionary algorithms)是一种基于自然选择和遗传学机理等生物进化机制的一种搜索算法,非常适用于处理“传统搜索方法”难以解决的“复杂和非线性优化问题”。
起源思想:以达尔文的进化论思想为基础,通过模拟生物进化过程与机制,而实现求解问题的自组织、自适应的人工智能技术。
进化算法EA - 生物学背景大自然有种神奇的力量,生物通过进化,能够将优良的基因保留下来,从而进化出更 ...
6专家系统
人工智能文章系列
第1章:AI绪论与概述
第2.1章:知识表示
第2.2章:知识图谱
第3章:确定性推理
第4章:不确定性推理方法
第5章:搜索求解策略
第6章:专家系统
第7章:群智能算法
第8章:机器学习概述
第9章:神经网络
概述本章主要介绍专家系统的概念、原理,创建过程,并补充知识发现与数据挖掘内容
重点:专家系统的工作原理和体系结构,知识获取的过程和模式
难点:如何设计和创建专家系统
AI第2次高峰(60年代) - 费根鲍姆1968年,爱德华·费根鲍(Edward Feigenbaum)提出首个专家系统DENDRAL,并对知识库给出了初步定义,这也孕育了后来的第二次人工智能浪潮。
该系统具有非常丰富的化学知识,可根据质谱数据帮助化学家推断分子结构。
专家系统(Expert Systems)是AI的一个重要分支,同自然语言理解,机器人学并列为AI的三大研究方向。
定义:使用人类专家推理的计算机模型来处理现实世界中需要专家作出解释的复杂问题,并得出与专家相同的结论。
可视作“知识库(knowledge base)”和“推理机 (inferencemachine)” 的结合。
...
5搜索求解策略
人工智能文章系列
第1章:AI绪论与概述
第2.1章:知识表示
第2.2章:知识图谱
第3章:确定性推理
第4章:不确定性推理方法
第5章:搜索求解策略
第6章:专家系统
第7章:群智能算法
第8章:机器学习概述
第9章:神经网络
概述本章首先介绍搜索求解的概念、重要性、分类、应用场景;然后对搜索进行形式化描述;最后介绍两类搜索,即盲目搜索和启发式搜索,为后面介绍智能算法奠定基础。
搜索的定义与重要性
人工智能经典三大基本技术为:知识表示、推理、搜索策略。
搜索定义:根据问题的实际情况寻找可用知识,并利用已知条件(知识),构造出一条代价较小的推理路线,寻求解决问题的办法的过程。
重要性:搜索直接关系到智能系统的性能与运行效率;搜索技术渗透在各种人工智能系统中。专家系统、自然语言理解、自动程序设计、模式识别、机器学习、信息检索和博弈等领域都广泛使用搜索技术。
搜索应用场景 - 案例
博弈游戏(五字棋等)
旅行路径规划问题
芯片布线问题
机器人导航问题
蛋白质设计问题
…
汽车导航(路径规划)
搜索问题 - 案例(京东物流亚洲一号)京东物流亚洲一号(无人仓储)
无人仓:2018年 ...