算法学习之基础(背包 列队 栈) 习题1.3.34随机背包的实现

背包的API

void add()

int size()

boolean isEmpty()

背包的遍历用Iterator

代码、

 1 package gh;
 2
 3 import java.util.Iterator;
 4 /**
 5  * 随机背包
 6  * @author ganhang
 7  *
 8  * @param <T>
 9  */
10 public class RandomBag<T>implements Iterable<T> {
11     private int n;//元素数量
12     private T [] bag;
13     public RandomBag(int max){
14         bag=(T[])new Object[max];
15     }
16     public boolean isEmpty(){
17         return n==0;
18     }
19
20     public int size(){
21         return n;
22     }
23     public void add(T item){
24         bag[n++]=item;
25     }
26
27     @Override
28     public Iterator<T> iterator() {
29         // TODO Auto-generated method stub
30         return new RandomBagIterator();
31     }
32     private class RandomBagIterator implements Iterator<T>{
33         public RandomBagIterator(){
34             shuffle(bag);//构造函数中随机排列下数组中的元素
35         }
36         private void shuffle(T b[]){//数组的随机排序
37             int N=b.length;
38             for(int i=0;i<N;i++){
39                 int r=i+(int)(Math.random()*(N-i));
40                 T temp=b[i];
41                 b[i]=b[r];
42                 b[r]=temp;
43             }
44         }
45         @Override
46         public boolean hasNext() {
47             // TODO Auto-generated method stub
48             return n!=0;
49         }
50
51         @Override
52         public T next() {
53             // TODO Auto-generated method stub
54             return bag[--n];
55         }
56
57         @Override
58         public void remove() {
59             // TODO Auto-generated method stub
60
61         }
62
63     }
64
65 }
时间: 2024-07-31 12:46:38

算法学习之基础(背包 列队 栈) 习题1.3.34随机背包的实现的相关文章

算法学习之基础(背包 列队 栈) 习题1.3.33泛型双向队列

前几天写的.. 1 package gh; 2 3 import java.util.Iterator; 4 5 /** 6 * 泛型双向队列(双向链表实现) 7 * @author ganhang 8 * 9 */ 10 public class Deque<T> implements Iterable<T> { 11 private Node first; 12 private Node last; 13 private int n=0; 14 public Deque(){

算法学习 - 后缀表达式 (C++ 栈实现)

后缀表达式就是把一个式子进行树的后序遍历.然后根据这个顺序来求值. 栈来实现的时候很简单. 例如中缀表达式:6 * [ 5 + ( 2 + 3 )  * 8 + 3 ] 则 后缀表达式为:6 5 2 3 + 8 * + 3 + * 下面上代码: // // main.cpp // postfixExpression // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #inc

数据结构与算法学习 第1季03 栈 队列 树 图

2015年学习计划安排: http://www.cnblogs.com/cyrus-ho/p/4182275.html 栈:LIFO的线性表 队列:FIFO的线性表 树:(递归定义)n个结点的有穷集合,对非空树,有且仅有一个称为根的结点,n>1时,其余结点分为m个互不相交的有限集,而每一个集合本身也是一棵树,并称为根的子树 图:任意两个数据元素之间都可以存在关系的组织结构 二叉树的存储:可以选择用多重链表的数据结构 二叉树的遍历:先序,中序,后序 图的存储:邻接矩阵(不适于存储稀疏图)与邻接表

数据结构和算法学习总结04 线性表---栈

栈 栈(Stack)是特殊的线性表,是只允许在一端进行插入和删除的线性表. 允许插入和删除的叫栈顶,反之则是栈底. 栈的插入称为进栈,删除称为出栈. 特性是:后进先出,所以栈也叫后进先出表,简称LIFO表(Last In First Out). 因为栈是线性表,所以也有顺序表和链表两种形式,一般我们常用顺序表. 从代码中可以看出:与顺序表相比实际上就是插入和删除操作发生了改变. #include <iostream> using namespace std; const int Stack_S

算法学习记录-栈的应用--表达式运算

前面做了栈的基本操作 总感觉需要做一个实际的例子来检验一下. 这里我将用栈来做一个简单的四则运算. 目标比较简单: 做一个带小括号(“()”)的四则运算,如果要加入到中括号(“[]”)或者大括号(“{}”),依次类推. 求一个表达式: 用下面这个算是做例子,程序最后应该可以算出任何带小括号的运算. 3+(32-6)*9+5*3-(3*(65-15)/5)+12; 方法一:后缀法. 1.了解中缀和后缀表示法 中缀表示法:刚才的那个算是就是中缀表示法,我们通常看到的数学符号就是中缀表示法,即数字在计

算法学习 - 括号匹配(栈实现)C++

括号匹配是栈最典型的应用了. 其实思路很简单,就是遇到一个左括号就压栈,遇到一个右括号就弹栈,看是否匹配就好了.最后检查下栈里是不是有剩余的括号就行了. 上代码~: // // main.cpp // bracketMatch // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #define ElementType char usi

算法学习_栈

以蓝书为学习参考,进行的栈的学习 例题1: 实现一个栈,支持Push,Pop和GetMin(查询栈中最小的值)在O(1)完成 算法实现思路:建立两个栈,A存原本的数据,B存以栈底开头的每段数据的最小值 Push(X),在A中插入X,在B中插入min(B的栈顶数据,X).执行GetMin只需要输出B.top()即可 例题2: Input 8 I 2 I -1 I 1 Q 3 L D R Q 2 Output 2 3 //对顶栈算法 #include <bits/stdc++.h> using n

algorithms第四版学习进程(一)背包,栈,队列

背包: 它是一种不支持从中删除元素的集合数据类型,目标就是帮助收集全部的元素,并且迭代遍历所有收集到的元素.迭代的顺序不确定,并且与用例无关. 主要的API: Bag()       创建一个空的背包 void     add(Item item) 添加一个元素 boolean isEmpty() 判断是否为空 int  size() 背包中的数量 java实现: 链表: import java.util.Iterator; import java.util.NoSuchElementExcep

【算法学习笔记】30.动态规划 01背包和完全背包的关系

首先先说明一下01背包和完全背包问题的区别 01背包:有 N 件物品和一个容量为 V 的背包.放入第 i 件物品耗费的费用是 Ci,得到的价值是 Wi.求解将哪些物品装入背包可使价值总和最大.(可以不装满) 完全背包:有 N 种物品和一个容量为 V 的背包,每种物品都有无限件可用.放入第 i 种物品 的费用是 Ci,价值是 Wi.求解:将哪些物品装入背包,可使这些物品的耗费的费用总和不超过背包容量,且价值总和最大. 先说结论: 两个问题的最优解都要用DP来解决,实现的过程也非常像只是在内层循环中