- 博客(26)
- 收藏
- 关注
原创 关于编码的思考(unicode字符集和utf-8 utf-16)
1.unicode 字符集的前世今生 你可能有点疑惑,文章标题是说编码的问题,可是和字符集有什么关系? 别急,先想象一下有两个人,他们使用书信来交流。在 他们交流的过程中,必须将自己要表达的意思用相互都了解的规则转化为文字以让对方了解自己的想法。在写信中这个相互都了解的规则就是我们要说的字符集。 知道了字符集是什么,下面说下字符集有什么用:它将现实中的字符映射为逻...
2018-08-28 22:49:28
316
原创 数据结构与算法总结——排序(三)桶排序,计数排序和基数排序
我们现在已经知道了常用了基于比较的排序算法。现在聊聊基于非比较的排序算法——桶排序,计数排序和基数排序。1.桶排序:其实我认为桶排序其实是一类算法的统称,它的思想是将待排序的数按照他们的数据范围,在这个范围上平均的分配M个桶,然后扫描一遍输入,将所有元素放入对应桶中,如果桶中有多于一个元素,则用插入排序将桶内的元素进行排序。最后按顺序输出所有桶与其内部元素。它的时间复杂度为O(N+c),c
2018-03-28 01:22:04
268
原创 数据结构与算法总结——排序(二)归并排序,快速排序 和 堆排序
上篇介绍了排序算法中的简单排序,这次我们来聊聊归并排序,快速排序 和 堆排序。1归并排序:将2个有序的数组合并为一个有序的大数组的过程。核心为merge函数。使用了分治的思想:将一个大问题分解为互不相关的小问题,最后再将小问题进行合并得到结果。下面我们看看merge函数怎么实现 private static void merge(int[] a, int lo, int mid,
2018-03-27 00:06:27
319
原创 数据结构与算法总结——排序(一)简单排序
学习了数据结构这么久,发现自己往往在学习过程中只是注意了每一个算法的具体实现,但是忽略了算法之间的联系。在再一次的复习中,发现了一些有意思的地方,又梳理了一遍算法间的联系。在这里记录下自己的体会。 本篇的主题是简单排序,作为算法复习的第一块肯定是排序啦,而简单排序又是其基础。这次就好好聊聊这些简单排序——冒泡排序,选择排序,插入排序,希尔排序。1.冒泡排序:从头到尾扫描数组,每次
2018-03-26 16:55:49
147
转载 后缀表达式的求值和转换
在回复中说明不够清晰,在这里说明下,本文第一部分摘自《数据结构和算法分析-C语言描述》一书,只是做了一些概括和总结。一、后缀表达式求值后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3 + *,则其求值过程如下:1)遍历表达式,遇到的数字首先放入栈中,此时栈如下所示:
2018-03-15 09:50:47
390
原创 连续最长不重复字串其扩展
import java.util.*;//维护一个hashmap 记录上次字符出现的位置。和一个pre,记录上个位置的最长无重复字串//从左向右逐一更新pre和hashmap的状态public class DistinctSubstring { public int longestSubstring(String A, int n) { int max = 1;
2018-03-15 00:04:42
132
原创 KMP字符串匹配
再次阅读算法这本书后,对字符串匹配KMP算法有了新的认识。算法可以分为2部分:1.构建有限状态机转换矩阵,别被这个名字吓到,这个矩阵的作用就像是你在走迷宫时的一份地图,它可以告诉你下一步无论怎么走会发生什么情况。 2.利用矩阵决定如何进行下一步的匹配。先说说第二部分:假如你已经有了一份”地图“,该如何使用。
2018-03-14 09:49:18
129
原创 java上位机通信协议实现
概述:以前项目中用java写了一个上位机用来观察单片机发送的数据(连续不断的传送图片以形成视频),在实际使用中发现偶尔会发生图片显示错误的问题(每张图片都显示为前一张的下半段和本张图的上半段),最近有时间对这个问题进行了修复。 本文首先会概括的叙述java上位机的原理,然后会说明通信协议的实现思路,最后会附上上位机和下位机通讯部分的代码,方便大家学习。 上位机框架:
2018-03-10 20:03:35
4427
1
原创 二分查找的尾递归和循环形式的分析
1.概念:建立在有序集合上分段的进行查找。在生活中,假如你们在玩一个扑克,你的同伴随便拿了一张牌让你来猜大小,同时他会告诉你你的猜测是偏大还是偏小,那你应该怎么猜可以最快的猜出答案呢?答案就是二分查找:每次都猜中间的数,将猜测的范围减半。2.实现:首先看二分查找的递归形式,因为它易于理解 //尾递归形式,num为待查数 public static int rank1(int num, i
2018-03-08 00:52:49
380
原创 迭代器与组合模式
在看Headfirst 设计模式的迭代器与组合模式这一章里,发现书中的错误在此记录。总体思路:将组合模式和迭代器模式结合起来,可以得到一个可以便利整个组合的“外部迭代器”。首先假设每个具体的组合可以分为菜单和菜单项。首先抽象出一个表示组合的父类package Pattern.zuhe;import java.util.Iterator;public abstract cla
2017-12-21 21:54:58
228
原创 java集合类库学习记录———PriorityQueue
1.特点优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。这是目前看到的第一个不允许放入null的集合。优先级队列的内部结构是一个数组构成的最小堆(从0下标开始)。不了解堆数据结构的可以看数据结构与算法。方法 iterator()中提供的迭代器不 保证以任何特定的顺序遍历
2017-10-30 22:04:25
250
原创 java集合类库学习记录———LinkedList
1.介绍LinkedList是List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。扩展了AbstractSequentialList抽象类,实现了Deque和Queue接口。这些操作允许将链接列表用作堆栈、队列和双端队列。2.AbstractSequentialList要实现一个列表,程序员只需要扩展此类,并提供 listIterator 和
2017-10-30 09:32:10
241
原创 java集合类库学习记录———ArrayList
ArrayList类实现了AbstractList抽象类,说明了它是一种特殊的实现类(元素的值可以改变:set方法,并且可以修改集合的结构:add和remove方法)。1.List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null 在内的所有元素。2.每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。
2017-10-27 10:29:23
227
原创 java集合类库学习记录———AbstractList
一.List 接口List在Collection的基础上增加了有序(插入顺序)的概念,所以在其接口上多了下面带的几个方法:add(int index, E e), indexOf(Object o),lastindexOf(Object o),ListIterator(int index),remove(int index),set(int index,E e),subList(int f
2017-10-26 09:38:34
202
原创 java集合类库学习记录———Collection类库的结构
先来一张Collection类的“全家福”,方便大家理解类与类之间的关系:(集合类库UML图来自于http://blog.csdn.net/vking_wang/article/details/16965853)从图上可以看出来,集合大概可以分成2部分,一部分用Collection作为跟接口,另一部分用Map作为根接口。我们先了解下Collection接口,Collecti
2017-10-24 17:02:19
416
原创 Java中泛型总结
前天晚上被人问了一个问题:“<?extends SomeClass>与<Textends SomeClass>的区别是什么?” ,思考了下,发现自己并不能解释清楚,于是有了这篇文章。(如果觉得文章太长可以直接看最下面的第七点) 0.术语 发现关于泛型的叫法在core java中存在不规范的情况容易误导初学者,在经过查证后整理了基本的术语 用示例进行描述。Arr...
2017-10-18 19:33:16
337
原创 只使用处理IO的printDigit函数,编写一个过程以输出任意实数可以为负(java数据结构与算法习题1.3)
写之前大概搜了下大家的思路,发现大多数都是通过寻找小数点的位置来解的。本算法通过嵌套的方法来输出任意实数
2017-08-25 09:38:14
1520
原创 快速排序
public static int partition(int[] a,int lo,int hi){ int i = lo , j = hi + 1; int v = a[lo]; while(true){ while((a[++i]-v) < 0) {// if(i == hi){// break;// } } while((v-a[--
2017-08-19 15:21:02
167
原创 归并排序
public static void merge(int[] a,int lo,int mid,int hi){ int i = lo ,j = mid + 1; for(int k=lo;k<=hi;k++){ aux[k] = a[k]; } for(int k=lo;k<=hi;k++){ if(i > m
2017-08-19 14:18:40
162
原创 选择排序,插入排序和希尔排序总结
1.选择排序思想:在第i次循环中,找出后N-i个元素的最小值,并放在第i个元素的位置上,实现递增的排序。JAVA实现代码: public static void sort(Comparable[] a){ int N = a.length; for(int i=0;i其中 less函数的作用是判断a[j]是否小于a[min],exch函数的作用是交换数组a[]中第i与第min个
2017-04-27 16:37:25
250
原创 JAVA中的值传递
按值调用:表示方法接受的是调用者提供的值按引用调用:表示方法接收的是调用者提供的地址将参数分为两类: 1.基本变量(byte short int long float double boolean char) 被创建在栈中 2.引用变量 被创建在堆中对于基本变量的参数,方法不能改变他们;e.
2017-03-26 08:34:48
176
翻译 重写 重载 多态
override : 若想覆盖的超类方法权限为private,则无法覆盖(不用覆盖) 。 覆盖的方法权限不小于超类方法。Overload : 方法的签名一样 ,但返回值不同也不能重载方法。(编译器无法区分具体调用那个方法)
2017-03-08 16:56:20
311
翻译 UTf-8 和 UTF-16 区别
整理自http://swiftlet.net/ 侵删先谈下ASCii 码,一个字节 ,只用了后面7位。可以表示128个字符。Unicode是为整合全世界的所有语言文字而诞生的。任何字符在Unicode中都对应一个值。这个值就可以称为这个字符的Unicode值。Unicode的值通常写成 U+ABCD 的格式。Unicode是为整合全世界的所有语言文字而诞生的。任何文字在U
2017-03-07 22:28:57
888
原创 break 带标签得用法
JAVA中提供了带标签的中断控制流程语句(continue + break );结果:修改一下标签的位置得到:结果:观察这两个不同的标签位置,我们就可以发现带标签的break将标签下面的函数作用域看作一个整体,当执行到break时全部跳过。
2017-03-05 22:50:50
5270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人