包含java分治思想的词条

博主:adminadmin 2022-12-12 16:03:07 107

本篇文章给大家谈谈java分治思想,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

请教 java 分治法求最小子数组和

这是分治求最大子数组和

首先重要点是:递归,这个是关键,何为递归,就是自己调用自己,比如这个代码中的helper方法,就是递归,该代码运行时,会自己调用自己很多次,数组就会两分,两分再两分,这样就会把大的问题分解成小的问题,最后把小的问题汇集起来得到答案。

你表达不出的东西和没理解的就是这个递归,别小看这个递归,这是本代码的关键点,最重要的部分。

弄不懂java项目的分层思想

建议 楼主了解下MVC

一般的项目大概分为4层

dao 就是数据操作层

一般放对数据库进行操作的方法,比如查找某条数据

biz 业务处理层

对用户的数据进行业务逻辑处理比如注册时,判断用户注册的用户名是否已存在,如果已存在返回用户错误信息,否则将用户注册的信息写入数据库

servlet 逻辑判断层

对页面的请求响应数据进行逻辑处理,如封装等

jsp 表现层

将程序处理的最终结果显示给用户

他们之间的联系就是,比如注册:

用户在jsp页面进行表单填写,点击提交到一个servlet,servlet将注册信息封装成javaBean交给biz层处理,这时候biz层对javaBean解封将用户注册的用户名提取出来调用dao层的checkUserName()进行判断该用户名是否已存在.如果存在返回一个信息给servlet告知用户该用户名已存在,请重新注册.如果该用户名不存在,说明可注册,biz再调用dao层的savaUser()方法将用户的注册信息写入数据库,返回servlet一个注册成功的信息,最后由servlet将这些处理的最终结果返回给jsp页面给用户.

建议楼主去多看看别人的项目,或者自己写些小项目这样在写程序的过程中能更贴切的理解这些过程存在的意义

总之,分层思想的存在是更方便的管理和维护

JAVA程序经常用到“递归”,“递归”的基本思想是

递归的核心思想是分解。把一个很复杂的问题使用同一个策略将其分解为较简单的问题,如果这个的问题仍然不能解决则再次分解,直到问题能被直接处理为止。

比如求 1+1/2+1/3+...+1/n的和,如果按照我们正常的思维,就会使用一个循环,把所有的表示式的值加起来,这是最直接的办法。如果使用递归的思维,过程就是这样的,要求1+1/2+1/3+...+1/n的值,可以先求s1=1+1/2+1/3+...+1/(n-1)的值,再用s1加上1/n就是所求的值,而求s1的过程又可以使用上面的分解策略继续分解,最终分解到求1+1/2的值,而这个问题简单到我们可以直接解决,自此问题得到解决。

递归强调的分治的策略,再举个例子,有一种排序算法叫归并排序,其思想是这样的:要对一个无序的数组进行排序,可以将这个数组分解为2个小数组,然后对这两个数组分别排序,再把排好序的两个数组合并。而这一过程中只有“对两个数组分别排序”不是我们能解决的,但是这个问题可以使用上面的策略进行再次的分解,最后这个问题就被分解到对2个元素的数组进行排序,而这个问题简单到我们可以直接处理。

上面提到的分解的策略,或者说算法,抽象出来就是我们的函数,因为在这个过程中我们要不同的使用这个策略来不断的分解问题,所以代码上就体现为这个函数会不断的调用自身。还有一点,并不是所有的递归都是可以实现的,或者说有意义的。如果在分解的过程中,问题最终不能分解到一个可以直接解决的问题,则这个过程是没有意义,也就是无限的循环。

具体的代码都不贴了,有兴趣可以百度看看。

Java 分治法 求解一组数组元素的最大值和最小值

//求一个数组A[i...j]的最大值和最小值,分支算法,递归实现//2015.2.9//dev c++#includestdio.h#includemalloc.h int min(int a,int b){    return ab? a:b;}int max(int a,int b){    return ab? a:b;}int* MaxMin(int a[],int i,int j){     int *m=(int *)malloc(2*sizeof(int));     if(j-i+1==1){         m[0]=m[1]=a[i];         return m;     }     if(j-i+1==2){         if(a[i]a[j]){             m[0]=a[i];             m[1]=a[j];               }         else{             m[0]=a[j];             m[1]=a[i];         }         return m;     }     int k=(j-i+1)/2;     int *m1 = MaxMin(a,i,k);     int *m2 = MaxMin(a,k+1,j);     m[0]=min(m1[0],m2[0]);     m[1]=max(m1[1],m2[1]);     return m;}int main(){    int a[128];    int n;    int i;    while(scanf("%d",n)!=EOF){        for(i=0;in;i++){            scanf("%d",a[i]);        }        int *m = MaxMin(a,0,n-1);        printf("%d %d\n",m[0],m[1]);    }    return 0;}

如何进行java海量数据处理,下面一段是我摘抄的问题及处理方法

lz没理解第二步“分而治之”的思想,分治算法是将一个大问题分解为一系列与大问题性质相同的子问题,所以在分治时不可能把相同的ip分配到不同的文件中,就像你所说的,“按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中”,通过hash,两个相同的ip肯定放到同一个文件中了哈

如何理解java数据结构中的快速排序方法

原理:

快速排序也是分治法思想的一种实现,他的思路是使数组中的每个元素与基准值(Pivot,通常是数组的首个值,A[0])比较,数组中比基准值小的放在基准值的左边,形成左部;大的放在右边,形成右部;接下来将左部和右部分别递归地执行上面的过程:选基准值,小的放在左边,大的放在右边。。。直到排序结束。

步骤:

1.找基准值,设Pivot = a[0]

2.分区(Partition):比基准值小的放左边,大的放右边,基准值(Pivot)放左部与右部的之间。

3.进行左部(a[0] - a[pivot-1])的递归,以及右部(a[pivot+1] - a[n-1])的递归,重复上述步骤。

排序效果:

关于java分治思想和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-12,除非注明,否则均为首码项目网原创文章,转载请注明出处。