PHP运行出现Notice

问题:  Notice:Notice是PHP的提示而非报错,PHP本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示。在网站正式开始运行时,会把提示关了的。关闭PHP提示的方法:搜索php.ini:error_reporting=E_ALL改为:  error_reporting=E_ALL&~E_NOTICE还有个不是办法的办法就是:  在每个文件头上加  error_reporting(0);  虽然不好弄但是可以解决问题<span><?php//禁用错误报告error_reporting(0);//报告除了警告以外的所有错误error_reporting(E_ALL&~E_NOTICE);//报告运行时错误error_reporting(E_ERROR|E_WARNING|E_PARSE);//报告所有错误error_reporting(E_ALL);?></span> ...
代码星球 代码星球·2020-04-04

实现自己的shell--MIT xv6 shell

参考代码:#include<stdlib.h>#include<unistd.h>#include<stdio.h>#include<fcntl.h>#include<string.h>#include<assert.h>#include<sys/types.h>#include<sys/stat.h>//Simplifedxv6shell.#defineMAXARGS10//Allcommandshaveatleastatype.Havelookedatthetype,thecode//typicallycaststhe*cmdtosomespecificcmdtype.structcmd{inttype;//''(exec),|(pipe),'<'or'>'forredirection};structexeccmd{//普通指令inttype;//''char*argv[MAXARGS];//argumentstothecommandtobeexec-ed};structre...

Modular arithmetic and Montgomery form 实现快速模乘

题目:电音之王题解:求数列前n项相乘并取模思路:①、这题的乘法是爆longlong的,可以通过快速幂的思想去解决(按数位对其中的一个数进行剖分)。当然你的乘法会多出一个log的复杂度...②、O(1)快速乘:一种O(1)复杂度求解整数相乘取模的思路(它对于64位的整型也是适用的):  来自2009年国家集训队论文:骆可强:《论程序底层优化的一些方法与技巧》(参考中附原文链接)typedeflonglongll;#defineMOL123456789012345LLinlinellmul_mod_ll(lla,llb){lld=(ll)floor(a*(double)b/MOL+0.5);llret=a*b-d*MOL;if(ret<0)ret+=MOL;returnret;}ViewCode③、正解:dls一句话题解(当然是看不懂了...)  参考中附一篇MontgomeryModularMultiplication的博客(当然也是看不懂了...日文)题解:(dls的代码)#include<bits/stdc++.h>usingnamespacestd;#define...

简易计算器实现

中缀表达式转后缀表达式:思路:维护一个队列和一个栈。然后按下面过程进行处理:①、当队列元素为数字时 ·直接保存到队列②、当队列元素为加减时 ·判断栈顶的运算优先级,由于+-的优先级小于等于所有运算符 ·所以循环取出栈顶的运算符并入队列 ·直到遇到栈为空、遇到左括号时才停止,最后再将当前+-入栈③、当队列元素为乘除时 ·判断栈顶的运算优先级,由于*/的优先级只小于等于*/ ·所以循环判断栈顶运算符,如果栈顶运算符是*/,则取出并入队 ·直到遇到栈为空、遇到左括号、遇到+-时才停止,最后再将当前*/入栈④、当前队列元素为左括号时 ·直接入栈⑥、当前队列元素为右括号时 ·循环将栈顶运算符出栈并入队列 ·直到遇到左括号停止,并将左括号出栈弃掉.⑦、当队列元素判断结束后 ·判断栈是否为空,如果不为空,则将栈存储的运算符出栈并入队列&nb...
代码星球 代码星球·2020-04-04

硬币找零问题的动态规划实现

一,问题描述给定一组硬币数,找出一组最少的硬币数,来找换零钱N。比如,可用来找零的硬币为:1、3、4 待找的钱数为6。用两个面值为3的硬币找零,最少硬币数为2。而不是4,1,1因此,总结下该问题的特征:①硬币可重复多次使用。②在某些情况下,该问题可用贪心算法求解。具体可参考:某种找换硬币问题的贪心算法的正确性证明 二,动态规划分析为了更好的分析,先对该问题进行具体的定义:将用来找零的硬币的面值存储在一个数组中。如下:coinsValues[i]表示第i枚硬币的面值。比如,第i枚硬币    面值   1               1   2               3&...

赫夫曼树JAVA实现及分析

一,介绍1)构造赫夫曼树的算法是一个贪心算法,贪心的地方在于:总是选取当前频率(权值)最低的两个结点来进行合并,构造新结点。2)使用最小堆来选取频率最小的节点,有助于提高算法效率,因为要选频率最低的,要么用排序,要么用堆。用堆的话,出堆的复杂度为O(logN),而向堆中插入一个元素的平均时间复杂度为O(1),在构建赫夫曼树的过程中,新生成的结点需要插入到原来的队列中,故用堆来维持这种顺序比排序算法要高效地多。 二,赫夫曼算法分析①用到的数据结构分析首先需要构造一棵赫夫曼树,因此需要二叉链表这种数据结构(类似于二叉树);其次,假设树中各个结点出现的频率保存在一维数组中,初始时,根据该数组构造出每个结点。算法每次从选取两个频率最小的结点,构造出一个新结点,新结点的频率为这个结点的频率之和。那么如何选取频率最小的那两个结点呢?一种方式是先将结点的频率排序,另一种方式是使用优先级队列(比如最小堆),这里我们使用优先级队列。结点之间要能够比较(比较谁出现的频率小啊),故结点类需要实现Comparable接口,结点类(内部类)的定义如下:1privateclassBinaryNodeim...

