最近啃了一遍吴伟民老师的<数据结构>,记录一些心得. 一种简洁的插入排序 : 1.重要概念 : 哨兵 1.在我们要排序的数组中,哨兵做为一个辅助的位置,一般是0下标的槽位做为哨兵 2.哨兵位置上记录的数据不是有效的数据,而是临时的数据,比如上面的 ‘ -1 ’就是一个临时数据,具体的怎么个‘临时’法,请看等下的排序过程分析 3.用哨兵的好处 : 在比较过程中,可以减少边界判断条件,无需判断下标是否小于0,书上的解释也将哨兵称为‘监视边界的哨兵’(请看稍后下方的演示) 4.坏处 : 占用了一个槽…
http://www.tuicool.com/articles/MfYjQfV 如何用70行Java代码实现深度神经网络算法 时间 2016-02-18 10:46:17  ITeye 原文  http://www.iteye.com/news/31357 主题 神经网络算法Java 对于现在流行的深度学习,保持学习精神是必要的——程序员尤其是架构师永远都要对核心技术和关键算法保持关注和敏感,必要时要动手写一写掌握下来,先不用关心什么时候用到——用不用是政治问题,会不会写是技术问题,就像军人不关…
算法提高 插入排序 时间限制:1.0s 内存限制:256.0MB  插入排序 问题描述 排序,顾名思义,是将若干个元素按其大小关系排出一个顺序.形式化描述如下:有n个元素a[1],a[2],-,a[n],从小到大排序就是将它们排成一个新顺序a[i[1]]<a[i[2]]<-<a[i[n]] i[k]为这个新顺序. 插入排序,顾名思义,是通过插入操作完成排序.其直觉和方法来源于打牌时安排牌的方法.每次摸起一张牌,你都会将其插入到现在手牌中它按顺序应在的那个位置.插入排序每一步都类似这个摸…
准备写个<STL 源代码剖析>的读书笔记,开个专栏.名为<STL 的实现>,将源代码整理一遍.非常喜欢侯捷先生写在封底的八个字:天下大事.必作于细.他在书中写到:"我开玩笑地对朋友说,这本书出版,给大学课程中的「数据结构」和「算法」两门授课老师出了个难题.差点儿全部可能的作业题目(复杂度证明题除外),本书都有了详尽的解答. 然而,假设学生可以从庞大的SGI STL源代码中干净抽出某一部份,加上自己的包装,做为呈堂作业,也足以证明你有资格获得学分和高分.其实.追踪一流作品并…
强化学习策略梯度方法之: REINFORCE 算法 (从原理到代码实现) 2018-04-01  15:15:42   最近在看policy gradient algorithm, 其中一种比较经典的算法当属:REINFORCE 算法,已经广泛的应用于各种计算机视觉任务当中. [REINFORCE 算法原理推导]  [Pytorch 代码实现] 该图像来自于:https://github.com/JamesChuanggg/pytorch-REINFORCE/blob/master/assets…
C#冒泡算法复习 冒泡算法的意思:每一趟找到一个最小或最大的数放到最后面,比较总数的n-1次(因为比较是2个双双比较的) 第一层循环表示进行比较的次数,总共要比较(数的)-1次 (因为比较是2个双双比较的) 第二层循环表示第几趟循环,趟数等于比较数-趟数(第二趟再少比较一次,因为第一趟后最小的在最后面了) using System; namespace test { class Program { public static void Main() { //冒泡算法的意思:每一趟找到一个最小或最…
php求和为s的两个数字(多复制上面写的代码,有利于检查错误)(由浅入深,先写简单算法,做题的话够用就行) 一.总结 1.多复制上面写的代码,有利于检查错误 2.一层循环就解决了,前后两个指针,和大了就后指针前移,和小了就前指针后移 3.由浅入深,先写简单算法,做题的话够用就行 4.php中的PHP_INT_MAX 二.php求和为s的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述:…
 http://blog.csdn.net/hustjoyboy/article/details/50721535 "如何用70行Java代码实现深度神经网络算法" 的delphi版本 2016-02-23 10:58 225人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. =====ann.pas源程序=================================== { by 阿甘 2016.2.23 参考自此篇文档如何用70行Java代码实…
