算法
永远少年1024
这个作者很懒,什么都没留下…
展开
-
海量(大)数据的算法
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为3转载 2012-10-07 20:33:22 · 685 阅读 · 0 评论 -
2012年9月几个公司的笔试题
(1)判断两个Query是否相同“北京欢迎你”和“你欢迎北京”答案:搜索引擎会对其进行分词,一般为 北京/欢迎/你 你/欢迎/北京 只有判断句子是否相同,这个不太清楚(2)最长前缀子串问题a="abdcdef" b="dex" 则最长子串是de 答案:这种情况下对a建立后缀数组,然后查找b的最长前缀匹配 (3)某转载 2012-11-05 08:24:11 · 922 阅读 · 0 评论 -
1、2、3、4、5、6打印出不同的排列,4不在第三位3、5不相邻
package test; import org.junit.Test;//排序组合算法 public class PermutationAlgo { private int count = 0; @Test public void calculate(){ String eleStr = "122345"; depthSear原创 2012-11-05 21:31:35 · 1093 阅读 · 0 评论 -
map的迭代
public class HashMapDemo { public static void main(String[] args) { String str = "匿名类是对原类的一个继承," + "同时创建了实例,{} 就是继承"+ "以后的类体。类体中可使用所有类的语法。"+ " 匿名类不能写构造器。"; Map map =原创 2012-11-06 11:06:52 · 2874 阅读 · 0 评论 -
两升序数组合并成一个升序数组
package test;import java.util.Arrays;public class LArray { public static void main(String[] args){ int[] a={2,6,7,8}; int[] b={4,6,66,77,88,99,444,666,777,999}; int[] c = uninArray(a,b); S原创 2012-11-05 22:17:22 · 5359 阅读 · 0 评论 -
在旋转后的有序数组中查找元素,要求O(logn)的时间复杂度
题:比如说在A[] = {7, 8, 1, 2, 3, 4, 5, 6};查找元素。A是由{1, 2, 3, 4, 5, 6, 7, 8}左旋6位得到。假定数组旋转前是有序递增的,且没有重复的元素。方法:二分查找,再分情况讨论。在确定l, m, r后,旋转后的数组有图1所示的四种情况,且对应的元素有图2所示的关系。由图中可以看出,根据A[l]与A[r]的大小关系可以转载 2012-11-05 23:38:42 · 2004 阅读 · 0 评论 -
推荐算法
在推荐系统简介中,我们给出了推荐系统的一般框架。很明显,推荐方法是整个推荐系统中最核心、最关键的部分,很大程度上决定了推荐系统性能的优劣。目前,主要的推荐方法包括:基于内容推荐、协同过滤推荐、基于关联规则推荐、基于效用推荐、基于知识推荐和组合推荐。一、基于内容推荐基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内转载 2012-10-29 09:26:08 · 785 阅读 · 0 评论 -
50个人围成一圈数到三和三的倍数时出圈,在原来的位置是多少
[java] view plaincopy/* * 有50个人站成一个圈, * 第一个人开始数数(从1开始),每数到3或者3的倍数此人就退出 * 最后剩下的人是多少号?(编程实现) */ public class tai { public void test(){转载 2012-11-05 21:25:58 · 6507 阅读 · 1 评论 -
、一个n*n数组,要求用螺旋状打印出数组中的元素
package zhangtingting;public class ArrayHelix { public static Integer[][] doubleArray = new Integer[][]{{2, 3, 4},{11, 12, 5},{10, 13, 6},{9, 8, 7}}; public static void exa转载 2012-11-13 21:04:07 · 1360 阅读 · 0 评论 -
打印出一个字符串的所有组合的递归方式
public class AllString { public static void main(String[] args){ new AllString().all("abc123"); } public void all(String str){ all(str,""); } public void al转载 2012-11-13 21:13:49 · 1397 阅读 · 0 评论 -
)RGB排序,一个字符串,里面只有三种字符R G B,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。遍历一遍就排好序。
#include "stdafx.h"#include "stdlib.h"#include #include #include #include using namespace std;//算法中谈到了怎样不增加任何空间,交换两个元素的位置,在前面中介绍的是char型的加减法实现的,在做加减法实现的过程中要防止溢出,所以我这里换了个方法,使用异或实现!void swap(s转载 2012-11-05 08:03:38 · 1536 阅读 · 0 评论 -
对称子字符串
package test;public class DuiChengString { /** * @param args */ public static void main(String[] args) { String str = "idghabcba";// isSymmetry(str); System.out.println(isSymmetry(s原创 2012-10-17 23:40:25 · 872 阅读 · 0 评论 -
运算符的优先级
1、( ) 圆括号 ; [ ] 下标运算 ; -> 指向结构体成员运算符; · 结构体成员运算符; 自左至右2、! 逻辑非运算符 ; ~按位取反运算符 ; ++ 自增运算 ; -- 自减运算 ; - 负号运算 ; * 指针运算 ; & 取地址运算 ;原创 2012-10-08 12:10:00 · 625 阅读 · 0 评论 -
数据结构基础
第一章 数据结构与算法一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。2.算法的基本要素:算法中对数据的运算和操作、算法的控制结构。3.算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。4.算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求二.算法的转载 2012-10-07 20:34:54 · 977 阅读 · 0 评论 -
经典面试题】寻找单链表倒数第n个节点_C/C++
面试中经常出现的编程题之一。最直接的办法是先遍历一遍单链表,记下链表的节点数,然后再次遍历,直到到达节点数减去n的节点,返回结果。实际情况中若链表数目很多而n相对不大,这种方法需要大约两次遍历。更简单的实现方法是采用双指针。一个指针先从链表头开始步进n步,然后另一个指针从头开始,两个指针一同步进直到达到链表尾。这是第二个指针所指的节点即为链表的倒是第n个节点。实现代码如下:转载 2012-10-09 12:16:55 · 1321 阅读 · 0 评论 -
线性表的链式存储结构之单链表类的实现_Java
[java] view plaincopypackage dataStructure.linearList; import dataStructure.linearList.Node; //导入单链表结点类 public class SinglyLinkedList implements LLi转载 2012-10-09 12:18:27 · 631 阅读 · 0 评论 -
线性表的链式存储结构之单链表结点类的实现_Java
在C/C++语言中,采用指针类型存储地址来实现链式存储结构。Java语言不支持指针类型,提供引用方式保存包括地址在内的结构化信息。引用是比指针更健壮、更安全的链接方式,它不仅实现了指针的所有功能,而且避免了因指针使用不当产生的不安全性。因此,采用Java语言的引用类型可以很好地实现链式存储结构。单链表结点类Node声明如下:[java] view p转载 2012-10-09 12:20:16 · 1434 阅读 · 0 评论 -
八大排序
1 8种排序之间的关系: 2 3 1, 直接插入排序 4 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 5 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 6 也是排好顺序的。如此反复循环,直到全部排好顺序。 最好的情况下关键字比较的次数是n-1最坏的情况下比较次数是n(n-1)/2时间复杂转载 2012-10-08 15:58:45 · 698 阅读 · 0 评论 -
红黑树
红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这转载 2012-10-13 22:15:10 · 1267 阅读 · 0 评论 -
单链表反转
nodetype *invert(nodetype *h)//实现单链表逆置{ nodetype *p,*q,*r; if (len(h)<=1) {printf("逆置的单链表至少有俩个节点"); printf("\n"); return NULL; } else { p=h; q=p->next ; while (q!=NULL) { r=q->n转载 2012-10-14 23:53:58 · 480 阅读 · 0 评论 -
二叉树转换成双向链表
上次写了一个二叉树的创建的程序,代码思想基本都是数据结构书本上的,后面看到另外一个人的博客 用java实现了一个二叉排序树的转换为双向链表的程序,代码之多吓我一跳,后面想想用递归的方法从二叉树的基础上按照某种方式建立双向链表,代码量应该不是很多。 [cpp] view plaincopy#define EQ(x,m) ( x == m转载 2012-10-15 10:35:04 · 1811 阅读 · 0 评论 -
关于二叉树的所有 前序、中序、后序、层次遍历
package test;import java.util.*; public class BinaryTree { protected Node root; public BinaryTree(Node root) { this.root = root; } public Node getRoo转载 2012-11-19 21:49:00 · 594 阅读 · 0 评论