算法

HDOJ Floyd算法

回眸只為那壹抹淺笑 提交于 2020-01-30 17:04:44
Target Floyd算法 HDOJ 2544 Point 复习Floyd算法,详细可见: 数据结构与算法基础–第11周08–6.6图的应用8–6.6.2最短路径3–Floyd算法 . 注意无穷大: 为何程序员喜欢将INF设置为0x3f3f3f3f . Code #include < iostream > #define inf 0x3f3f3f3f using namespace std ; int map [ 111 ] [ 111 ] ; //较大数组写成全局变量 int main ( ) { int n , m , i , j , k ; while ( cin >> n >> m && ( n || m ) ) { //initialize for ( i = 1 ; i <= n ; ++ i ) for ( j = 1 ; j <= n ; ++ j ) map [ i ] [ j ] = inf ; //input for ( i = 1 ; i <= m ; ++ i ) { int a , b , c ; cin >> a >> b >> c ; map [ a ] [ b ] = c ; map [ b ] [ a ] = c ; } for ( k = 1 ; k <= n ; ++ k ) { for ( i = 1 ; i <= n ; ++ i )

数学与算法

試著忘記壹切 提交于 2020-01-30 16:38:26
该好好学习点算法知识,发现很多企业用到的算法都是并不复杂的,创新解决实际问题。 程序等于数据结构+算法。除了哗众的互联网、大数据、机器视觉、大量统计数据,动不动给你5亿条数据的运营商类公司,看看这个世界,凡解决痛点问题的,那个是移动电信联通之类运营商做出来的。 小精痛点问题,有一些技术完全可能是初中 高中数学能解决掉的。例如思想林俊德利用机械原理计算原子弹爆炸力学。而很多利用电子仪器根本无法成功。很多企业的解决痛点技术问题的,例如电力、钢厂、煤矿、图像处理、三维军工一个简单实用的问题,甚至都用不到opencv、pcl等大型库,很多都是自己实现的巧思妙想。解决的问题高效实用。但一定多学习数学,一些想结合的知识。 (林俊德事迹[http://www.xinhuanet.com//science/2020-01/19/c_138711973.htm]) 来源: CSDN 作者: 调试错路的程序员 链接: https://blog.csdn.net/lydstory123/article/details/104111739

Inductive Representation Learning on Large Graphs阅读笔记

ⅰ亾dé卋堺 提交于 2020-01-30 16:03:04
1 摘要 在大图中,低维的节点表示在很多预测任务中都很有用,比如内容推荐和确定蛋白质的功能。但是,在训练嵌入时,现有的方法需要所有的节点都参与(也即现有的方法都是直推式的),不能很好地繁华到不可见的节点上。本文提出GraphSAGE,利用节点的特征信息(如文本属性)来有效地为不可见的节点生成嵌入。不是直接为每个节点训练唯一的嵌入,而是学习一个函数通过采样和聚合节点的邻居特征来产生节点的特征。 简介 节点嵌入方法的基本思想是利用降维技术从节点的邻居的高维信息中提取出一个稠密向量。这些节点嵌入可以作为下游任务的输入。以前的工作关注于嵌入单个固定的图中的节点,而很多实际应用需要很快地为不可见的节点甚至完全新的图生成嵌入。这种推断式的能力对于演化图或者不断遇到不可见节点的应用来说非常重要。推断式生成节点嵌入的方法还能促进跨图的泛化,比如,我们可以训练一个典型的有机体的PPI交互网络嵌入生成器,然后利用训练好的模型为新的有机体中的数据产生节点嵌入。 推断式的节点嵌入问题比直推式的要困难,因为泛化到不可见的节点时需要将新观察到的子图与算法已经优化的节点嵌入进行‘对齐’,推断式的框架必须能识别节点邻居的结构特征。 提出的方法:提出了推断式嵌入的一般框架GraphSAGE.不同于基于矩阵分解的方法,此方法利用节点特征(如文本属性,节点配置信息,节点的度)来学习一个嵌入方程以得出不可见节点的嵌入

数据结构与算法

我的梦境 提交于 2020-01-30 13:16:29
算法与数据结构 1.题目 洛谷 杭电 牛客网 leeCode 2.书籍 课本 刘汝佳 白皮书 算法导论 一.字符串 1.KMP算法 笔算next数组 如果数组是从1开始 max{前缀和后缀相等的长度} + 1 为当前字符的next值 如果数组从0开始 **max{前缀和后缀相等的长度}**为当前字符的next值 例如 a b a b c a b a i 1 2 3 4 5 6 7 8 k 0 1 1 2 3 1 2 3 kt -1 0 0 1 2 0 1 3 ​ 例如对于i = 5时 ​ 后缀为: b, ab, bab ​ 前缀为: a, ab, aba ​ 最大相同前缀为 ab,长度为2所以为 k = 3 同理, 如果下标从0开始就是kt。 代码 i = 0; j = next[0] = -1; //求每个字符的最大匹配的前后缀 while(i < s.length()){ if(T[i] == T[j] || i == -1){ i++; j++; next[i] = j; } else { j = next[j]; //回溯 } } 例如 : ​ i = 4, 5, *, *, 6 ​ j = 2, 3, 1, 0,1 优化 对于 aaaab, next[] = {0, 1, 2, 3, 4} 但是如果 2 失败,回溯到1仍旧失败,回溯到0还是会失败。

Java版本的DLX解决数独算法

元气小坏坏 提交于 2020-01-30 07:30:59
DLX又称作精确覆盖问题,而今天要说的就是把解数独这个问题转化为一个精确覆盖问题,然后来解决它。 其实这是一个很好的解决问题的思路,很多问题都可以转化为一个精确覆盖问题,然后用接下来这个算法来解决它。 关于DLX的思想,网上有不少的解释,这里我就不再赘述,我会在我的另一篇博客里讲解原理。 首先是整个代码的结构。 总共分为四个类,分别是: 主类(StartPoint) 转换器类(Transfer) 节点类(Node) 求解器类(Solver) 这就是我们的代码的主要结构,下面我们将展示代码的细节。 主类(StartPoint) 这是主类,也是整个程序的入口,负责从文件读取数据,调用各种其他类,然后输出结果到文件中,具体如下: package dLX ; import java . io . File ; import java . io . FileReader ; import java . io . FileWriter ; import java . io . IOException ; import java . util . Vector ; public class StartPoint { public static void main ( String [ ] args ) { // TODO Auto-generated method stub File input

零基础者学习编程真的难吗?看了这些帮你掌握正确学习方法

試著忘記壹切 提交于 2020-01-30 07:27:42
很多人觉得学编程难,大都是掌握方法,而不是能力、性别或其他原因。除了想达到行业顶级开发者的水平,如果你是想学编程,掌握了对的方法,就能学好。 个人通过题目描述分析,应该是学习方法不对,没有培养出编程的思维和能力,这是一个因果关系。 学习编程的过程,大致如下: 看书、看博客、学课程或者看视频等 模仿着书上或者博客的代码,进行复现,复现不重要,思考才是关键 ⚠️ 思考学习别人思路后,脱离书本和博客,完全自己实现功能 自己实现一些 DEMO,看别人项目代码,与别人讨论,提升代码能力 在别人的框架和要求下,写代码实现业务 自己负责别人设计的模块的实现 独立设计业务模块并开发实现 负责大项目框架设计和拆分,带领别人进行开发 其他高阶的架构和管理工作,已经不仅仅是代码能力了 感觉编程难,我在初学编程的时候也遇到过。刚刚学习编程会走很多弯路,想找一个合适的方法学习。有这样想法是值得鼓励的,至少是知道怎么学习更好。我本人有些参考经验,可以吸取适用自己的地方。 计算机重点在于用已有的知识搭构建功能,而构建功能的步骤是固定的,只是需要掌握牢基础知识,并且提升自己的思考能力。思考能力也算是程序员的核心了(不是看,不是写,而是思考,如果照着别人代码写同时带上了思考,那么也是有效果的)。我建议的学习方式如下: 学习基础知识: 数据结构,经典算法。可以根据学到的算法和数据结构解决书本习题后面的算法问题

K-近邻算法详解-1

泪湿孤枕 提交于 2020-01-30 07:08:53
K-近邻算法(k-neareast neighbor,kNN) ————(解决分类和回归问题的最基本算法之一) 核心思想:给定测试样本,基于某种距离度量找出训练集中与其最近的k个训练样本,然后基于这k个“邻居”信息进行测试集的预测。 下面分为3点和大家了解这个算法: 1.距离度量 如上述核心思想所述,我们需要找到测试集与其最近的k个数据之间的距离信息,然而距离的度量有很多种,下面给出几个常用的距离度量。 1.欧氏距离 2.曼哈顿距离 3.闵可夫斯基距离 2.K值的选择 选择K个与待测样本最近的样本,并认为K个已知样本中出现次数最多的类别即为待测样本的类别。 但是K值的大小的不同,待测样本的类别也会不同。如下图所示: 判断上图中长方形的类别,当K=3时,长方形的类别为三角形,当K=7时,长方形的类别为圆形。 K值越小,就意味着选择较小的领域的数据来判断待测数据的类别,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合。 K值越大,说明选择较大的领域的数据来判断待测数据的类别,K值越大,模型越简单 在应用中,K值一般选择一个较小的数值,采用交叉验证来选择最优的K值 3.分类决策规则 看待测样本的近邻那个类别的点最多,那么待测样本就属于哪个类别,也就是多数表决,也可以是加权投票,距离最近的样本的权重多一点,距离远的样本的权重小一点,通过加权投票最后判断待测样本属于哪个类别。

malloc 堆分配算法探析

别来无恙 提交于 2020-01-30 05:15:17
提到 C 语言不能不说内存管理,而内存管理则必须了解 malloc,今天深度学习了 malloc 的堆分配算法原理,笔记整理如下 什么是堆分配算法? 程序向操作系统申请一块适当大小的堆空间,然后由程序自己管理这块空间,而具体来讲,管理着堆空间分配的是运行库------也就是封装起来的 malloc 函数。运行库相当于向操作系统“批发”了一块较大的堆空间,然后“零售”给程序使用,当全部“售完”或程序有大量的内存需求时,再根据实际情况向操作系统“进货”。当运行库在向程序零售堆空间时,必须管理它批发来的堆空间,不能重复“出售”,导致地址冲突,于是运行库需要一个算法来管理堆空间,这个算法就是堆的分配算法。 常见的 malloc 分配算法三种: 空闲链表、位图、对象池 1. 空闲链表 空闲链表的方法实际就是把堆上各个空闲的块按照链表的方式连接起来,当用户需要一块空间时,遍历整个链表,直到找到合适的大小将他拆分;当用户释放空间则进行合并。 空闲链表的结构: 头 + 空闲块 头结构记录了上一个 [pre] 和下一个 [next] 空闲块的地址 如何利用这个结构分配空间? 首先在空闲链表中查找足够容纳请求大小的一个空闲块,然后将这个块分为两部分,一部分为程序请求的空间,另一部分为剩余下来的空闲空间。 释放空间的时候,只有一个指针,无法确定这个块的大小,如何释放 当用户请求 k 个字节空间的时候

C++ 常用查找算法

牧云@^-^@ 提交于 2020-01-30 04:52:34
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> using namespace std; #include <vector> #include <string> #include <functional> /* find算法 查找元素 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param value 查找的元素 @return 返回查找元素的位置 */ void test01() { vector<int>v; for (int i = 0; i < 10;i++) { v.push_back(i); } vector<int>::iterator pos = find(v.begin(), v.end(), 5); if (pos!=v.end()) { cout << "找到了数据:" << *pos << endl; } else { cout << "未找到" << endl; } } class Person { public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; } bool operator==( const Person&p) {

传智播客 机器学习基础 学习笔记

两盒软妹~` 提交于 2020-01-30 04:44:55
目录 我们应该怎么做 机器学习开发流程 机器学习模型是什么 机器学习算法分类 监督学习 无监督学习 回归问题 需明确几点问题: ( 1 )算法 是核心 ,数据 和 计算 是基础 找准定位 大部分复杂模型的算法设计都是算法工程师在做,而我们 • 分析很多的数据 • 分析具体的业务 • 应用常见的算法 • 特征工程、调参数、优化 我们应该怎么做 1. 学会分析问题, 使用机器学习算法的目的,想要算法完成何种任务 ● 2. 掌握算法基本思想,学会对问题用相应的算法解决 ● 3. 学会利用库或者框架解决问题 机器学习开发流程 机器学习模型是什么 机器学习算法分类 • 监督学习 • 分类 k- 近邻算法、贝叶斯分类、决策树与 随机森林、逻辑回归、神经网络 • 回归 线性回归、岭回归 • 标注 隐马尔可夫模型 ( 不做要求 ) • 无监督学习 • 聚类 k-means 监督学习 监督学习 (英语: Supervised learning ),可以由输入数据中学到或建立一个模型,并依此模式推测新的结果。输入数据是由 输入 特征值和目标值 所组成。 函数的输出可以是一个连续的值(称为回归) ,或是 输出是有限个离散值(称作分类) 。 无监督学习 无监督学习 (英语: Supervised learning ),可以由输入数据中学到或建立一个模型,并依此模式推测新的结果。输入数据是 由输入 特征值