`
文章列表
先看一个题目: 给你一堆西安市的电话号码列表,数量大概在千万级, 要求从中找出所有重复的电话号码,需要时间复杂度尽可能小。 目前西安市的电话号码大概都以8开头,为8位,也就是 类似于82678578这样子 二重暴力搜索时间复杂度太高,这里我们不予考虑。 容易想到的办法就是建立一个标志数组, int boolean都行,用相应的位置值来代替这个号码是否出现, 根据数组的可直接存取特性,来提高效率。 但是你是否想过或测试过 int[] a = new int[100000000]; boolean[] a = new boolean[100000000]; 这样类似的语句是否 ...
题目:一个有序的数组,里面是一万个整数。随机切分两部分,然后互换位置。求一个数的位置 for example: int[] numbers = {92, 99,101,102,104,105,109,110,115,166,300,400,500, 1, 12, 13, 34, 35, 56, 57}; public class Test { /** * @param args */ public static void main(String[] args) { int[] n ...

希尔排序

    希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。   希尔排序基本思想:   先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。   该方法实质上是一种分组插入方法。   给定实例的shell排序的排序过程   假设待排序 ...

二分查找

      二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 link:http://baike.baidu.com/view/610605.htm /** ...
     快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 link:http://baike.baidu.com/view/115472.htm /** * */ package arithmetic; /** * @author lgli * */ public class QuickS ...

归并排序

[url]  http://baike.baidu.com/view/90797.htm[/url]     归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。     归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。   将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 算法描述   归并操作的工作原理如下:   ...

冒泡排序

     冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终 ...

选择排序

http://baike.baidu.com/view/547263.htm               每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 分析:    选择排序(Select Sort)算法的基本思想是:在待排序的无序数组中找出最小数(或最大数)并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中再次选择最小数(或最大数)并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个数为止。         假定有n个数的序列,要求按递增的次序排序,则实 ...

插入排序

      有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置 public class InsertSortTest { p ...
synchronized在静态方法上表示调用前要获得类的锁,而在非静态方法上表示调用此方法前要获得对象的锁。 public class StaticSynDemo { private static String a="test"; //等同于方法print2 public synchronized void print1(String b){ //调用前要取得StaticSynDemo实例化后对象的锁    System.out.println(b+a); } public void print2(String b){    synchronized (this) {// ...
第 I 条 (a)     这个功能是干什么的?它跟哪些功能有关联关系?客户是否真的有必要需要这个功能?是否合情合理? (b)     一个方法,尽量只能完成一个功能,客户如果以后扩展怎么办?有时间,尽量把代码重构。 (c)     如果别人可能也调用这个方法,就把它封装成另一个方法,让别人再调用这个封装的方法。 (原因是方便扩展,如果以后修改了这个方法,不会影响别人的方法。) (d)     理解需求,理清它们的关联关系,是编码之前必须要做的。 (e)     做比较复杂的算法的时候(如递归等),一定要小心,先写出必要的测试用例,把它们重构。 (f)      把注释写的详细一点 ...
1、性能调优的步骤 1.1、衡量系统现状 包括请求次数、响应时间、资源消耗等;如:A系统目前95%的请求响应为1s。 1.2、设定调优目标 根据用户所能接受的响应速度、系统现有的机器、所支撑的用户量制定出来的,因此通常会设定调优目标:95%的 请求在500ms内返回。 1.3、寻找性能瓶颈 在【2、寻找性能瓶颈】会专门介绍。通常性能瓶颈的表像是: 1.3.1、资源消耗过多(CPU、文件IO、网络IO、内存) 1.3.2、外部系统处理不足(所调用的其他系统提供的功能——多数情况也是资源消耗过多、数据的操作响应速度 不够——根据数据库SQL执行速度、数据库机器的IOPS、数据库的Active S ...
什么是Thread Dump?   Thread Dump是非常有用的诊断Java应用问题的工具,每一个Java虚拟机都有及时生成显示所有线程在某一点状态的thread-dump的能力。虽然各个 Java虚拟机thread dump打印输出格式上略微有一些不同,但是Thread dumps出来的信息包含线程;线程的运行状态、标识和调用的堆栈;调用的堆栈包含完整的类名,所执行的方法,如果可能的话还有源代码的行数。 Thread Dump特点   1. 能在各种操作系统下使用  2. 能在各种Java应用服务器下使用      3. 可以在生产环境下使用而不影响系统的性能    4. 可以将问 ...
查询是数据库技术中最常用的操作。查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的SQL语句后, 执行这条SQL语句,然后将查询到的结果返回给客户端。虽然过程很简单,但不同的查询方式和数据库设置,对查询的性能将会有很在的影响。 因此,本文就在MySQL中常用的查询优化技术进行讨论。讨论的内容如:通过查询缓冲提高查询速度;MySQL对查询的自动优化;基于索引的排序;不可达查询的检测和使用各种查询选择来提高性能。 一、 通过查询缓冲提高查询速度 一般我们使用SQL语句进行查询时,数据库服务器每次在收到客户端发来SQL后,都会执行这条SQL语句。但当在一 ...
1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有 例如内存中有这样的位置 0 1 2 3 4 5 6 7 而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,那么当查找时就需要到这八个位置里挨个去找,或者用二分法一类的算法。 但如果用hashcode那就会使效率提高很多。 我 们这个类中有个字段叫ID,那么我们就定义我们的hashcode为ID%8,然后把我们的类存放在取得得余数那个位置。比如我们的ID为9,9除8的余 数为1,那么我们就把该类存在1这个位置,如果ID是13,求得的余数是5,那么我 ...
Global site tag (gtag.js) - Google Analytics