算法
一夜听风雨2019
这个作者很懒,什么都没留下…
展开
-
算法第四版1.4.10 修改二分查找算法,使之总是返回和被查找的键匹配的索引最小的元素
题目1.4.10 修改二分查找算法,使之总是返回和被查找的键匹配的索引最小的元素。(且仍能够保证对数级别的运行时间)1.4.10 Modify binary search so that it always returns the element with the smallest index that matches the search element (and still guarant...原创 2019-03-05 21:18:46 · 387 阅读 · 0 评论 -
算法第四版,练习题 1.4.7
题目以统计设计输入数组的算术操作和比较的成本模型分析ThreeSum分析看不懂题目说啥意思看了下英文版本的翻译过来的意思是建立一种成本模型:统计算术操作和比较(加法和等号),并且考虑到输入数字解答模仿命题B3-sum的暴力算法使用了~N3/2次算术操作和比较输入的三个整数的计算结果和零的关系证明:每次循环该算法计算了两次加法和一次比较,每次循环执行三次操作执行频率是~N3/...原创 2019-02-23 10:37:46 · 503 阅读 · 0 评论 -
算法第四版练习1.3.21
问题编写一个方法find(),接受一条链表和一个字符串key作为参数。如果链表中的某个结点的item域的值为key,则方法返回true,否则返回false。分析迭代链表while循环和iterator都可以java代码package hk13;import book1_3.LinkedListStack;import java.util.Iterator;/** * @d...原创 2019-02-17 23:20:41 · 209 阅读 · 0 评论 -
算法第四版 习题 1.4.4
题目给TwoSum写出程序运行时间的分析分析按照啊P114的1.4.4表格来写的java代码import edu.princeton.cs.algs4.In;/** * @description: ${description} * @create: 2019-02-22 **/public class TwoSum { public static int count(...原创 2019-02-22 21:58:00 · 638 阅读 · 0 评论 -
算法第四版 1.4.3
题目修改DoublingTest,使用StdDraw产生类似于正文中的标准图像和对数图形,根据需要调整比例使图像总能够充满窗口的大部分区域分析对库函数StdDraw的理解和运用,根据图像分析增长的数量级x坐标是规模n取对数y坐标是耗时time取对数java代码import edu.princeton.cs.algs4.StdDraw;import edu.princeton.cs...原创 2019-02-22 21:31:22 · 628 阅读 · 0 评论 -
算法-第四版-练习1.4.2
题目修改ThreeSum,正确处理两个较大的int值相加可能溢出的情况分析首先jdk中定义int占4个字节, 32位(后面全部的计算都是以此为根据的)32位就是jvm仅仅给分配32个格子的空间,用以存放数据。总所周知计算机中用0和1存放数据。那么,32个格子中放满0或1的方法 有2的32次方种:或者说32位的空间能标识10进制的数字。int的取值范围为(-2147483648~214...原创 2019-02-22 21:04:11 · 658 阅读 · 0 评论 -
算法-第四版-练习1.3.10解答
题目编写一个过滤器InfixToPostfix,将算术表达式由中序表达式转为后序表达式。分析1.简化简化问题,不考虑运算的优先级,或者说优先级全部由括号确定。处理以下输入( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )2.名词解释数学表达式分为三种:前缀表达式、中缀表达式、后缀表达式。前序表达式/前缀表达式的运算符在两个运算数字(或表达式)前,中序...原创 2019-02-12 10:14:52 · 367 阅读 · 0 评论 -
算法第四版 链表练习1.3.20
题目编写一个方法delete(),接受一个int参数k,删除链表的第k个元素(如果它存在的话)。分析比如有链表1,2,3,4,5如果要删除第四个数据"4"那么就把2的next引用到2.next.next就是4…如同1.3.18里面的x.next=x.next.next代表删除x的下一个节点,然后把下下个节点接上去java代码注意是方法:deleteChoose(int numbe...原创 2019-02-17 22:10:47 · 361 阅读 · 0 评论 -
算法第四版题目1.3.19
题目给出一段代码,删除链表的尾结点,其中链表的首结点为first。分析为删除尾结点,需要找到倒数第二个结点。尾结点为node->next == null。将倒数第二个结点置为null,即可。java代码package hk13;import book1_3.LinkedListBag;import edu.princeton.cs.algs4.Stack;import j...原创 2019-02-17 21:33:46 · 307 阅读 · 0 评论 -
算法第四版 习题1.4.8 解答
题目编写一个程序,计算输入文件中相等的整数对的数量.如果你的第一个程序是平方级别的,请继续思考并以Array.sort()给出一个线性对数级别的解答分析刚开始想用binarySearch,结果不行排序以后a[i]=a[i+1],然后i++,直到a[i]!=a[i+1]注意前置条件i不超过lengthjava代码import edu.princeton.cs.algs4.Counter...原创 2019-02-23 19:29:09 · 801 阅读 · 0 评论 -
算法-第四版-练习1.3.24解答
题目编写一个方法removeAfter(),接受一个链表结点作为参数并删除该结点的后续结点(如果参数结点或参数结点的后续结点为空则什么也不做)分析参数是node,由于Node类是私有的,那么就要创建个新的node或者写个方法得到Nodejava代码package book1_3;import java.util.Iterator;/** * @description: ${de...原创 2019-02-18 20:57:04 · 360 阅读 · 0 评论 -
算法-第四版-练习1.3.25解答
题目编写一个方法insertAfter(),接受两个链表结点作为参数,将第二结点插入链表并使之成为第一个结点的后续结点(如果两个参数为空则什么也不做)。分析题目翻译的有问题比如有列表a-b-c-d-e-f方法接受2个参数(c,x)将列表修改为a-b-c-x-d-e-f根据oldNode找到current然后就是各种指定nextNode next=current.next;cu...原创 2019-02-18 21:58:57 · 192 阅读 · 0 评论 -
约瑟夫环问题:一群人围成一个圈,开始报数,第三个死,下一个从1开始,问第几位最后不死
题目有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号分析java代码package d0225;/** * @description: ${description} * @create: 2019-02-25 * 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张...原创 2019-02-25 22:07:52 · 2025 阅读 · 0 评论 -
回文数字的java实现
题目有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字。编写一个函数,判断某数字是否是回文数字。java代码package d0225;/** * @description: ${description} * @create: 2019-02-25 **/public class HuiWen { public s...原创 2019-02-25 20:17:34 · 6261 阅读 · 2 评论 -
算法-第四版-练习1.3.31解答
题目实现一个嵌套类DoubleNode用来构造双向链表,其中每个结点都含有一个指向前驱元素的引用和一个指向后续元素的引用(如果不存在则为null)。为以下任务实现若干静态方法:在头插入结点、在表尾插入结点、从表头删除结点、从表尾删除结点、在指定结点前插入新结点、在指定结点之后插入新结点、删除指定结点分析先编写一个内部的嵌套类DoubleNode,存在3个类变量Item值,next和previ...原创 2019-02-20 08:58:00 · 332 阅读 · 0 评论 -
算法-第四版-练习1.3.30解答
题目编写一个函数,接受一条链表的首结点作为参数,(破坏性地)将链表反转并返回结果链表的首结点。分析自己写不出来,参考书上的提示1.循环法2.递归法递归法看不懂,谈谈循环法使用变量first不断加1使用变量second=first.next 不断加1使用reverse不断加1.记录后面那个节点.遍历到结尾改变nextjava代码package hk13;/** * @d...原创 2019-02-20 00:17:15 · 158 阅读 · 0 评论 -
算法-第四版-练习1.3.29解答
题目用环形链表实现Queue。环形链表也是一条链表,只是没有任何结点链接为空,且只要链表非空则last.next的值就为first。只能使用一个Node类型的实例变量(last)。分析第一次写不出来.感觉要用first和last看了答案以后才发现也是可以的出列时将last.next指向last.next.next。入列时需要修改两条链接才能真正的让一个结点加入到一个环中。最后在移到las...原创 2019-02-19 13:38:31 · 267 阅读 · 0 评论 -
算法-第四版-练习1.3.28解答
题目编写一个方法max(),接受一个链表的首结点作为参数,返回链表中键最大的节点的值。假设所有键均为正整数,如果链表为空则返回0。分析1.条件:必须采用递归的办法2.刚开始不会做.看了别人的答案以后思路:1.递归必须有2个基本条件,递归到最后的时候,返回一个确定的值2.在递归的时候可以返回下一次的计算比如返回f(n-1)或者f(n.next)java代码package hk13;...原创 2019-02-19 10:01:30 · 271 阅读 · 0 评论 -
算法-第四版-练习1.3.27解答
题目编写一个方法max(),接受一个链表的首结点作为参数,返回链表中键最大的节点的值。假设所有键均为正整数,如果链表为空则返回0。分析方法的参数为Node假定键为正整数,那么max先等于0不考虑链表为空先接受Node为Current用while循环不断遍历Current且得到current的下一个值判断current.item的值和max 取得最大值.返回main方法里面要生成一...原创 2019-02-19 08:22:14 · 188 阅读 · 0 评论 -
算法-第四版-练习1.3.26解答
题目编写remove方法接受1个链表参数和1个字符串key参数删除俩表中所有item域为key的点分析1.删除有一种简单的写法是:删除x下一个节点的办法就是x.next=x.next.next但是有问题.连着的重复节点没法删除,比如abbc就没法删除2个b2.想了一下,新建个链表.如果不重复.就添加进去即可3.简化一下 第一个参数链表就不传了.用链表里面自带的firstjava...原创 2019-02-18 23:08:49 · 248 阅读 · 0 评论 -
算法第四版P98 算法1.4背包,基于链表结构来实现背包的功能
概念背包可以理解成为阉割版本的栈或者队列不在乎先进先出还是后进后出只在乎可以存放内容,并且可以迭代拿出来就可以了于是,我们可以通过栈的方法来实现背包,删掉pop取的功能就行了下面的代码是通过链表来实现背包的,迭代顺序是后进先出的java代码package book1_3;import java.util.Iterator;/** * @description: ${desc...原创 2019-02-17 20:25:23 · 184 阅读 · 0 评论 -
算法第四版 P95 算法1.3 基于链表数据结构LinkedList实现队列Queue
原理使用链表数据结构enqueue()插入元素到队列的尾巴dequeue()取出队列开始的元素,返回,然后再删除先进先出,后进后出利用链表实现队列java代码package book1_3;import java.util.Iterator;/** * @description: ${description} * @create: 2019-02-17 * 方法isEm...原创 2019-02-17 16:41:20 · 423 阅读 · 0 评论 -
算法-第四版-练习1.2.2解答
题目分析编写一个Interval1D的用例,1.从命令行接受一个整数N。(args[0])2.从标准输入中读取N个间隔(每个间隔由一对double值定义)间隔的意思就是n对自然数,标准输入就是txt文件txt准备如下素材3.并打印出所有相交的间隔对。用数组来存储所有的Interval1D对象.利用Interval1D对象的Intersects方法的返回值来判断任意两个Inter...原创 2019-02-07 09:56:10 · 232 阅读 · 0 评论 -
如何在idea里面,终端运行java文件
1,在src下面(有包还要包含包)使用命令 java xxxxx.java生成了class文件2,在src下面 使用命令javac package.xxxxxx例子F:\javalearn\ideacode\suanfa\src>cd homework1_2F:\javalearn\ideacode\suanfa\src\homework1_2>javac Ex01.java...原创 2019-02-06 22:36:17 · 6036 阅读 · 0 评论 -
java中final修饰的学习心得
类的私有变量用final修饰,如果这个私有变量不是原始数据类型的话,就还是可变的,原因就是指向的这个对象可能是可变的举例子:/** * @description: ${description} * @create: 2019-02-06 **/public class Vector { private final double[] coords; public Vec...原创 2019-02-06 20:04:12 · 164 阅读 · 0 评论 -
编写一个静态方法 lg(),接受一个整型参数 N,返回不大于 log2N 的最大整数
解题思路由于log2N=y 相当于 “2的y次方=n”因此:本题等价于:举例子计算log29=y2的0次方和N作比较,1<92的1次方和N作比较,2<92的2次方和N作比较,4<92的3次方和N作比较,8<92的4次方和N作比较,16>9那么相当于y=log29的范围在(3,4),那么则取3(不大于 log2N 的最大整数)java代码packa...原创 2019-02-04 10:29:58 · 600 阅读 · 0 评论 -
将普通二维数组转置 交换行和列
package homework1_1;/** * @description: ${description} * @create: 2019-02-03 **/public class LineAndColumnChange { public static double[][] tran1(double[][] a){ int q=a.length;//行总数...原创 2019-02-03 22:18:13 · 1028 阅读 · 0 评论 -
将整数N用二进制表示,并转换为String
算法第四版作业1.1.9自己写的tran1.官方答案tran2package homework1_1;/** * @description: ${description} * @create: 2019-02-03 **/public class TenToTwo { public static String tran2(int x){ String s=...原创 2019-02-03 20:43:15 · 277 阅读 · 0 评论 -
调和级数java实现
概念代码/** * @description: ${description} * @create: 2019-02-02 **/public class Tiaohejishu { public static double H(int x){ double sum=0.0; for(int i=1;i<=x;i++){ ...原创 2019-02-02 22:02:57 · 512 阅读 · 0 评论 -
通过"牛顿迭代法求平方根"的java实现和原理
简介牛顿法(英语:Newton’s method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。方法使用函数 f(x)泰勒级数的前面几项来寻找方程f(y)=0的根。以上维基百科原理分析具体例子求f(x)=-x2+5 当f(x)=0 求x的值答案就相当于求5的平方根在f(x)上随便取点P1(x1,y1)...原创 2019-02-02 21:44:22 · 1895 阅读 · 1 评论 -
算法-第四版-练习1.2.3解答
解题思路编写一个Interval2D的用例,从命令行接受参数N、min和max。生成N个随机的2D间隔,其宽度和高均匀地分布在单位正方形中的min和max之间。用StdDraw画出它们并打印出相交的间隔对的数量以及有包含关系的间隔对数量代码package homework1_2;import edu.princeton.cs.algs4.Interval1D;import edu.pr...原创 2019-02-07 20:52:02 · 291 阅读 · 0 评论 -
算法-第四版-练习1.26解答
题目分析如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串t,那么s被称为t的回环变位(circular rotation)。例如,ACTGACG就是TGACGAC的一个回环变位。反之亦然。判定这个条件在基因组序列的研究中是很重要的。编写一个程序检查两个给定的字符串s和t是否互为回环变位。想复杂了.想着去怎么遍历.重新生成数组.其实很简单.要有数学的思维代码package hom...原创 2019-02-07 22:14:24 · 179 阅读 · 0 评论 -
算法-第四版-练习1.2.9解答
题目分析修改 BinarySearch(请见 1.1.10.1 节中的二分查找代码),使用 Counter 统计在有查找中被检查的键的总数并在查找全部结束后打印该值。提示:在 main() 中创建一个 Counter 对象并将它作为参数传递给 rank()。看了两三遍不知道题目说啥,看了别人的答案以后才知道第二句话的意思是:用二分查找法来找数组里面的一个数字,需要找几次才能找到.或者找几次才...原创 2019-02-08 10:44:29 · 269 阅读 · 0 评论 -
算法第四版P94 算法1.2 下压堆栈(链表实现LinkedList)
说明基于链表数据结构实现Stackjava代码package book1_3;import java.util.Iterator;/** * @description: ${description} * @create: 2019-02-16 * 利用链表来实现Stack * 1 内部嵌套类Node:内容Item;指向Node * 2 成员变量:栈顶Node first ...原创 2019-02-17 15:46:16 · 212 阅读 · 0 评论 -
算法第四版 练习答案 1.4.1
题目证明从N个数中,取出3个整数的不同组合的总数为N(N-1)(N-2)/6提示 使用数学归纳法分析百度了下什么是数学归纳法:数学归纳法(Mathematical Induction, MI)是一种数学证明方法,通常被用于证明某个给定命题在整个(或者局部)自然数范围内成立原理最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步:证明当n= 1时命题成立...原创 2019-02-22 13:45:20 · 1882 阅读 · 1 评论 -
算法-第四版-练习1.3.4解答
题目编写一个Stack的用例Parentheses,从标准输入读取一个文本流并使用栈判定其中的括号是否配对完整。例如,对于[()]{}{()()} 程序应该打印true,对于 [(])则打印false。代码package hk13;import edu.princeton.cs.algs4.Stack;import edu.princeton.cs.algs4.StdIn;/**...原创 2019-02-11 11:04:04 · 251 阅读 · 0 评论 -
算法第四版P88算法1.1 下压(LIFO)栈(能够动态调整数组大小的实现) ResizingArrayStack
简介集合类抽象数据类型实现的模板,动态调整数组的大小.实现了泛型,避免了游离.实现了可迭代java代码package book1_3;import edu.princeton.cs.algs4.Stack;import java.util.Iterator;/** * @description: ${description} * @create: 2019-02-16 * ...原创 2019-02-16 21:51:23 · 435 阅读 · 0 评论 -
算法第四版 P84定容栈 FixedCapacityStackOfStrings的算法实现
题目简单版本的实现栈(LIFO)后进先出JAVA代码package book1_3;/** * @description: ${description} * @create: 2019-02-16 * FixedCapacityStackOfStrings(int cap) * void push(String item) * String pop() * boolean i...原创 2019-02-16 15:42:41 · 344 阅读 · 0 评论 -
算法第四版 P80 Dijkstra的双栈算术表达式求值算法
目的根据书的算法,自己理解以后自己默写出算法java代码package book1_3;import edu.princeton.cs.algs4.Stack;/** * @description: $Dijkstra的双栈算术表达式求值算法 * 双栈就是数字栈和操作符号栈 * @create: 2019-02-16 **/public class Evaluate { ...原创 2019-02-16 11:34:06 · 436 阅读 · 1 评论 -
算法-第四版-练习1.2.11-1.2.14解答
题目11.根据Date的API实现一个SmartDate类型,在日期非法时抛出一个异常。12.为SmartDate添加一个方法dayOfTheWeek(),为日期中每周的日返回Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday中的适当值。你可以假定时间是21世纪。13.用我们对Date的实现作为模板实现Transact...原创 2019-02-08 22:39:00 · 221 阅读 · 0 评论