数据结构 --- 贪心算法

 ------使用 java 编写,逻辑上所有语言通用

一、什么是贪心算法

( 1 )概念

        贪心算法,是指在对一个问题求解时,总是选择当前看起来最好的情况;

        在不从整体最优的情况上考虑,贪心算法所做出的是在某种意义上的最优解;

        但是贪心算法并不能对所有问题都适用,在准备使用贪心算法时,一定要保证该程序当前选择的情况不会影响到后续的选择,否则极有可能获得一个错误的答案;

二、如何理解贪心算法

( 1 )例题

        有 6 只蚂蚁,它们分别能搬动 4 、8 、2 、5 、5 、6 克重的东西,现有一堆重量分别为 7 、 3 、 4 、 5 、6 、4 克的且都不同的食物,问这些蚂蚁最多可以带走多少种食物?( 蚂蚁不会多个搬一个,且不会进行多次搬运 )

( 2 )图解法

2.1 

        根据贪心算法的定义,让力气最小的蚂蚁拿最轻的食物,如果拿不动就拿让力气第二小的蚂蚁尝试,然后换下一蚂蚁拿下一重量的食物…………灵魂画手,哈哈 ~ ~ 

2.2

         当所有的可搬动的食物都有了蚂蚁搬运时,我们可以开始着手计算数量;

数据结构 --- 贪心算法_第1张图片

 2.3

        因为要求的只是种类最多的情况,所以不用太过关注搬运的分别是多少重量的食物;

数据结构 --- 贪心算法_第2张图片

( 3 )代码演示法

3.1

        第一步建立两个数组分别存储蚂蚁的力气和食物的重量;

数据结构 --- 贪心算法_第3张图片

3.2

        对两个数组进行排列;

 3.3

        建立一个计数器统计所搬食物的种类;

        建立一个循环,统计蚂蚁最多能够搬走多少种食物;

        ( 因为两个数组已经进行过排序,内部数据都是从小到大

数据结构 --- 贪心算法_第4张图片

三、代码分享

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        int[] strength = { 4 , 8 , 2 , 5 , 5 , 6 };
        int[] food = { 7 , 3 , 4 , 5 , 6 , 4 };

        Arrays.sort( strength );
        Arrays.sort( food );

        int count = 0;
        for ( int i = 0,j = 0 ; i < strength.length ; i++ ) {
            if ( food[j] <= strength[i] ){
                count++;
                j++;
            }
        }
        System.out.println( count );

    }
}

你可能感兴趣的:(数据结构,数据结构)