
算法温习
決心
致力于解决实际问题
展开
-
数据结构基础学习笔记一——尾递归
首先什么是尾递归? 如果一个函数中所有的递归形式调用都出现在函数的末尾,我们称这个递归函数是尾递归的。换句话说,当递归调用是整个函数体中最后执行的语句,且它的函数值不属于表达式的一部分时,这个递归调用就是尾递归。——以上引用《算法精解:c语言描述》那么为什么要用尾递归呢?因为它快!因为它占用内存资源少。更详细的解释是这样:当编译器检测到一个函数调用是尾递归时,它就会覆盖当前的原创 2014-11-26 15:48:54 · 420 阅读 · 0 评论 -
再看二分搜索有感
晚上翻开《 编程珠玑》,看到第四章二分搜索的程序框架时,联系最近给公司搭建解析算法优化对比系统自己调试时,改掉的几个bug,才真正认识到编程前思考并且预先判定好逻辑框架的重要性。这里我说的逻辑框架不仅是整个系统的逻辑,更着重的是每个子逻辑的完整性。以前总是习惯一口气写完一个较大的功能再整体测试,但事实证明这种习惯很不好。相对的,步步为营,unit测试是更好的选择。而且,一次编写一个较大的功能时原创 2015-04-27 23:42:57 · 427 阅读 · 0 评论 -
读书笔记:机器学习实战(1)——章2的knn代码和个人改进与注释
最近在学习《机器学习实战》一书,受益匪浅,之前还看过本书《机器学习系统设计》也很不错,个人觉得前者更注重算法学习和白盒代码优化(原理理解),而后者更注重skit-learn 等工具包的黑盒使用,更重要的是会指导部分工具算法使用的调优trick,提到机器学习的trick调优,比如early-stoping等,《Neural networks and deep learning》中讲授了很多精华,但是目原创 2015-06-06 23:54:01 · 798 阅读 · 0 评论 -
程序时间复杂度计算(一)
最近休息的状态,所以将以前工作时纪录在“印象笔记”的较好的资料和以前自己的一些想法,逐步整理到博客里吧。一、概念 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0时,时间复杂度就是O(2^n); a=0,b<>0 =>O(n^3); a,b=0,c转载 2016-04-20 17:16:14 · 6555 阅读 · 0 评论 -
[java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
收藏一下,请直接点击原帖地址:http://blog.youkuaiyun.com/hpf911/article/details/9275583 这是《剑指Offer》中的一道题目,数组中的元素可能是正负,所以连续的子组求和,会变大也可能变小,解题时首先要求当前的和(初始值为0)和下一个元素求和后,如果是负的,那么重新置0和下下个继续求和,首先要找到使和增加的正的元素。然后有了当前最大的和后,纪录下来;继续累转载 2016-04-23 23:15:30 · 3688 阅读 · 0 评论 -
动态规划(java)
问题一:最大子组和问题 子组中的元素可能是正负或0,思路: 最大子组和就是所有可能的子组和中最大的,那么可能比较大的首先有一个初始值(0),然后如果有比初始值大的子组和,就用来替代当前的最大子组和,直到遍历结束再也没有比当前子组和更大的。 当子组和为负的时候,肯定不是我们期望的最大子组和的一部分,因为负的累积值和后续的子组元素的和,肯定小于后续子组元素的和。这时可以排除该子组和的元素,从使累计原创 2016-04-24 16:06:10 · 335 阅读 · 0 评论 -
二分查找(java)
1.注意对输入参数的正确性判断 2. int middle = left + ((right - left) >> 1),有效防止越界public class BinarySearch { public int binary_search(int array[],int len , int value) { if(array==null||array.length原创 2016-04-24 23:31:54 · 441 阅读 · 0 评论