
算法设计
文章平均质量分 91
阿-杰
享受挨踢的人生,分享技术的精彩!
展开
-
笔试:天猫魔盒下单逻辑及数据瓶颈问题
天猫双十一有个积分换墨盒的活动,总共有50万台天猫魔盒(box),每个用户(user)可以用99个天猫积分(point)兑换一台魔盒,且每人限换一台。请设计一套java接口并实现下单(order)逻辑。0参考(但不局限于)下面的下单逻辑:1、创建订单2、扣减用户积分3、扣减魔盒库存4、下单成功同时请回答:1、数据库表结构如何设计,有哪些表,分别有什么作用?2、下单过程中哪些地方可能成为瓶颈?如何解原创 2014-08-31 10:41:08 · 2803 阅读 · 1 评论 -
java算法:构建块
java算法:构建块 在java中用来存储和处理信息的主要的低级构造。使用java的类来描述要处理的信息,定义要处理它们的方法,并构建能实际存储这些数据的对象。我们所有的数据结构由对象和指向对象的指针构成。我们书写的程序就是要处理我们所生活的世界和自然语言信息,在计算机中要为这些信息构建基本块--数字或字母提供内嵌支持。在java中,基本的数据类型构建起来有:boolean,char,原创 2012-10-26 12:39:57 · 1027 阅读 · 0 评论 -
java算法:实验和实现分析
java算法:实验和实现分析在设计和开发算法时,通过对对象操作分层来帮助理解所解决的计算问题的本质。要脚踏实地用一种实际的编程语言java来表达所有的算法。java语言简洁、准确的实现了大量重要且有效的算法。为了理解算法的性能,最初的步骤就是进行试验分析。给定两个算法,评估优劣性,所采用最简单的方法:运行这两个算法,看哪个运行的时间短。在算法研究中,运行时间可能会被忽略。但是,一个算法运行原创 2012-10-25 21:15:05 · 1393 阅读 · 0 评论 -
java算法:数据项
java算法:数据项一般对数据项集做两种操作: 插入新项 删除新项 根据上面所定义的ADT,称为广义队列。为了方便:ADT中包括构建数据结构的显式操作(构造函数)以及对数据结构中的数据项进行计数(或只检测是否为空)的操作,还可能需要复制(克隆)数据项结构的操作。事实上,数组和链表就是广义上队列实现的基本数据结构。插入和删除的开销取决于所使用的特定的数据结构以及要插入和删除的特定原创 2012-10-26 12:44:56 · 833 阅读 · 0 评论 -
java算法:抽象数据类型ADT
java算法:抽象数据类型ADT开发有关系数据和处理这些数据的方法的抽象数据模型是用计算机解决问题的过程中必不可少的步骤。 使用抽象数据类型,可以很好的把任何具体的数据结构表示与算法分开,利于研究算法。 抽象数据类型是一种智能通过接口访问的数据类型(值与值上的操作所构成的集合),我们把使用ADT的程序称为客户程序,把指定数据类型的程序称为实现。 抽象数据类型与其他数据类型的主要区别原创 2012-10-26 12:45:20 · 2724 阅读 · 0 评论 -
java算法:堆栈ADT及实例
java算法:堆栈ADT及实例在支持插入和删除数据项集的数据类型中,最重要的数据类型是堆栈。 堆栈:是由两个基本操作构成的ADT,插入(或压入)一个新项,以及删除(或弹出)最近插入的数据项。 例1:堆栈ADT接口 Java代码 public interface IIntStack { int intStack(int value);原创 2012-10-26 12:45:41 · 1378 阅读 · 0 评论 -
java算法:复合数据结构
java算法:复合数据结构在Java中多维数组可以以更一般的方式来实现:定义成复合数据结构(数组的数组)。 Java的这种基本机制使我们很容易地创建和处理复合结构。原创 2012-10-26 12:44:28 · 1120 阅读 · 0 评论 -
java算法:数组
java算法:数组数组是最基本的数据结构。在java和大多数编程语言中都被定义为简单类型。数组的使用是开发有效算法的基础。 数组是相同类型数据的固定集合,它是连续存储的,通过下标来访问数组元素。由于它是与计算机的内存系统直接通讯,可以看成是最基本的数据结构。 例一:埃拉托色尼筛,打印出小于给定N的所有素数。 Java代码 public class Prime原创 2012-10-26 12:43:26 · 1045 阅读 · 0 评论 -
C++排序算法总结
【1】插入排序:是一个对少量元素进行排序的有效算法。实现比较简单。时间复杂度:O(n^2),空间复杂度:O(1)。是稳定的排序方法。代码:[cpp] view plaincopyprint?//insertion sort #include using namespace std; //insertion sort void Insertio原创 2012-10-07 14:27:04 · 1361 阅读 · 0 评论 -
java算法:链表
java算法:链表链表是一种基本的数据结构,它是多个数据项的集合。链表相对于数组的主要优点在于给我们提供了重新有效地组织数据项的能力,这种便利牺牲快速访问链表中的数据项为代价,因为访问链表就是从开始指针往下查。在一些编程环境中,链表是基本的数据结构,但是在java中不是。我们构建类,Node: Java代码 class Node{ Object it原创 2012-10-26 12:43:49 · 1008 阅读 · 0 评论 -
java算法:基于应用ADT例子
java算法:基于应用ADT例子例1:多项式ADT接口 Java代码 class Poly{ Poly(int,int) double eval(double) void add(Poly) void mult(Poly) public String toString() } class Po原创 2012-10-26 12:46:44 · 1279 阅读 · 0 评论 -
java算法:折半查找(递归算法和非递归算法)
package Ceshi;public class biSearch { /** * @param args */ /* 折半查找--当查找表是有序表时,可采用折半查找; 基本思想:在有序表中,取中间元素作为比较对象,若给定值K与中间记录关键字相等,则查找成功; 若给定值K小于中间记录的关键字,则在表的左半区继续查找; 若给定值K大于中间记录的关键原创 2012-12-01 10:51:11 · 1417 阅读 · 0 评论 -
笔试:求最长公共子序列
给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。(最长公共子序列)package org.algorithm;public cl原创 2014-08-31 10:36:31 · 1164 阅读 · 0 评论 -
笔试:求二叉树中相差最大的两个节点间的差值绝对值
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。原创 2014-08-31 10:34:36 · 1701 阅读 · 0 评论 -
水仙花数优化问题:穷举法、查找表法、组合数学法
水仙花数优化问题:穷举法、查找表法、组合数学法原创 2013-10-10 14:12:49 · 1658 阅读 · 0 评论 -
java算法:顺序查找(有监视哨和无监视哨)
package Ceshi;public class seqSearch { /** * @param args */ /* 顺序查找又称线性查找; 基本思想:从查找表的一端开始,向另一端逐个按给定值K与关键字进行比较,若找到,查找成功; 并给出记录在表中的位置;若整个表检测完,仍未找到与K值相同的关键字,则查找失败; 优点:对表中数据的存储没有要求原创 2012-12-01 10:45:36 · 2281 阅读 · 0 评论 -
数据结构:stack栈的初始化、入栈、出栈及显示栈元素
#includeconst int MAX=5; //假定栈中最多保存5个数据//定义名为stack的类,其具有栈功能class stack { //数据成员 float num[MAX]; //存放栈数据的数组 int top; //指示栈顶位置的变量public: //成员函数 void i原创 2012-12-10 10:37:31 · 3349 阅读 · 0 评论 -
OJ(Online Judge)系统及ACM测试题库大全
OJ是Online Judge系统的简称,用来在线检测程序源代码的正确性。著名的OJ有RQNOJ、URAL等。国内著名的题库有北京大学题库、浙江大学题库等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。简介: Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源原创 2012-11-05 13:46:59 · 9550 阅读 · 0 评论 -
数据结构:双向链表list的表头/尾添加数据、链表显示、链表清空
#include//定义节点(数据对象)的接口class Node{ //声明list类为本类的友元类 friend class list;//私有成员 private: int Data; //节点数据 Node *previous; //前趋指针 Node *next; //后原创 2012-12-10 10:40:16 · 1470 阅读 · 0 评论 -
JAVA中的向量(Vector)用法
JAVA中的向量(Vector)用法 Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功原创 2012-11-08 10:37:01 · 2383 阅读 · 0 评论 -
java算法:FIFO队列
java算法:FIFO队列FIFO队列是一个ADT,由两个基本操作构成:插入(放入)一个新项,删除(得到)最早插入的项。 例1:FIFO队列ADT接口 Java代码 interface intQueue{ intQueue(int q); int empty(); void put(int q); int get(原创 2012-10-26 12:46:01 · 2397 阅读 · 0 评论 -
java算法:排序实现
java算法:排序实现排序最基本规则:先比较,再对数据项进行排序。 例1:数据项接口 Java代码 interface Item{ boolean less(Item v); } interface Item{ boolean less(Item v);}例2:排序方法类 Java代码 cla原创 2012-11-01 10:03:00 · 999 阅读 · 0 评论 -
java算法:冒泡排序
java算法:冒泡排序冒泡排序:不断遍历文件,交换倒序的相邻元素,直到文件排好顺序。冒泡排序的主要优点是容易实现,冒泡排序通常会比选择排序、插入排序慢。 如,对EXAMPLE 字母进行排序: E X A M P L E .开始[A] E X [E] M P L .E移到了A之后,A移到了最前面 A E [E] X L原创 2012-11-01 10:02:19 · 983 阅读 · 0 评论 -
java算法:图遍历(深度优先和广度优先)
java算法:图遍历递归图形遍历或深度优先搜索,系统地访问图中所有的结点的方法,如,树的遍历,也是很多递归算法的基础。 访问v,递归地访问每个附属于v的(未访问过的)结点,如果图是连通的,则最终能到达所有的结点。 例1:深度优先搜索 Java代码 private void dfs(int k){ visit(k); visited[k原创 2012-11-01 10:01:19 · 2655 阅读 · 0 评论 -
java算法:递归二叉树算法
java算法:递归二叉树算法二叉树的本质是递归结构,很多可以使用递归分治法完成的,推广了遍历算法。 在只给定指向树的一个指针的前提下,经常需要找到树的各种结构参数的值。 例1:树参数的计算,树的结点树和高度 Java代码 private static int count(Node h){ if(h == null){ reut原创 2012-11-01 10:00:41 · 1042 阅读 · 0 评论 -
java算法:字符串
java算法:字符串在C语言和其他语言中,串指的是长度变化的字符数组,有一个起始点和一个标识串结束的终止符。在Java中,串是具有内嵌语言支持的高级抽象结构,它的表示是隐藏的。串是具有价值的数据结构,因为一些计算方面的应用会应用到文本数据,可以直接使用串来表示,可以直接、有效地访问内存字节,而内存字节对应着串中的字符。即,大多数情况下,串抽象结构与应用的需求相匹配,并能充分利用机器的能力。原创 2012-10-26 12:44:09 · 1112 阅读 · 0 评论 -
java算法:数据结构
java算法:数据结构java算法:如何处理数据是开发计算机程序的一个基本步骤。在java和其他编程语言中自然使用的重要的构建块。介绍的数据结构,用于构建能满足多种应用需求的基本的抽象数据类型。原创 2012-10-26 12:42:17 · 842 阅读 · 0 评论 -
java算法事例:连通性
java算法事例:连通性假设现在一个整数对序列,每个整数代表某种类型的对象,用p-q对表示“p连接到q”,又假设连接具有传递性,即p连接到q,q连接到r,则p连接到r。 例一:解决连通性问题的快速查找算法 Java代码 public class QuickF { public static void main(String[] args) {原创 2012-10-25 21:14:41 · 1009 阅读 · 0 评论 -
java算法:递归算法
java算法:递归算法递归算法时通过解决相同问题的一个或几个小例子来解决问题的算法。在java中,实现递归方法就是调用自身的方法。 例1:阶乘函数递归实现 Java代码 static int factorial(int n){ if(n == 0){ return 1; } return n * facto原创 2012-11-01 09:57:45 · 1042 阅读 · 0 评论 -
java算法:树与二叉树
java算法:树树是一种数学抽象,它在算法设计和分析中起着重要的作用:使用树来描述算法的动态特性,构建和使用明确的数据结构是树的具体实现。 在计算机应用中,树结构的一种最熟悉的应用是用来组织文件系统。 树的类型:树,有根的树,有序树,M叉树和二叉树。 二叉树是特殊类型的有序树,有序树是特殊类型的有根树,而有根树又是特殊类型的树。不同类型的树自然出现在不同的应用中。 二叉树是一个原创 2012-11-01 09:59:47 · 1587 阅读 · 0 评论 -
java算法:选择排序
java算法:选择排序选择排序:找数组中的最小元素与第一个位置的元素比较交换,然后找第二个最小的元素并与第二个位置的元素比较交换,一直进行下去,直到整个数组排序完毕。 如,对EXAMPLE 字母进行排序: E X A M P L E[A] X E M P L E 第一位置最小值A[A] [E] X M P L原创 2012-11-01 10:03:21 · 1013 阅读 · 0 评论 -
java算法:一流的ADT
java算法:一流的ADT客户程序处理的应用越来越复杂,而ADT通过构建越来越强大的抽象层帮助管理创建客户程序的复杂性。在这个过程中,可能会出现隐患。一流数据类型是我们能在程序中使用的方式与使用基本数据类型的方式相同的数据类型。如果只能通过接口来访问,那就是一流的ADT。写一个程序计算第N个单位根并把他们每个都提升到N次幂来检查计算。 例1:复数的ADT接口 Java代码原创 2012-10-26 12:46:16 · 1097 阅读 · 0 评论 -
java算法:算法分析事例
java算法:算法分析事例假设:有N个银行卡,给定M个交易中任一笔交易是否涉及到该N个银行卡中的任意一张。(针对该运用,N可能很大,M可能巨大。估算目标运行时间。) 例一:顺序查找 Java代码 public static int sequentialSearch(int a[], int v, int s, int r){ int i;原创 2012-10-26 12:36:39 · 932 阅读 · 0 评论 -
java算法:算法分析
java算法:算法分析因为要比较完成同一个任务的不同算法,预测算法在新环境中的性能,所以需要对算法进行数学分析。 虽然实验分析对其中一些任务可能已经满足了,但是数学分析会给我们提供更多的信息。 算法分析具有挑战性。通过仔细研究程序,找到数学量表达的运行时间,并对这些数学量进行数学分析,得出数学公式,再进行比较。虽然有很多因素影响着算法的运行时间,但是精确地预测某个算法的运行时间也是原创 2012-10-25 21:15:26 · 936 阅读 · 0 评论 -
java算法:树遍历
java算法:树遍历在给定一棵树的前提下,系统的处理树中的每个结点。 在链表中,沿着单个指针从一个结点移动到另一个结点;但对于树,必须做出某种决策,因为有多个指针可走。 二叉树: 前序:先访问结点,再访问左子树和右子树。 中序:先访问左子树,在访问结点,然后访问右子树 后续:先访问左右子树,再访问结点。 例1:递归树遍历 Java代码 pri原创 2012-11-01 10:00:30 · 1319 阅读 · 0 评论 -
java算法:动态编程
java算法:动态编程分治法,简单的说就是把问题分成多个子问题,当子问题不独立时,情况就复杂了。 例1:斐波纳契数列 Java代码 static int f(int i){ if(i 1){ return 0; } if(i == 1){ return 1; }原创 2012-11-01 09:59:01 · 1084 阅读 · 0 评论 -
java算法:分治法
java算法:分治法分治法用于算法设计的最重要实例:在一个程序中使用两个或多个递归调用。 例1:用分治法找到最大值 Java代码 static double max(double a[], int l, int r){ if(l == r){ return a[l]; } int m = (l + r)原创 2012-11-01 09:58:40 · 2041 阅读 · 1 评论 -
java算法:冒泡排序
java算法:冒泡排序冒泡排序:不断遍历文件,交换倒序的相邻元素,直到文件排好顺序。冒泡排序的主要优点是容易实现,冒泡排序通常会比选择排序、插入排序慢。 如,对EXAMPLE 字母进行排序: E X A M P L E .开始[A] E X [E] M P L .E移到了A之后,A移到了最前面 A E [E] X L原创 2012-11-01 10:04:01 · 975 阅读 · 0 评论 -
java算法:插入排序
java算法:插入排序如,对EXAMPLE 字母进行排序: E X A M P L E 开始 E [X] A M P L E E[A] E X M P L E A A E [M] X P L E ... A E M [P] X L E A原创 2012-11-01 10:03:39 · 890 阅读 · 0 评论 -
java算法:算法基础
算法是指适合作为计算机程序实现的解决问题的方法,这里使用java语言加以实现。大多数算法都设计计算机所使用的数据的组织方法。这种方法所创建的对象即数据结构。所以说数据结构也是计算机科学中研究的主要对象。所以需要研究数据结构从而理解算法。简单的算法可能用到复杂的数据结构。相反的,复杂的算法可能用到简单的数据结构。研究数据结构的特性,对于算法的实现很有帮助。算法的重要意义在于:它有可能帮助原创 2012-10-25 21:13:59 · 1210 阅读 · 1 评论