摘要:
Unix网络编程中的五种I/O模型 阻塞式I/0、非阻塞I/O、I/O复用、信号驱动式I/O、异步I/O 以一个网络输入为例,一个输入操作通常包括两个不同的阶段: 等待数据准备好,将数据从内核拷贝到进程中。具体过程参考下面的图。 阻塞式I/O 默认情况下的I/O模型都是阻塞式I/O,应用进... 阅读全文
摘要:
首先请确保已经学习了Java NIO的基础知识,包括Buffer,Channel文件通道和Socket通道,Selector。关于NIO比起I/O的好处,区别等这里就不说了。具体可以参考后面的参考链接等。 这篇博客主要以一个使用NIO传输文件的例子来学习NIO中网络的基本操作 传统的监控soc... 阅读全文
摘要:
排序算法学习总结 排序算法在经典算法里面是非常重要的,于是花了点时间将之前学习的常见的排序算法进行总结。 对于每种排序算法,需要理解以下问题: 1.算法思想是什么 2.时间复杂度 3.稳定性 4.什么情况下适用? 基于比较的排序,已证明,基于比较的排序算法时间复杂度不会低于O(nlgn)最... 阅读全文
摘要:
桶排序 桶排序(Bucket Sort)假设输入数据服从均匀分布,然后将输入数据均匀地分配到有限数量的桶中,然后对每个桶再分别排序,对每个桶再使用插入排序算法,最后将每个桶中的数据有序的组合起来。前面了解到基数排序假设输入数据属于一个小区间内的整数,而桶排序则是假设输入是由一个随机过程生成,该过... 阅读全文
摘要:
希尔排序 希尔排序(Shell Sort)是插入排序的一种更高效的改进版本。他是通过比较相距一定间隔的元素来工作,各趟比较所用距离随着算法的进行而减小,直至只比较相邻元素的最后一趟排序,因此也称递减增量排序算法。 直接插入排序在当序列恰好为顺序时,时间消耗为O(n),因此若某个序列已基本有序,直... 阅读全文
摘要:
平衡二叉排序树 平衡二叉排序树(Balanced Binary Sort Tree),上一篇博客【数据结构】二叉排序树BST讲了BST,并且在最后我们说BST上的操作不会超过O(h),既然树高这么重要,那么BBST的研究就是为了使得树的深度在可接受的范围内渐近意义下达到O(lgn) n个节点组成... 阅读全文
摘要:
二叉排序树 二叉排序树(Binary Sort Tree)也叫二叉搜索树(Binary Search Tree) 二叉排序树本质上还是一个二叉树,只不过在其上定义了一些规则:一个结点的左子树中所有的结点不大于该结点的值,而其右子树中的所有结点不小于该结点的值。由此规则可得BST中序遍历是有序的。... 阅读全文
摘要:
前言 数据结构还是大二的时候学过的,当然由于是非计算机专业的学生,所以学的也不怎么样,去年用c++实现了最基本的数据结构,链表/栈/队列/二叉树,三月份看的时候还贴到了博客上。然而当时由于代码量不够,其实写的并不是很好,理解也太不到位。 最近在看算法导论,当然最基本的就是数据结构,于是打算将基本... 阅读全文
摘要:
堆排序 上一篇博客讲了堆这种数据结构,它提供了一种接口getMax接口,好消息是获得最大值的时间复杂度仅仅为O(1),删除最大值delMax也仅仅需要O(lgn)的时间(删除后需要调整至满足堆的性质需要O(lgn)),因此联想到之前的选择排序算法,每次从剩下的未排序元素中找到极值元素,将其放入对... 阅读全文
摘要:
堆 这种数据结构。一般堆用来实现优先级队列。优先级队列:和通常的栈和队列一样,只不过里面的每个元素都有一个“优先级”,在处理的时候,首先处理优先级最高的。通常包含三个操作getMax/delMax/insert 栈和队列算是优先级队列的特例。 使用其他数据结构均不能同时在O(lgn)的复杂度下完... 阅读全文