区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的.这篇文章就是帮助你使用 Java 语言来实现一个简单的区块链,用不到 120 行代码来揭示区块链的原理! “用不到120行 Java 代码就能实现一个自己的区块链!” 听起来不可思议吧?有什么能比开发一个自己的区块链更好的学习实践方法呢?那我们就一起来实践下! 因为我们是一家从事互联网金融的科技公司,所以我们采用虚拟资产金额作为这篇文章中的示例数据.大家可以先为自己想一个数字,后面我们会用…
发现了大学时候写的计算器小程序,还有个图形界面,能够图形化展示表达式语法树,哈哈;) 只有200行Java代码,不但能够计算加减乘除,还能够匹配小括号~ 代码点评: 从朴素的界面配色到简单易懂错误提示,无不体现了"用户体验"至上的设计理念:代码异常处理全面合理.滴水不漏,代码缩进优雅大方,变量命名直观易懂:再结合长度适中简单明了的注释,程序整体给人一种清新脱俗之感.背后不难看出作者对学习的热爱以及对设计的苛求,工匠精神可见一斑,真可谓是大学数据结构学以致用的典范! 关于数据结构的干货,…
Java Virtual Machine  官方介绍 Java虚拟机规范官方文档 https://docs.oracle.com/javase/specs/index.html 其中以java8的为 https://docs.oracle.com/javase/specs/jvms/se8/html/index.html 看下官方的介绍的一节  The Java Virtual MachineJava虚拟机是Java平台的基石.是java实现硬件和操作系统的独立性(也就是无关性),生成极小体积的…
现在入行Java还来的及吗?未来该如何抉择? 最近有点迷茫了,互联网好像一夜之间进入了寒冬一样,到处都是就业难的样子,当然,不可否认的是,那些努力的大佬依旧是斩获多个offer,但是,窝就一个小镇做题家好吧,双非院校里一个还算比较自律的普通人,学了一段时间的前端,又学了一段时间的Java后端,目前正在做一个培训班的电商教程,挺突然的,一下子就迷茫了 一.考研? 不考虑,就算考研了也得找工作,互联网行业变化太快,没有工作经验和有3年工作经验的差别完全不一样,硕士比本科上限高一些这确实,但是我个人认…
基础学了太久,时间一长有些东西就可能记得不太清楚,俗话说得好,"好记性不如烂笔头",所以把基础中的基础-变量的声明和定义,从C到编译原理到C++,再到Java用烂笔头记录下来 最早在编程语言中认识声明和定义是在学C语言的时候... C语言中:如extern User user:extern int a;就是声明,变量的声明就是仅仅告诉编译器,声明的变量的存在,要预留一点空间,但并不为其分配内存.定义就是声明这个变量并真正在内存(堆或栈中)为此变量分配空间. 从编译原理上来说,声明就是仅…
Atitit.ati dwr的原理and设计 attilax 总结 java php 版本 1. dwr的优点相对于ajax来说..1 2. DWR工作原理1 3. Dwr的架构2 4. 自定义dwr还是native dwr2 5. ApiHandler的标准化method2 6. Invok..  Dwr.exe()2 7. api.jsp3 8. prj.Wxb distribu   api.jsp3 9. ----------code4 10. ApiHandler4 11. iocx5…
Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 3. 插件的俩种执行策略3 3.1. 必须手动接续,否则自动终止(推荐)3 3.2. 必须手动throw  stop ex终止,负责自动接续..4 4. 插件链的生成原理4 5. -------code4 6. 参考7 1. 微内核与插件的优点 但凡有生命力的产品,都是在扩展性方面设计的比较好的,因…
Atitit.Tree文件解析器的原理流程与设计实现  java  c# php js 1. 解析原理与流程1 1.1. 判断目录  ,表示服  dirFlagChar = "└├─";1 1.2. 剑豪制表符出现的位置与文件夹级别对应表1 1.3. 主要判读流程2 2. Tree结果2 3. Code----3 4. 结果5 1. 解析原理与流程 1.1. 判断目录  ,表示服  dirFlagChar = "└├─"; 其中-类似于剑豪的制表符是表示目录的..够…
c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一.连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 DB连接池HikariCP为什么如此快 原创: DermanYuan 攻城狮DermanYuan 3月19日 1.背景介绍 我们做过的项目中,只要连接数据库,就不可避免的使用数据库连接池,而且面试的时候,数据库肯定会被问到的.说到数据库就会问到连接池,大部分的业务码工,只…
原创文章出自公众号:「码农富哥」,欢迎转载和关注,如转载请注明出处! 堆基本概念 堆排序是一个很重要的排序算法,它是高效率的排序算法,复杂度是O(nlogn),堆排序不仅是面试进场考的重点,而且在很多实践中的算法会用到它,比如经典的TopK算法.小顶堆用于实现优先级队列. 堆排序是利用堆这种数据结构所设计的一种排序算法.堆实际上是一个完全二叉树结构. 问:那么什么是完全二叉树呢? 答:假设一个二叉树的深度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的结点…
排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序,8大的还有基数排序.各有各的版本,代码写法也各不相同.所以这里以整理思路为先,代码只是作为自己的一个备份. 搞清楚的概念:稳定排序和不稳定排序,就看序列中两个值相等的数,排完序之后的相对位置是否改变,如果改变了就不稳定. 内部排序和外部排序,只用到内存即可完成排序的就叫内部排…
今天来总结一下常用的内部排序算法.内部排序算法们需要掌握的知识点大概有:算法的原理,算法的编码实现,算法的时空复杂度的计算和记忆,何时出现最差时间复杂度,以及是否稳定,何时不稳定. 首先来总结下常用内部排序算法: 类别 名称 时间复杂度(默认最坏情况) 空间复杂度 稳定性 备注 插入排序 直接插入排序  O(n^2)  O(1) 稳定   插入排序 希尔排序  最坏O(n^2),平均O(n^1.3)  O(1) 不稳定    交换排序 冒泡排序  O(n^2)  O(1) 稳定    交换排序…
一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间.时间复杂度:O(n^2); 算法描述:     1.排序从第二个元素开始,第一个元素默认为有序的.     2.取出下一个元素(第一次取第二个,后面依…
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,适用于少量数据的排序,时间复杂度为O(n^2). 插入排序属于稳定排序. 插入排序不需要构造新的数据序列,而是在原有的数据序列中进行排序运算. void insertionSort(int* array, int length) { ; ; ; ; i < length; i++) { key = array[i]; j = i - ; ) && (array[j] > key)…
public static class SortExtention { #region 冒泡排序 /* * 已知一组无序数据a[1].a[2].--a[n],需将其按升序排列.首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变. * 再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变.再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值. * 这样处理一轮后,a[n]的值一定是这组数据中最大的.再对a[1]~a[n-1]以相…
B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子结点,则至少有两棵子树: ⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树: ⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A1,K2,…,Kn,An) 其中:Ki(i=1,2,…,n)为关键码,且Ki<Ki+1,  Ai 为指向子树根结点的指针(i=0,1,…,n),且指针Ai-…
一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69,  42" 我们从第二个数字开始,这个数字是27,我们的任务只要看看27有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较27和53,27比53小,所以我们就交换27和53,原来的排列就变成了"27, 53, 36, 15, 69, 42 " 接下来,我们看第3个数字有没有在正确的位置.这个数字是36,它的左边数字是53,36…
from http://blog.csdn.net/huang1024rui/article/details/49154507 P.NP.NPC和NP-Hard相关概念的图形和解释 一.相关概念 P: 能在多项式时间内解决的问题 NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题 NPC: NP完全问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的NP问题,即解决了此NPC问题,所有NP问题也都得到解决. NP hard:NP难问题…
插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列: (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: (3)如果该元素(有序序列)大于待插入元素(待排序列),将该元素后移一个位置: (4)重复步骤3,直到找到“有序序列”中某一元素小于或等于“待插入元素”的位置: (5)将待插入元素插入到该元素(有序序列)后面(i+1)的位置上; (6)重复步骤2~5,直到待排序列中没有元素. 例子实现步骤图: 最优时间复杂度:O(n) 最坏时间复杂…
A 比特手链 简单模拟 判断 贪心 叶姐要想哥赠送一串比特手链,这个手链由0和1组成.想哥买了手链B,无意间得知叶姐想要同样长度的手链A.想哥囊中羞涩,只能手工调整手链.他希望最少通过以下操作进行最少步骤把B变成A.注意:A != B  对于一个串S: 操作1--选择下标i,j,i != j:  ·result = S[i] & S[j]  ·S[i] = result & S[i]  ·S[j] = result & S[j] 操作2--选择下标i,j,i != j:  ·res…
对于现在流行的深度学习,保持学习精神是必要的——程序员尤其是架构师永远都要对核心技术和关键算法保持关注和敏感,必要时要动手写一写掌握下来,先不用关心什么时候用到——用不用是政治问题,会不会写是技术问题,就像军人不关心打不打的问题,而要关心如何打赢的问题. 程序员如何学习机器学习 对程序员来说,机器学习是有一定门槛的(这个门槛也是其核心竞争力),相信很多人在学习机器学习时都会为满是数学公式的英文论文而头疼,甚至可能 知难而退.但实际上机器学习算法落地程序并不难写,下面是70行代码实现的反向多层(B…
Dijkstar算法是荷兰数学家迪克斯屈拉(or迪杰斯特拉?)在1959年发现的一个算法.是现有的几个求带权图中两个顶点之间最短通路的算法之一.算是一个相当经典的算法了. 迪克斯屈拉算法应用于无向连通简单带权图中,求出顶点a 与z 之间的最短通路的长度.我感觉其算法精髓就是:找到第一个与a 最靠近的顶点,然后找第二个,续行此法,直到找到的顶点是z 为止.该算法依赖于一系列的迭代.通过在每次迭代中添加一个顶点来构造出特殊顶点的集合.在每次迭代中完成一个标记过程.在这个标记过程中,用只包含特殊顶点的…