算法
文章平均质量分 59
ZJE_ANDY
这个作者很懒,什么都没留下…
展开
-
深度优先搜索(DFS)和广度优先搜索(BFS)
一、深度优先搜索DFS和广度优先BFS的 区别:BFS是队列的思想。DFS是栈的思想。BFS思想:BFS是队列的思想。如下图:BFS从起点A,把A附近的点(B、C)先遍历,遍历完(B、C)入队,然后再以B为起点,遍历B点附近的未被遍历过的点。呈现扩散趋势。所以以下图为例,以A点为起点,BFS遍历的顺序是:[ A,B,C,D,E,F ]DFS思想:DFS是栈的思想。...原创 2020-04-28 23:07:40 · 614 阅读 · 0 评论 -
排序算法之归并排序(python3+Java)
原理:归并排序采用分而治之的原理: 一、将一个序列从中间位置分成两个序列; 二、在将这两个子序列按照第一步继续二分下去; 三、直到所有子序列的长度都为1,也就是不可以再二分截止。这时候再两两合并成一个有序序列即可。代码:def merge(left,rigth): res = [] i = 0 j = 0 ...转载 2020-04-16 21:28:58 · 257 阅读 · 0 评论 -
迪杰斯特拉Dijkstra算法求最短路径---python
一,迪杰斯特拉算法(Dijkstra)的局限性:由于迪杰斯特拉算法是贪心算法,只关注当前不关注远处,即他只会关注当前结点能连接到的边,却不关注远处连接不了的边,因此迪杰斯特拉算法并不能处理拥有负权边的情况,如下图所示:求从A到C的最短路径,若是Dijkstra算法,在A点时,只会关注A->C的边和A->B的边,由于3比4小,所以Dijkstra算法会选择从边权值为3的边走向...原创 2019-01-21 16:39:37 · 10425 阅读 · 3 评论 -
排序算法之希尔排序(java)
希尔排序是基于插入排序而改进的排序方法。它将数据分为多组,再对各组使用插入排序。分组依据是增量d,一般增量是 排序元素的长度/2,调用一次插入排序,再继续除2,再调用一次插入排序,再d/2.......直到d 希尔排序的时间复杂度为:O(n平方)思路:如有下列10个带排序元素:增增量d = 10/2 = 5,即每隔开5个元素的元素为一组,如下图:然原创 2018-04-20 16:05:12 · 285 阅读 · 0 评论 -
机器学习-----之KNN近邻算法(python3)
1.KNN算法思想2.实现KNN算法要提供的数据3.KNN算法核心程序4.KNN完整程序一,KNN算法思想KNN算法是用于判断一个物品是属于哪一类的算法。如要判断一电影(如电影A)是爱情片还是动作片,可以通过其接吻镜头和打斗镜头的次数来判断,设 x = 接吻镜头,y = 动作镜头。则形成一个坐标点(x,y)。而其他已定好类型的电影(例如10部电影---5部爱情片,5部动原创 2017-07-09 19:34:32 · 1103 阅读 · 0 评论 -
排序算法之快速排序
1.快速排序的思路2.代码1.快速排序的思路(从小->大)快速排序在开始时,都会取一个序列最左边的数作为一个key值,目的就是调整序列------把比key值小的数放到key的左边,比key大的数放到key的右边。然后再以key值的为止为界,key值位置以左的作为一个序列,key值位置以右的又作为一个序列,再在新序列中重复上面的操作。如: 0原创 2017-03-15 13:39:55 · 327 阅读 · 0 评论 -
排序算法之堆排序
堆排序比一般的排序算法略为复杂。1.什么是二叉堆?2.如何用数组描述一个二叉堆?3.如果构建最大堆或最小堆4.构建好最大堆或最小堆后,对堆的排序1.什么是二叉堆?二叉堆是完全二叉树或近似完全二叉树。而且任何父节点的键值都大于等于(或小于等于)任何一点子节点的兼职。父节点键值大等于他的子节点的键值为最大堆,父节点键值小于等于他的子节点的键值为最小堆。如下图,是原创 2017-02-10 19:38:45 · 467 阅读 · 0 评论 -
查找算法之折半查找(二分查找)
1.用折半查找的必须是有序的(即已经排好序的)2.优点:比较次数少,查找速度块3.缺点:要求待查表为有序表,而且插入困难4.适用于 不经常变动而且要频繁查找的有序表折半查找可以用2种方法实现,分别是 循环 和 递归。#include/*-----------循环实现二分法-------------------*/int binarysearch(int a[],i原创 2016-12-23 19:39:17 · 848 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序主要就四条语句:2个for循环,一个 if 判断,一个交换数值主要逻辑:每次 i 的定位,都定了数组每个位置的最佳数字,而 j 是负责帮 i 找最佳数字的#include#include#define N 5void swap(int *a,int *b);int main(){ int i,j; int num[N]={4,1,2,5,3}; /*---原创 2016-12-23 08:46:36 · 340 阅读 · 0 评论 -
排序算法之插入排序
插入排序就像是 打扑克牌时对牌的点数进行排序。假设要排序的数组有n+1个。a[0.....n ]插入排序先把待排序的数组分成两组,一组是已经排好序的,另一组是待排序的。一开始 a[0] 自成一组(暂时当排好序的组),然后在剩下的a[1.....n]中每次取一个元素出来跟排好序的组比较代码如下:#includevoid insert(int a[],int len){原创 2017-02-08 01:20:00 · 223 阅读 · 0 评论 -
排序算法之选择排序
选择排序核心思想 跟 冒泡排序差不多。冒泡排序做得比较多无用功,而选择排序相对较少。选择排序代码如下:#includevoid swap(int *a,int *b){ int t; t = *a; *a = *b; *b = t;}int main(){ int a[]={5,2,3,1,4}; int i,j,min,len; len = sizeo原创 2017-02-06 18:24:04 · 227 阅读 · 0 评论