算法
不懂不想说
热爱游戏,热爱开发,不断提升自己!
展开
-
算法时间复杂度和空间复杂度
定义空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。编辑本段空间复杂度类似于时间复杂度的讨转载 2013-08-29 17:10:36 · 6289 阅读 · 0 评论 -
混合背包问题(四)
混合背包问题: 即 每个物品可能是 01背包,完全背包,多重背包等多种情况的组合。 ( 01背包 )即物品中,有的是只有一个,要么放入,要么不放入。 (完全背包)物品中,某件物品可以放入任意多个。 (多重背包) 物品中,某件物品有个数量限制,不允许超过这些数量。 (1)对于完全背包 和 01背包问题可以简单地组合 当判断该物品是01背包的时候,将体积从大到小递减原创 2013-11-06 22:31:53 · 1262 阅读 · 0 评论 -
完全背包问题(二)
完全背包问题:一问题描述: 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。二问题实质:(1)与 01 背包不同,每个物品有多个,每种物品可以选择k个。 且必须有 c[i] * k 解决方法: 一原创 2013-11-06 16:35:13 · 744 阅读 · 0 评论 -
二维背包问题(五)
二维背包问题 一 问题描述: 二维费用的背包问题是指: 对于每件物品,具有两种不同的费用; 选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。 问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2, 第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[原创 2013-11-06 22:45:22 · 2240 阅读 · 0 评论 -
找工作知识储备---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
0、前言 这一部分的内容原本是打算在之后的字符串或者数组专题里面写的,但看着目前火热进行的各家互联网公司笔试面试中,出现了其中的一两个内容,就随即将这些经典问题整理整理,单写一篇发上来了。这里争取覆盖面广一些,列举了7个最经典的问题,也会是之后大家笔试面试常见到的问题,而每个问题下都列举了几种思路,掌握这些经典问题的解题思路和算法相信对同类型问题的解答都能有帮助。转载 2013-11-10 15:50:41 · 1274 阅读 · 0 评论 -
一道题看水平
题目:四个正整数ABCD,均小于10000。写一个函数实现D等于A的B次方与C取余。代码一:int function(int a,int b,int c){ int s = 1; for(int i = 0 , i { s = s*(a%c)%c } return s;} 代码二:unsigne原创 2014-02-23 13:57:13 · 692 阅读 · 0 评论 -
二叉树前序、中序、后序遍历相互求法及有关代码实现
今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明。首先,我们看看前序、中序、后序遍历的特性: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树原创 2013-10-12 00:09:12 · 1058 阅读 · 0 评论 -
从文件中查找出现次数最多的10个单词
本来想用字典树的,但字典树是空间换时间的,只有26个字母还好,但文件中还有各种标点符号,觉得空间耗费太大了。。。。就用了还算一般的方法。。十道海量数据处理:http://blog.csdn.net/v_july_v/article/details/6279498字典树参考:http://www.cnblogs.com/DiaoCow/archive/2010/04/19转载 2015-11-12 11:27:20 · 1466 阅读 · 0 评论 -
求一个数组的和最大的连续子数组及扩展
在C++中a=1与a(1)有什么区别?a=1是赋值,a(1)是一个函数值求1亿内的素数,并输出。#include#includeconst long N = 10000001;bool prime[10000001];int main(){long i, j;for(i=2; i{if(i%2 == 0) prime[i]=false;els原创 2014-04-11 21:37:45 · 770 阅读 · 0 评论 -
分组背包问题(三)
分组背包问题(六) 一问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。 这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。 求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。二 解决办法: 第k组解决办法如下: f[k][v] = max(f[k-1][v] , f[k-1][v-原创 2013-11-06 22:59:57 · 3733 阅读 · 0 评论 -
01背包问题总结一
01背包问题总结(一) 一 问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二 解决方案: 考虑使用dp问题 求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。原创 2013-11-05 23:57:28 · 860 阅读 · 0 评论 -
C/C++代码实现图(有向图)的深度,广度优先遍历
深度优先搜索(Depth-First Search—DFS)是指按照深度方向搜索,它类似于树的先根遍历,是树的先根遍历的推广。 深度优先搜索图的基本思想是: 假设图G初态为所有顶点未被访问(visited[i]=false),从G中任选一顶点vi : ⑴、从该顶点vi出发,首先访问vi,并置visited [vi ]=true; ⑵、然后依次搜索vi的每一个邻接点vj转载 2013-11-02 22:05:48 · 11568 阅读 · 0 评论 -
从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用 .
从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综合发散而来。比如说作为最基本的排序算法就种类很多,而事实上笔试面试过程中发现转载 2013-09-29 17:55:30 · 2825 阅读 · 0 评论 -
最短路径之Floyd-Warshell算法
同Bellman-Ford算法一样,Floyd Warshell算法同业可以处理带有负权(但不含负权回路)的图的最短了路径问题。不过该算法并不是单源路径算法,它运行一次计算的是所有两个顶点间的最短路径,时间复杂度为Theta(n^3)。通过改进,可以打印所有路径(一般保存路径会增加空间复杂度)。打印的算法通过保存任意两个节点之间通过的index为最大值的节点。开始吧,floyd转载 2013-10-06 22:45:18 · 996 阅读 · 0 评论 -
瞬间秒杀掉:99%的海量数据处理面试题
一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后,有一点必转载 2013-09-22 21:55:06 · 1781 阅读 · 4 评论 -
桶排序详解
只为学习,只是为了提高自己的水平。桶排序目 录1定义2算法3代价4源码4.1 C++4.2 JAVA4.3 pl5应用5.1 海量数据5.2 典型1定义假定:输入是由一个随机过程产生的[0, 1)区间上均匀分布的实数。将区间[0, 1)划分为n个大小相等的子区间(桶),每桶大小1/n:[0, 1转载 2013-09-28 15:46:08 · 3470 阅读 · 0 评论 -
《编程珠玑(第2版)》笔记——将一个n元一维向量向左旋转i个位置(第2章)
第2章 啊哈!算法《编程珠玑(第2版)》的第2章,一开始就给出三个问题,其中问题B很有意思:将一个n元一维向量向左旋转i个位置。例如,当n=8且i=3时,向量abcdefgh旋转为defghabc。简单的代码使用一个n元的中间向量在n步就能够完成该工作,你能否仅使用数十个额外字节的存储空间,正比于n的时间内完成向量旋转。其实就像问题中提到的,如果不考虑空间,这是个很简单的问题。但考虑到转载 2013-11-17 11:07:27 · 1047 阅读 · 0 评论 -
编程之美2.21——只考加法的面试题
问题描述:写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。例如:3=1+2; 9=5+4; 9=2+3+4。刚开始看到这个题目,直接想到的方法就是蛮力解决:即对于每一个输入的整数,从1开始加,一直加到等于或者大于这个整数为止。如果等于这个整数,则找到了一种连续自然数相加的模式;如果大于这个整数,则无法找到,继续从2开始加,依次类推。例如对于5来说,首先从转载 2013-11-16 22:35:47 · 907 阅读 · 0 评论 -
最短路径算法详细介绍
据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等。美国火星探测器核心的寻路算法就是采用的D*(D Star)算法。 最短路经计算分静态最短路计算和动态最短路计算。 静态路径最短路径算法是外界环境不变,计算最短路径。主要有Dijkstra算法,A*(A Star)算法。 动态路径最短路是外界环境不断发生转载 2013-08-28 16:20:54 · 11738 阅读 · 1 评论 -
大数据阶乘C语言实现
#include "stdio.h"#include "stdlib.h"#include "string.h"const int N = 10000;int arr[N];void fun(int n){ int total,time = 1,temp; memset(arr,0,N); arr[1] = 1; for (int i =1;i {原创 2013-11-16 21:42:16 · 1736 阅读 · 0 评论 -
海量数据处理算法—Bit-Map
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里转载 2013-11-11 18:28:03 · 717 阅读 · 0 评论