离散数学第2章计算机和探索第2题

问题:给定一个有限集,试列出其幂集中的所有元素。

解决方法1:To generate all subsets of S,list all 2bit strings of length n(for instence, in increasing order),and write down the corresponding subsets.

解决方法2:以集合<a,b,c,d>为例

第一步: 添加空集,

第二步: 添加单元素成为单元素子集,并且将它存入tempBefore字符串数组做为转换成两元素子集时使用,temp中单元素子集为a,b,c,d。

第三步: 用第二步生成的tempBefore和集合S,对每个子集添加一个元素,生成n+1元素子集。

1 private static int change(String[] tempAfter, String[] tempBefore,
2             String[] first) {
3         int tempAfterLength = 0;
4         for (int i = 0; !tempBefore[i].equals("#"); i++) {
5             tempAfterLength = addTempAfter(tempAfter, tempBefore[i], first,
6                     tempAfterLength);
7         }
8         return tempAfterLength;
9     }

private static int addTempAfter(String[] tempAfter, String string,
            String[] first, int tempAfterLength) {
        int location = getLastStringLocation(first, string);
        if (first[location + 1].equals("#")) {
            return tempAfterLength;
            /**
             * 示例如下,如果tempBefore[i]为d!ef 而输入串集合为"v,<a,v>,d,ef#"
             * 那么我们可以知道通过子集d!ef已经不能再生成新的子集了
             * */
        }

        for (int i = location + 1; !first[i].equals("#"); i++) {
            tempAfter[tempAfterLength] = string + "!" + first[i];
            tempAfterLength++;
        }

        return tempAfterLength;
    }

/**
	 * 得到字符串String中最后一个元素在输入集合中的位置 例如输入集合为"v,<a,v>,d,ef#",String 为v!d
	 * 则返回位置为2,因为元素d在first数组中的下标为2 其中的str为取的String中最后一个 本例中取的是d
	 * */
	private static int getLastStringLocation(String[] first2, String string) {
		String str = "";
		int i = 0, location = 0;
		for (int j = 0; j < string.length(); j++) {
			str = str + string.charAt(j);
			if (string.charAt(j) == ‘!‘) {
				str = "";
			}
		}
		for (i = 0; !first2[i].equals("#"); i++) {
			if (first2[i].equals(str)) {
				location = i;
			}
		}
		return location;
	}

  

时间: 2024-10-10 10:20:12

离散数学第2章计算机和探索第2题的相关文章

离散数学第11章计算机课题第1题

问题: 给定无向简单图的相邻矩阵,确定这个图是不是树 定理1 一个无向图是树当且仅当在它的每对定点之间存在唯一简单通路. 可以给出一个算法:使用广度优先搜索,能够遍历所有节点并且在访问一个节点之后. 后面遍历的到的节点中不再包含这个节点. 算法如下: 数据结构: Mark数组存储节点是否被遍历过的,-1代表没被遍历,1代表已经被遍历 relationString数组存储 图中包含元素 第一步: 找到一个节点做为树根,将它的所有孩子标记为1, 第二步: 以上一步产生的所有孩子为根节点,广度优先搜索

《浪潮之巅》读书笔记——第4章 计算机工业的生态链

第4章 计算机工业的生态链  摩尔定律    Intel创始人戈登‘摩尔 1965年    集成电路集成度每18个月翻一番    推广:同样的IT产品,18个月价钱降一半    也不是严格的18个月,在附近徘徊,基本准确  安迪-比尔定律    Intel CEO 安迪+比尔盖茨    软件的更新必须消耗掉硬件的提升,使人们不断主动更新自己的硬件  反摩尔定律    google CEO 埃里克施密特    18个月后卖同样的产品,营业额下降一半,要好好应对才行 <浪潮之巅>读书笔记--第4章

第一章 计算机基础知识

第一章 计算机基础知识 第一部分 概述 1.1946年2月15日,第一台计算机 ENIAC 2.物理原件(电子原件) 第一代:电子管.第二代:晶体管.第三代:中小规模集成电路.第四代:超大规模集成电路.第五代:超导材料.第六代:人工智能.#考试考到第四代. 3.计算机的分类 巨型机,大型机,中型机,小型机,微型机 现在的巨型机也是存在的 4.微处理器(CPU.中央处理器)由控制器.寄存器.运算器组成 第二部分 微机系统的组成 CPU>内存>外存 #速度 CPU和内存之间有一个CACHE,叫做高

第一章计算机基础

第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 等组成,只有硬件但硬件之间无法进行交流和通信. 人用程序通过编程语言解释器,指令操作系统,最终控制电脑硬件来做符合人们需求的过程 1.2 操作系统 操作系统用于协同或控制硬件之间进行工作,常见的操作系统有那些: windows linux centos [公司线上一般用] mac 1.3 解释器或编译器 编程语言的开发者写的一个工具,将用户写的代码转换成010101交给操作系统去执行

【学习报告】【离散数学】第一章 什么是证明

第一章 什么是证明 本学习报告用书是由电子工业出版社出版的<计算机科学中的数学 信息与只能时代的必修课>一书,会在我本身的理解上对原书内容加以修改,可能会与原书内容有出入:若有问题欢迎在下面评论指正探讨.:) 本章内容: 1.什么是命题,以及命题的相关种类 2.谓词跟命题的关系 3.了解公理化方法 4.逻辑推理以及四种方法 5.一些证明的建议 1.什么是命题,以及命题的相关种类 定义:命题是一个或真或假的语句(表述). 举个例子:(真命题)2 + 3 = 5:(假命题)1 + 1 = 3: 由

九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题

题目1165:字符串匹配 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2497 解决:858 题目描述: 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出行号.匹配字符串.匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配.如"aa[123]bb",就是说aa1bb.aa2bb.aa3bb都算匹配. 输入: 输入有多组数据. 每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(

2000年华中科技大学计算机研究生机试真题 阶乘

题目1179:阶乘 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4993 解决:1464 题目描述: 输入n,求y1=1!+3!+...m!(m是小于等于n的最大奇数)y2=2!+4!+...p!(p是小于等于n的最大偶数). 输入: 每组输入包括1个整数:n 输出: 可能有多组测试数据,对于每组数据,输出题目要求的y1和y2 样例输入: 4 样例输出: 7 26 来源: 2000年华中科技大学计算机研究生机试真题 #include <iostream> #include <

题目1117:整数奇偶排序 (2008年北京大学图形实验室计算机研究生机试真题)

题目描述: 输入10个整数,彼此以空格分隔.重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列:2.然后输出其中的偶数,并按从小到大排列. 输入: 任意排序的10个整数(0-100),彼此以空格分隔. 输出: 可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔. 样例输入: 4 7 3 13 11 12 0 47 34 98 样例输出: 47 13 11 7 3 0 4 12 34 98 提示: 1. 测试数据可能有很多组,请使用while(cin>>

考察数据类型的掌握---题目1166:迭代求立方根 (2009年北京航空航天大学计算机研究生机试真题)

题目描述: 立方根的逼近迭代方程是 y(n+1) = y(n)*2/3 + x/(3*y(n)*y(n)),其中y0=x.求给定的x经过n次迭代后立方根的值. 输入: 输入有多组数据.每组一行,输入x n. 输出: 迭代n次后的立方根,double精度,保留小数点后面六位. 样例输入: 3000000 28 样例输出: 144.224957 #include "stdio.h" int main(int argc, char* argv[]) {     long n;     dou