数据结构--二项队列分析实现

一,介绍什么是二项队列,为什么会用到二项队列?与二叉堆一样,二项队列也是优先级队列的一种实现方式。在 数据结构--堆的实现之深入分析的末尾,简单地比较了一下二叉堆与二项队列。对于二项队列而言,它可以弥补二叉堆的不足:merge操作的时间复杂度为O(N)。二项队列的merge操作的最坏时间复杂度为O(logN)。二项队列的合并操作为什么是O(logN)?因为:对于N个结点的二项队列,最多只有logN棵二项树。而合并操作就是合并两棵高度相同的二项树。(合并操作是指将二个二项队列合并,合并这两个二项队列中高度相同的二项树) 二,二项队列的基本操作及实现在详细介绍二项的队列的基本操作之前,先了解下二项队列这种数据结构:1)一个二项队列是若干棵树的集合。也就是说,二项队列不仅仅是一棵树,而是多棵树,并且每一棵树都遵守堆序的性质,所谓堆序的性质,就是指每个结点都比它的左右子树中结点要小(小顶堆)。这棵树称为“二项树”2)二项队列中的树高度不同,一个高度至多存在一棵二项树。将高度为0的二项树记为B(0),高度为k的二项树记为B(k)也就是说,对于k>...

数据结构--堆的实现之深入分析

