关闭

从零开始学算法(七)最短路径之Bellman-Ford算法

前言             前面两篇文章,我们分别学习了Floyed-Warshall和Dijkstra算法。还有印象吗?这篇文章我们就来学习一下另一种最短路径的算法,Bellman-Ford算法和一些邻接表的知识。在上篇文章中学习的Dijkstra算法的时间复杂度是O(N*N),那有没有什么可以优化速度的方法呢?首先,这篇文章就先学习一下 通过邻接表来优化Dijkstra算法,然后再学习一下...
阅读(18) 评论(0)

android使用CMake进行jni编写遇到的一些问题

前言          android studio 2.2之后出的CMake 让jni的编写方便了很多,使用CMake让我们不在烦恼函数的定义,以前我们需要通过javah命令生成,jni规定的函数名,现在不需要了。他也让我们可以很方便的编写c/c++代码,自动打成so。总体来说,让我们的jni编写变得更简单。但是网上关于CMake的使用翻来覆去也就是官网的那些。所以我就记录一下自己在使用CMa...
阅读(243) 评论(0)

从零开始学算法(六)最短路径之Dijkstra算法

前言 在上一篇博客中,我们学习了最短路径系列的第一种算法Floyd-Warshall算法来求解图中点与点之间的最短路径的问题。这篇博客我们就要来学习一下,求解单源最短路径的一种算法:Dijkstra算法。 具体问题 还是几个城市间的最短路径问题,这次我们需要求的是1号顶点到其余个点的最短路径。路径图如下 "> 现在我们需要求解1号点到2、3、4、5、6号点的最短路径。 Dijk...
阅读(63) 评论(0)

从零开始学算法(五)最短路径之Floyed-Warshall算法

前言 算法中的最短路径问题,是一个经典的算法问题。旨在寻找图(由顶点和边组成)中顶点到顶点间的最短路径。而我们接下来的几篇文章就会一起学习最短路径问题中常用的Floyed-Warshall、Dijkstra、Bellman-Ford以及Bellman-Ford的队列优化这四种算法。这些最短路径的算法在实际运用中也有不可忽视的作用。接下来,我们就来学习一下Floyed-Warshall算法...
阅读(110) 评论(0)

从零开始学算法(四)搜索算法(二)(广度优先搜索)

前言 在上一篇博客中,我们学习了搜索算法的第一种:深度优先搜索,这篇博客就让我们一起来学习另一种大家都经常听见的搜索算法:广度优先搜索。看名字就知道,他们两者之间肯定有什么不可告人的秘密。广度优先搜索,又叫宽度优先搜索,英文名:Breadth First Search。属于一种盲目搜寻方法,目的是系统的展开并且搜索图中所有的点,以找寻结果。我们还是以上篇博客后面提到的那个迷宫地图的问题来详细...
阅读(78) 评论(0)

从零开始学算法(三)搜索算法(一)(深度优先搜索)之地图迷宫

前言 前面两篇文章,只是讲了一下算法的入门,排序算法和枚举算法,大家是不是觉得很简单呢?那么这篇文章,我们就有学习一下,稍微有点难度的,也是面试、笔试经常见到的名词。而常见的搜索算法就有,上篇文章中所介绍的穷举算法、以及本篇将要介绍的广度优先搜索、宽度优先搜索,以及暂时不会介绍的A*算法、回溯算法等,当然最高深的搜索算法,就是百度和google的看家本领了。那就不是我们现在能够理解的范围了,他们...
阅读(83) 评论(0)

从零开始学算法(二)枚举算法(穷举法)之火柴棍等式

前言 这是本系列的第二篇文章,从名字就可以看出,将要学习穷举算法,也叫枚举法,噫,有同学可能就要问了,穷举也算算法吗?当然算啦,别拿豆包不当干粮,拿乞丐不当江湖中人,事实上,江湖上很多鼎鼎有名的高手,就来自于天下第一大帮,丐帮。所以,枚举其实也是一种算法思想。现在我们就来学习神功的第二层,枚举算法 实际需求 "> 也就是火柴等式,比如 1 + 1 = 2,其中1是两根,+号是两根,=号是两...
阅读(88) 评论(0)

