算法

Java知识之JVM

…衆ロ難τιáo~ 提交于 2020-02-03 21:22:31
类加载器 类装载器ClassLaoder负责加载class文件,class文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则有Execution Engine决定虚拟机自带的类加载器 引导类加载器 这个类加载使用C/C++与亚伯实现的,嵌套在JVM内部,它用来加载Java的核心库(JAVA_HOME/jre/lib/rt.jar、resources.jar或sun.boot.class.path路径下的内容),用于提供JVM自身需要的类 并不继承自java.lang.ClassLoader,没有父加载器 加载扩展类和应用程序类加载器,并指定未他们的父类加载器,处于安全考虑,Bootstrap启动类加载器只加载包名未java、javax、sun等开头的类 扩展类加载器 Java语言编写 派生于ClassLoader类 父类加载器为启动类加载器 从java.ext.dirs系统属性所指定的目录中加载类库,或从JDK的安装目录的jre/lib/ext,子目录下加载类库。如果用户创建的JAR放在此目录下,也会自动由扩展类加载器加载 应用类加载器 java语言编写 派生于ClassLoader类 父类加载器为扩展类加载器

算法图解

瘦欲@ 提交于 2020-02-03 19:34:57
狄克拉斯特算法 找出两个点之间的耗时时间最短路径 步骤 找出耗时最短的节点 更新该节点的邻居开销,检查是否存在到邻居节点的最短路径 重复过程,直到对图中每个节点都这么做 计算最终路径 第一步:找出耗时最短的点,站在起点前往A需要6分钟,前往B需要2分钟。终点假设无穷大。 第二步:计算节点B前往各个邻居所需的时间。找到一条耗时更短的路径父节点改为B只需要5分钟。 前往终点的时间缩短为7分钟。 第三步:重复 重复第一步,找出最短时间内前往的节点。对节点B执行了第二步。除节点B外,可以最短前往A为5. 重复第三步:更新A的邻居节点 最后到终点为6分钟 狄克斯特拉算法只适合有向无环图 负权边不能使用狄克拉斯特算法 例: 采用狄克拉斯特算法首先处理海报这个节点,处理完成后不再处理海报,而处理唱片的时候导致到达海报节点的父节点再次改变,然而已经无法改变海报节点,以至于后面的耗时最短路径与实际不符 来源: CSDN 作者: hello妈耶儿 链接: https://blog.csdn.net/V2636011127/article/details/104157205

# 2017-2018-1 20155324 实验五 通信协议设计

被刻印的时光 ゝ 提交于 2020-02-03 12:54:09
2017-2018-1 20155324 实验五 通信协议设计 任务一 在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业 实验步骤 安装~OpenSSL~ OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。 前往OpenSSL官网,下载OpenSSL源码,下载压缩包“openssl-master.zip 在Linux下使用~unzip openssl-master.zip~命令解压 进入源代码目录~cd openssl-1.1.0-pre1~ 使用如下命令进行安装: $ ./config $ make $ make test $ make install 编写一个测试代码test_openssl.c: #include <stdio.h> #include <openssl/evp.h> int main(){ OpenSSL_add_all_algorithms(); return 0; } 使用~gcc -o test_openssl test_openssl.c -L/usr/local/ssl/lib -lcrypto -ldl -lpthread~命令编译,生成“test_openssl”可执行文件

KNN算法实现数字识别

落花浮王杯 提交于 2020-02-03 11:59:12
KNN算法介绍 KNN算法(K-NearestNeighor Algorithm) 是一种最简单的分类算法。 算法核心: 假设在一个二维坐标平面中已经有了 \(n\) 个点,每个点的颜色已知,现在给定查询点 \(p\) 的坐标 \((x,y)\) ,判断 \(p\) 的颜色。 对于已知的 \(n\) 个点,计算每个点和点 \(p\) 的欧几里得距离: \[dis_i=\sqrt{(x_i-x)^2+(y_i-y)^2}\] 按照 \(dis\) 从小到大排序,选择距离最近的前 \(k\) 个点,在这前k个点中统计颜色出现次数最多的点,则点 \(p\) 的颜色就被划分为该点的颜色。 数字识别的实现 已有的数据集(TraingData): 若干份txt文件,每份txt文件都是32*32的01矩阵,代表对应的数字,下图中的矩阵就是数字0: 若干份txt文件,是测试数据集,用于校验算法的正确率。 算法流程: 将32x32的矩阵转换成1x1024的向量 计算输入的数据向量和所有的训练集向量的欧几里得距离。 按照欧几里得距离排序,选前K近的,选择出现次数最多的作为数字。 计算正确率 代码: import numpy as np import os import operator #返回inputdata所属的种类 def KNN(inputdata,TrainingSet,lable,k):

Navigation:costmap是什么?

怎甘沉沦 提交于 2020-02-03 11:55:16
costmap是什么? costmap翻译过来是代价地图的意思。由SLAM算法生成栅格地图。我们为栅格地图中的每一个栅格分配一个代价值,这样就形成了costmap。路径规划算法则可以在具有代价的栅格地图上生成路径。不同的代价值将生成不同的路径。为了生成合适的路径,我们需要为每个栅格分配合适的代价值。最开始想到的是在单层的costmap中更新每个栅格的代价,然后直接给路径规划算法。但这样会引起诸多问题。比如因为所有的数据都在同一个costmap中更新,任何一个数据的变动都需要拿到之前其他的数据重新一起计算代价值。比如数据更新的地图范围也不好确定。比如当数据类型多了之后,数据整合的顺序不好控制。 后来想到将单层的costmap分成多层是个好办法。如上图所示,一层costmap只用同一种数据来更新。比如最底层的static map就是SLAM算法生成的静态地图。使用静态地图数据生成一层costmap。Obstacles 层则是由传感器数据更新的costmap层。甚至可以根据某些特殊目的自定义一个costmap层,使生成的路径规避某些区域。这在单层的costmap算法中是很难实现的。最后将所有的costmap层按特定的顺序组合起来形成了layered_costmap。可以看到这是一种更为灵活,扩展性也更强的方法。 ROS中的costmap_2d功能包 costmap