一,介绍以前在学习堆时,写了两篇文章:数据结构--堆的实现(上)  和  数据结构--堆的实现(下), 感觉对堆的认识还是不够。本文主要分析数据结构堆(讨论小顶堆)的基本操作的一些细节,比如insert(插入)操作和deleteMin(删除堆顶元素)操作的实现细节、分析建堆的时间复杂度、堆的优缺点及二叉堆的不足。 二,堆的实现分析堆的物理存储结构是一维数组,逻辑存储结构是完全二叉树。堆的基本操作有:insert--向堆中插入一个元素;deleteMin--删除堆顶元素故堆的类结构如下:publicclassBinaryHeap<TextendsComparable<?superT>>{privateT[]array;privateintcurrentSize;publicBinaryHeap(){}publicBinaryHeap(T[]array){}publicvoidinsert(Tx){//dosomething}publicTdeleteMin(){}//otheroperations.......

无向图的最短路径算法JAVA实现

一,问题描述给出一个无向图,指定无向图中某个顶点作为源点。求出图中所有顶点到源点的最短路径。无向图的最短路径其实是源点到该顶点的最少边的数目。本文假设图的信息保存在文件中,通过读取文件来构造图。文件内容的格式参考这篇文章第一部分。 二,算法实现思路无向图的最短路径实现相对于带权的有向图最短路径实现要简单得多。源点的最短路径距离为0,从源点开始,采用广度优先的顺序,首先将与源点邻接的顶点的路径求出,然后再依次求解图中其他顶点的最短路径。由于顶点的最短路径的求解顺序是一个广度优先的顺序,因此需要一个辅助队列。初始时,将源点的最短路径距离设置为0,将源点入队列。然后,在一个while循环中,从队列中弹出顶点,遍历该顶点的邻接点,若该邻接点的距离未被更新过(表示该邻接点未被访问过),更新邻接点的最短路径距离为该顶点的距离加上1,并将所有的邻接点入队列。 三,最短路径算法的实现感觉该算法的实现与二叉树的层序遍历,有向图的拓扑排序算法实现都非常的相似。他们都采用了广度的思想在里面。广度优先的思想就是:处理完某个顶点后,去处理该顶点的所有邻接点,处理完它的邻接点后,再去处理更远(...

有向图的拓扑排序算法JAVA实现

一,问题描述给定一个有向图G=(V,E),将之进行拓扑排序,如果图有环,则提示异常。要想实现图的算法,如拓扑排序、最短路径……并运行看输出结果,首先就得构造一个图。由于构造图的方式有很多种,这里假设图的数据存储在一个文件中,每一行包含如下的信息:LinkID,SourceID,DestinationID,Cost其中,LinkID为该有向边的索引,SourceID为该有向边的起始顶点的索引,DestinationID为该有向边的终止顶点的索引,Cost为该有向边的权重。0,0,1,11,0,2,22,0,3,13,2,1,34,3,1,15,2,3,16,3,2,1(以上示例引用自网上,该图仅用来表示存储图信息的文件内容的格式,对拓扑排序而言,上图显然存在环)对于以下的拓扑排序程序,只用到了SourceID,和DestionatinID这两个字段。拓扑序列以顶点的索引表示。后续会实现无向图的最短路径算法,就会用到Cost这个字段啦!!! 二,算法实现思路拓扑排序,其实就是寻找一个入度为0的顶点,该顶点是拓扑排序中的第一个顶点序列,将之标记删除,然后...

二叉树的层序遍历算法实现

一,问题描述实现二叉树的层序遍历--从根开始,依次向下,对于每一层从左向右遍历。 二,算法分析层序遍历与先序、中序、后序遍历不同。层序遍历用到了队列,而先、中、后序需要用到栈。因此,先、中、后序遍历可以采用递归方式来实现,而层序遍历则没有递归方式。算法步骤:初始时,根结点入队列然后,while循环判断队列不空时,弹出一个结点,访问它,并把它的所有孩子结点入队列。 三,代码实现1publicvoidlevelTraverse(BinarySearchTree<T>tree){2levelTraverse(tree.root);3}4privatevoidlevelTraverse(BinaryNode<T>root){5if(root==null)6return;78Queue<BinaryNode<T>>queue=newLinkedList<>();//层序遍历时保存结点的队列9queue.offer(root);//初始化10while(!queue.isEmpty()){11BinaryNode<...

二叉查找树的递归实现及递归分析

整体思路:二叉查找树是一棵树,对于树,需要把节点表示出来。由于节点仅仅在树的内部使用,故采用内部类的形式实现。树作为一种ADT,需要属性及在其上进行的操作。由于大部分树的操作都是从根节点开始的,因此需要一个根节点属性,并可根据自己的需求来确定需要实现哪些操作。对于二叉查找树,它不是一般的二叉树,它具有特点:任一节点的左子树上的节点都比它小,右子树上的节点都比它大。因此,二叉查找树的方法实现需要满足这个特点。 一,树由结点组成结点的定义如下:1privatestaticclassBinaryNode<T>{2Telement;3BinaryNodeleft;4BinaryNoderight;56publicBinaryNode(Telement){7this(element,null,null);8}910publicBinaryNode(Telement,BinaryNode<T>left,BinaryNode<T>right){11this.element=element;12this.left=left;13this.right=rig...

Netty 实现HTTP文件服务器

一,需求文件服务器使用HTTP协议对外提供服务。用户通过浏览器访问文件服务器,首先对URL进行检查,若失败返回403错误;若通过校验,以链接的方式打开当前目录,每个目录或文件都以超链接的形式展现,可递归访问,并下载文件。 二,关键实现代码①文件服务器启动类需要添加的通道处理器如下:@OverrideprotectedvoidinitChannel(SocketChannelch)throwsException{ch.pipeline().addLast("http-decoder",newHttpRequestDecoder());ch.pipeline().addLast("http-aggregator",newHttpObjectAggregator(65536));ch.pipeline().addLast("http-encoder",newHttpResponseEncoder());ch.pipeline().addLast("http-chunked",newChunkedWriteHandler());ch.pipeline().addLast("fileS...

JAVA中写时复制(Copy-On-Write)Map实现

1,什么是写时复制(Copy-On-Write)容器?写时复制是指:在并发访问的情景下,当需要修改JAVA中Containers的元素时,不直接修改该容器,而是先复制一份副本,在副本上进行修改。修改完成之后,将指向原来容器的引用指向新的容器(副本容器)。 2,写时复制带来的影响①由于不会修改原始容器,只修改副本容器。因此,可以对原始容器进行并发地读。其次,实现了读操作与写操作的分离,读操作发生在原始容器上,写操作发生在副本容器上。②数据一致性问题:读操作的线程可能不会立即读取到新修改的数据,因为修改操作发生在副本上。但最终修改操作会完成并更新容器,因此这是最终一致性。 3,在JDK中提供了CopyOnWriteArrayList类和CopyOnWriteArraySet类,但是并没有提供CopyOnWriteMap的实现。因此,可以参考CopyOnWriteArrayList自己实现一个CopyOnWriteHashMap这里主要是实现在写操作时,如何保证线程安全。importjava.util.Collection;importjava.util.HashMap;...

数据结构--堆的实现(下)

1,堆作为优先级队列的应用对于普通队列而言,具有的性质为FIFO,只要实现在队头删除元素,在队尾插入元素即可。因此,这种队列的优先级可视为按时间到达的顺序来衡量优先级的。到达得越早,优先级越高,就优先出队列被调度。更一般地,元素不能单纯地按时间到来的先后来分优先级(或者说插入的顺序),在这种情形下,使用堆更容易表达优先级队列。Sometimestheprocessingorderoftheitemsinaqueueneedstobebasedoncharacteristicsofthoseitems,ratherthanjusttheordertheyarecreatedoraddedtothequeue. 2,堆的两个性质:①结构性质--堆从结构上看是一颗完全二叉树。然而,从物理存储上看,堆的实现基本上是使用一个一维数组存储堆中所有的结点。②orderingproperty---这是由堆的定义决定的,如大顶堆:根结点的值要大于左右孩子的值。由于堆具有这两个性质,故在对堆进行操作时,如插入操作、删除操作……都需要维护好这两个性质,因此:这也是为什么...
代码星球 代码星球·2020-04-04
首页上一页...569570571572573...下一页尾页