算法
文章平均质量分 71
Rebirth_Love
这个作者很懒,什么都没留下…
展开
-
BitMap的理解(转载)
Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。(PS:划重点节省存储空间)假设有这样一个需求:在20亿个随机整数中找出某个数m是否存在其中,并假设32位操作系统,4G内存在Java中,int占4字节,1字节=8位(1 byte = 8 bit)如果每个数字用int存储,...转载 2020-04-09 07:32:50 · 1859 阅读 · 1 评论 -
字符串匹配算法
记录两个字符串匹配算法:KMP和BM算法。转载地址:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm转载 2017-05-12 00:04:47 · 687 阅读 · 0 评论 -
算法之希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。原创 2016-05-05 16:23:36 · 365 阅读 · 0 评论 -
动态规划之01背包问题(最易理解的讲解)
转载地址:http://blog.csdn.net/mu399/article/details/772281001背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,转载 2016-09-13 16:05:16 · 3836 阅读 · 0 评论 -
稳定排序和不稳定排序
这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相转载 2016-08-29 16:33:15 · 541 阅读 · 0 评论 -
【Java实现】剑指offer52--构建乘积数组
题目: 给定一个数组 A[0,1,...,n-1 ],请构建一个数组 B[0,1,...,n-1] 。其中 B 中的元素 B[i]=A[0]∗ A[1] ∗...∗ A[i−1]∗A[i+1] ∗ ... ∗A[n−1] 。不能使用除法。 直观思路: 计算每一原创 2016-06-08 13:08:43 · 1857 阅读 · 0 评论 -
java实现算法之堆排序
本文参考文章:http://blog.csdn.net/morewindows/article/details/6709644堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或原创 2016-05-08 19:18:41 · 1580 阅读 · 0 评论 -
Java实现算法之快速排序
本文参考了:http://blog.csdn.net/morewindows/article/details/6684558快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。原创 2016-05-08 14:21:47 · 3808 阅读 · 0 评论 -
Collections中sort()和Arrays中的sort方法分析
首先从源代码看起:在Collections中提供的sort方法有以下有两种重载第一个重载的定义是:> 表示该方法中传递的泛型参数必须实现了Comparable中的compareTo(T o)方法,否则进行不了sort排序。第二个是提供Comparator(比较手段)。然后再来看list.sort(c)这个方法:default void sort(Comparator c)原创 2016-05-18 22:46:12 · 4586 阅读 · 0 评论 -
Java实现归并排序
本文参考自:http://blog.csdn.net/morewindows/article/details/6678165归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行原创 2016-05-07 16:24:13 · 583 阅读 · 0 评论 -
算法之选择排序
选择排序是从无序区选一个最小的元素直接放到有序区的最后,即是第i次循环,选择第i小的数放入前边有序区最后。设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后a[0…i]就形成了一个有序区。3. i++并重复第二步直到i=原创 2016-05-05 16:41:29 · 351 阅读 · 0 评论 -
白话经典算法系列之一 冒泡排序的三种实现
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。按照定义很容易写出代码://冒泡排序1void转载 2016-05-05 11:28:35 · 508 阅读 · 0 评论 -
Java实现插入排序的写法
插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。3.原创 2016-05-05 16:00:34 · 482 阅读 · 0 评论 -
数组中只出现一次的数
首先看看题目要求:数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法找到x。 这个题目非常有意思,在本人博客中有《位操作基础篇之位操作全面总结》这篇文章介绍了使用位操作的异或来解决——数组中其他数字出现二次,而x出现一次,找出x。有《【白话经典算法系列之十二】数组中只出现1次的两个数字(百度面试题)》这边文章介绍了分组异或的方法来解决——转载 2016-05-26 14:09:14 · 361 阅读 · 0 评论 -
数组中只出现1次的两个数字(百度面试题)
转载自:http://blog.csdn.net/morewindows/article/details/8214003首先来看题目要求:在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。 考虑下这个题目的简化版——数组中除一个数字只出现1次外,其它数字都成对出现,要求尽快找出这个数字。这个题目在之前的《位操作基础篇之位操作全面总结》转载 2016-05-26 14:12:15 · 391 阅读 · 0 评论