算法
LiTianao88
Hello Java!
展开
-
Java冒泡排序,插入排序,选择排序
冒泡排序:[java] view plain copyprint?package com.zyg.test.sort; //博客:http://blog.csdn.net/m_changgong public class BubbleSort { public static void main(String[] args) {转载 2016-12-12 16:53:32 · 192 阅读 · 0 评论 -
Timing Wheel 定时轮算法
最近自己在写一个网络服务程序时需要管理大量客户端连接的,其中每个客户端连接都需要管理它的 timeout 时间。通常连接的超时管理一般设置为30~60秒不等,并不需要太精确的时间控制。另外由于服务端管理着多达数万到数十万不等的连接数,因此我们没法为每个连接使用一个Timer,那样太消耗资源不现实。最早面临类似问题的应该是在操作系统和网络协议栈的实现中,以TCP协转载 2016-12-12 17:12:37 · 1850 阅读 · 0 评论 -
程序员应该了解的查找(java实现)
相比较排序来说,今天所说的查找就简单多了,今天我们先来说:1, 顺序查找2, 折半查找 一、顺序查找的基本思想:从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不转载 2016-12-12 17:11:04 · 295 阅读 · 0 评论 -
取模(mod)与取余(rem)的区别
通常取模运算也叫取余运算,它们返回结果都是余数.rem和mod唯一的区别在于: 当x和y的正负号一样的时候,两个函数结果是等同的;当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。 这是由于这两个函数的生成机制不同,rem函数采用fix函数,而mod函数采用了floor函数(这两个函数是用来取整的,fix函数向0方向舍入,floor函数向无穷小方向舍入转载 2016-12-12 17:09:50 · 30943 阅读 · 1 评论 -
数据工程师必知算法:蓄水池抽样
摘要: 引言:众所周知,想要面试一个统计学家和软件工程师的合体——数据工程师——是件很难的事情。我在面试中常使用的方法是:提出即需要算法设计,又需要一些概率论知识的问题,来考察面试者的功底。 引言:众所周知,想要面试一个统计学家和软件工程师的合体——数据工程师——是件很难的事情。我在面试中常使用的方法是:提出即需要算法设计,又需要一些概率论知识的问题,来考察面试者的功底。下转载 2016-12-12 17:08:32 · 322 阅读 · 0 评论 -
搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法。给定一个m*n的格子或棋盘,问从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)解答:把棋盘看做二维坐标,设f(m,n)代表从坐标(0,0)到坐标(m,n)的移动方法,则f(m,n)=f(m-1,n)+f(m,n-1)初始为f(0,0)=0,f(0,1)转载 2016-12-12 17:06:43 · 1621 阅读 · 0 评论 -
Java排序总结
基于下面几个方面来比较各个排序算法的优劣:时间复杂度,空间复杂度,稳定性,适用场景排序算法时间复杂度空间复杂度稳定性适用场景直接选择排序O(n^2)O(1)不稳定时间效率不高,但是空间效率很高,算法实现比较简单堆排序O(nlogn),底数为2O(1)不稳定时间效率很高,但是不稳定冒泡排序原创 2016-12-12 17:05:02 · 215 阅读 · 0 评论 -
归并排序
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合原创 2016-12-12 17:03:51 · 180 阅读 · 0 评论 -
java实现二叉树的构建以及3种遍历方法
1.树的构建方法 2.具体代码 Java代码 package tree; import java.util.LinkedList; import java.util.List; /** * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考资料0:数据结构(C语言版)严蔚敏原创 2016-12-12 17:02:20 · 454 阅读 · 0 评论 -
轻松搞定面试中的二叉树题目
树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等。本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助。原创 2016-12-12 17:00:18 · 167 阅读 · 0 评论 -
辗转相除法的原理
辗转相除法又叫欧几里得辗转相除法,最早出现在公元前300年古希腊著名数学家欧几里得的《几何原本》》(第VII卷,命题i和ii)中。而在中国则可以追溯至东汉出现的《九章算术》。而在现代数学中,这应该是属于数论的部分的。要想解释辗转相除法的原理,需要先知道以下两点:一、一个一般定理: 如果a是任一整数而b是任一大于零的整数,则我们总能找到一整数q,使转载 2016-12-12 16:57:26 · 2793 阅读 · 0 评论 -
LinkedBlockingQueue
LinkedBlockingQueue是一个基于已链接节点的、范围任意的blocking queue的实现。 此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。 新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列, 但是在大多数并发应用程序中转载 2016-12-12 16:56:15 · 190 阅读 · 0 评论 -
JAVA实现快速排序
快速排序的基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。 先看一下这幅图:把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复原创 2016-12-12 16:54:21 · 145 阅读 · 0 评论 -
JAVA实现快速排序
快速排序的基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。 先看一下这幅图:把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复转载 2016-12-15 09:24:01 · 143 阅读 · 0 评论