zoukankan      html  css  js  c++  java
  • Algs4-1.3.34随机背包

    1.3.34随机背包。随机背包能够存储一组元素并支持表1.3.10中的API:
    表1.3.10泛型随机背包的API
    public class RandomBag<Item> implements Iterable<Item>
         RandomBag()//创建一个空随机背包
         boolean isEmpty()//背包是否为空
         int size()//背包中的元素数量
         void add(Item item)//添加一个元素
    编写一个RandomBag类来实现这份API。请注意,除了形容词随机之外,这份API和Bag的API是相同的,这意味着迭代应该随机访问背包中的所有元素(对于每次迭代,所有的N!种排列出现的可能性均相同)。提示:用数组保存所有元素并在迭代器构造函数中随机打乱它们的顺序。
    答:
    图片
    import java.util.Iterator;
    public class RandomBag<Item> implements Iterable<Item>
    {
        private Item[] a=(Item[]) new Object[1];
        private int N=0;
       
        public RandomBag()
        {
        }
       
        public boolean isEmpty()
        {
            return N==0;
        }
       
        public int size()
        {
            return N;
        }
       
        public void add(Item item)
        {
            if(N==a.length) resize(2*N);
            a[N]=item;
            N++;
        }
       
        private void resize(int max)
        {
            Item[] temp=(Item[]) new Object[max];
            for(int i=0;i<N;i++)
                temp[i]=a[i];
            a=temp;
        }
       
        public Iterator<Item> iterator()  {return new ListIterator();}
       
        private class ListIterator implements Iterator<Item>
        {
           
            private int index;
            public ListIterator()
            {
                for (int i = 0; i < N; i++)
                {
                int r = i + StdRandom.uniform(N-i);     // between i and n-1
                Item temp = a[i];
                a[i] = a[r];
                a[r] = temp;
                }
            }
            public boolean hasNext(){return index!=N;}
            public void remove(){}
            public Item next()
            {
               Item item=a[index];
               index++;
                return item;
            }//end next
          }//end class ListIterator
       
        public static void main(String[] args)
        {
            RandomBag<String> rBag=new RandomBag<String>();
            while(!StdIn.isEmpty())
            {
                String item=StdIn.readString();
                rBag.add(item);
            }
           
            for(String i:rBag)
                StdOut.print(i+" ");
        }
    }

  • 相关阅读:
    Android在layout xml中使用include完成静态加载
    ImageSwitch图像切换控件
    合并石子大总结
    子矩阵(暴搜(全排列)+DP)
    回路(一笔画问题)
    道路重建(记忆化搜索+贪心)
    【NOIP2013 普及组】车站分级
    UML的基本关联
    Matlab画图-非常具体,非常全面
    面向对象程序设计与面向过程程序设计解析
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854312.html
Copyright © 2011-2022 走看看