zoukankan      html  css  js  c++  java
  • 分冶算法思想

    1.分冶算法思想是将一个计算复杂的问题分为规模较小,计算简单的问题,,然后综合各个小问题得到最终问题的答案。

    2.分冶算法的执行过程

    • 对于一个对魔为N的问题,若该问题可以容易的解决,则直接解决,否则执行下面的步骤。
    • 将该分解为M个规模较小的子问题,子问题相互独立,并且与原问题形式相同。
    • 递归的解这些问题,
    • 然后,将各子问题的姐合并得到原问题的解。

    3.分冶算法例子

    java实现:

    package com.sjx.test1;
    import java.util.Scanner;

    public class FenYeA {
        static final int MAXNUM = 30;

      //这个函数的功能是,将真假币数组从中间分开,比较前一半和后一半的重量,看看哪个重。
        static int FalseCoin(int coin[], int low, int high)
        {
            int i, sum1, sum2, sum3;
            int re = 0;
            sum1 = sum2 = sum3 = 0;
            if(low+1==high)
            {
                if(coin[low]<coin[high])
                {
                    re = low +1;
                    return re;
                }
                else
                {
                    re = high+1;
                    return re;
                }
            }
            if((high-low+1)%2==0)
            {
                for(i=low; i<=low+(high-low)/2; i++);
                    sum1 = sum1+coin[i];
                for(i=low+(high-low)/2+1; i<=high; i++)
                    sum2 = sum2+coin[i];
                if(sum1>sum2)
                {
                    re = FalseCoin(coin, low+(high-low)/2+1, high);
                    return re;
                }
                else if(sum1<sum2)
                {
                    re = FalseCoin(coin, low, low+(high-low)/2);
                    return re;
                }
                else
                {
            }        
        }
            else
            {
                for(i=low; i<=low+(high-low)/2-1; i++)
                    sum1=sum1+coin[i];
                for(i=low+(high-low)/2+1; i<=high; i++)
                    sum2 = sum2 +coin[i];
                sum3 = coin[low+(high-low)/2];
                if(sum1>sum2)
                {
                    re = FalseCoin(coin, low+(high-low)/2+1, high);
                    return re;
                }
                else if(sum1<sum2)
                {
                    re = FalseCoin(coin, low, low+(high-low)/2-1);
                    return re;
                }
                else
                {
                }
                    if(sum1+sum3==sum2+sum3)
                    {
                        re = low + (high-low)/2;
                        return re;
                    }
            }
            return re;
    }
        public static void main(String[] args)
        {
            int[] coin = new int[MAXNUM];
            int i, n;
            int weizhi;
            System.out.println("分冶算法求解假银币问题!");
            System.out.print("请输入假币的个数:");
            Scanner input = new Scanner(System.in);
            n = input.nextInt();
            System.out.print("请输入银币的真假:"); //真币的重量都是相同且重量是比较重的,而假币是比较轻的
            for(i=0; i<n; i++)
            {
                coin[i] = input.nextInt();
            }
            weizhi = FalseCoin(coin, 0, n-1);
            System.out.println("在上述"+MAXNUM+"个银币中,第"+weizhi+"个银币是假的!");
            input.close();
        }
    }
  • 相关阅读:
    日常排雷:redis报错 could not get a resource from the pool
    阿里云centos服务器tomcat启动后,浏览器请求无响应
    并发生产顺序单据号测试
    json 数据 格式,请求接口,部分字段无法注入
    baomidou 动态数据源@DS 使用问题
    SpringMVC框架深入(八)--SpringMVC原理
    Spring框架深入(七)--json数据交互
    框架理论深入(六)--拦截器
    Spring框架深入(五)--文件上传和异常处理
    int和Integer的区别
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5997753.html
Copyright © 2011-2022 走看看