从零开始学算法(一)排序算法(桶排序、冒泡排序、快速排序)

前言 这些一个系列的文章,主要是自己学习算法和数据结构的一些笔记整理。从最简单开始,一步步深入,都是自己学习过程中的领悟。对于程序猿而言,算法和数据结构就像一门强大的内功,练的过程中,会比较难,相对于武学招式,需要更多的理解能力和悟性,但是一旦练成,那就能变身强大的武林高手,纵横武林,不再是梦想。本系列武林秘籍主要来自于个人学习《啊哈!算法》《算法导论》这两个算法的入门级书籍。所以,高手就不喜勿...
阅读(160) 评论(0)

SurfaceView的nativeUnlockCanvasAndPost 导致的没有任何错误信息的IllegalArgumentException

最近项目里面使用到了surfaceView,在子线程中进行页面绘制,但是出现了一个莫名其妙的bug,该Exception,没有什么信息,无从判断是什么原因导致的 "> 所以,需要我们去看看为什么会导致这样的问题,我们的代码是如下 if (mSurfaceHolder != null) { mCanvas = mSurfaceHolder.loc...
阅读(276) 评论(0)

由FragmentTabHost导致的Can not perform this action after onSaveInstanceState异常

这是开发中,用户反馈很多的一个exception。主要是Fragment的commit和commitAllowingStateLoss的问题,出现这种问题的原因很多,本次主要因为FragmentTabHost导致的该bug的发生 "> 完全没有,我们应用的我们熟悉的那些类的堆栈信息 ">     是不是,有种无从下手的感觉,因为没有我们自己写的类的信息,那我们需要从异常发生的地方,...
阅读(236) 评论(3)

okhttp、okio添加参数(addParams)出现的java.lang.IllegalArgumentException:Unexpected code point

这是我们项目,收集到的,用户出现过不少次的一个问题。根据堆栈发现是出现在用户修改自己的个人资料时出现的。 项目的网络框架用的是okhttp,在bugly上的样子如下图 "> 查看堆栈信息,找到抛出这个异常的地方,在okhttp的okio这个jar包的Buffer类中,的writeUtf8CodePoint()这个方法中 "> Buffer类的源码如下 @Override publi...
阅读(593) 评论(2)

Android的自定义View深入解析

前言 自定义View是每个Android开发人员,都必备的技能。当SDK提供的常规控件如TextView、Button等没法满足我们日常开发需求时候,就需要我们进行View的自定义。本文就从View的绘制过程、自定义View的分类、自定义View的自定义属性、Canvas的简单使用、View的事件分发体系、View的滑动冲突等几个方面,简单讲解一下,如何自定义一个我们想要的View。...
阅读(179) 评论(0)

Android的Handler部分原理的解析

前言 Handler是Android应用开发中最常用的线程间通信类,在Android应用开发甚至整个应用的运行中都有非常重要的重要。所以理解Handler的实现原理,是很有必要的一件事情。本文,会从Handler、Looper、MessageQueue等关键类的源码,分析Handler的主要原理。 一、Android的消息机制Handler Android的消息机制主要是指H...
阅读(76) 评论(0)

Android的动画理解与深入

在android开发中,动画能让我们做出各种各样酷炫的效果,然而,你真的懂动画吗?为什么有三种动画的分类?他们的实现原理是怎么样的?我们怎么样才能做出绚丽的动画效果?动画使用中有什么值得注意的地方?本文,就将进行以上问题的一些探讨。 一、Android的动画的分类 我们都知道Android的动画分成三种,补间动画(View Animation)、帧动画(Frame)、属性动画(Prop...
阅读(99) 评论(0)

Android中常见的内存泄露分析

前言 Android应用因为本身可用内存的限制,需要特别重视内存泄露的问题,本文总结了Android中常见的一些内存泄露原因及避免方式。 一、单例造成的内存泄露 由于单例的静态特性使得单例的生命周期和应用的生命周期一样长,这说明,如果一个对象已经不需要使用了,而单例对象还持有该对象的引用,那么该对象将不能被正常回收,这就导致了内存泄露。 例,如下的写法是我们...
阅读(175) 评论(0)
    个人资料
    • 访问:2631次
    • 积分:160
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    最新评论