设计模式之策略模式

Deadly 提交于 2020-02-03 08:40:41
参考博文:https://www.cnblogs.com/lewis0077/p/5133812.html 侵权删除 2019-06-17 11:39:49 策略模式(Strategy) 什么是设计模式 : 定义了 一系列的算法(多种实现子类) ,并将每一个算法 封装(通过父类策略引用访问具体子类的算法) 起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立。(客户端和具体算法均依赖抽象的策略) 优点: 符合设计模式中的开闭原则(在不修改既有代码的基础上扩展功能)。 适用性: 一个需求有多种不同算法的场合。(不固定的 if-else 场合一般是策略模式的用武之地) 基本代码如下: 1 //接口或抽象类,策略接口 2 public interface Strategy{ 3 //定义抽象的算法方法 4 public void algorithMethod(); 5 } 1 //具体的策略1实现 2 public class ConcreteStrategy1 implements Strategy{ 3 public void algorithmMethod(){ 4 //........具体策略1的方法体 5 } 6 } //具体的策略2实现 public class ConcreteStrategy2 implements Strategy{ public

中级算法之数组和字符串:矩阵置零

五迷三道 提交于 2020-02-03 08:28:38
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ] 进阶: 一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。 你能想出一个常数空间的解决方案吗? O(mn)的额外空间办法是重开一个数组进行存储,这里不做赘述 我自己想到的是O(m+n)的方式,开两个数组分别存为0的行和列。 void setZeroes(vector<vector<int>>& matrix) { set<int> row, col;//分布存储要置零的行和列 for (int i = 0; i < matrix.size(); i++) { for (int j = 0; j < matrix[i].size(); j++) { if (matrix[i][j] == 0) { row.insert(i); col.insert(j)

C++ STL初识

假装没事ソ 提交于 2020-02-03 02:15:39
文章目录 STL的诞生 STL的基本概念 STL六大组件 STL中容器、算法、迭代器 容器: 算法 迭代器 STL的诞生 长久以来,软件界一直希望建立一种可重复利用的东西 C++的 面向对象 和 泛型编程 思想,目的就是 复用性的提升 大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量的重复工作 为建立数据结构和算法的一套标准,诞生了 STL STL的基本概念 STL(Standard Template Library, 标准模板库 ) STL广义上分为: 容器(container)算法(algorithm)迭代器(iterator) 容器 和 算法 之间通过 迭代器 进行无缝连接 STL几乎所有的代码都采用了模板类或者模板函数 STL六大组件 容器,算法,迭代器,仿函数,适配器,空间配置器 容器:各种数据结构,如vector,list,deque,set,map等,用来存放数据 算法:各种常用的算法,如sort、find、copy、for_each等 迭代器:扮演了容器与算法之间的胶合剂 仿函数:行为类似函数,可作为算法的某种策略 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西 空间配置器:负责空间的配置与管理 STL中容器、算法、迭代器 容器: STL容器就是将 运用最广泛的一些数据结构 实现出来。 如:数组、链表、树、栈、队列、集合、映射表等 这些容器分为

扩展欧几里得算法及应用

落爺英雄遲暮 提交于 2020-02-03 01:38:16
欧几里得算法 即利用辗转相除法求最大公因数 ll gcd ( ll a , ll b ) { return b == 0 ? a : gcd ( b , a % b ) ; } 裴蜀定理(贝祖定理) 若a,b是整数,那么一定存在整数x,y,使ax+by=gcd(a,b)成立 重要推论:a和b互质的充要条件是存在整数x,y,有ax+by=1 扩展欧几里得算法 扩展欧几里得算法又称exgcd,就是利用欧几里得算法,求出贝祖定理ax+by=gcd(a,b)的整数解 证明: ∵gcd(a,b)=gcd(b,a%b),gcd(b,a%b)=bx+(a%b)y ∴a 1 x 1 +b 1 y 1 =gcd(a 1 ,b 1 )=gcd(b 1 ,a 1 %b 1 )=b 1 x 2 +(a 1 %b 1 )y 2 令a 2 =b 1 ,b 2 =a 1 %b 1 ∴a 1 x 2 +b 2 y 2 =gcd(a 2 ,b 2 )=gcd(b 2 ,a 2 %b 2 ))=b 2 x 3 +(a 2 %b 2 )y 3 同理… 最后可化简为gcd(a n ,0)=a n x n +0*y n =a n 得到最后一组解为x n =1,y n =0 ∵a%b=a-a/b*b,其中a/b是计算机除法,不是数学意义的除法 在第一次我们化简的等式中有a 1 x 1 +b 1 y 1 =b 1 x 2 +

排序算法之冒泡排序

岁酱吖の 提交于 2020-02-03 01:23:31
交换排序 基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 冒泡排序 void Swap ( int * x , int * y ) { int tmp = * x ; * x = * y ; * y = tmp ; } void BubbleSort ( int * a , int n ) { int end = n ; //共n-1趟比较 while ( end > 1 ) { for ( int i = 1 ; i < end ; i ++ ) { if ( a [ i ] < a [ i - 1 ] ) { Swap ( & a [ i ] , & a [ i - 1 ] ) ; } } end -- ; } } 冒泡排序的特性总结: 1、时间复杂度:O(N^2) 2、空间复杂度:O(1) 3、稳定性:稳定 来源: CSDN 作者: ZD_012 链接: https://blog.csdn.net/ZD_012/article/details/104145300