集合A(|A|=n)上可以定义多少种不同的等价关系

2023-12-19 12:38

本文主要是介绍集合A(|A|=n)上可以定义多少种不同的等价关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

离散笔记

  • 集合A(|A|=n)上可以定义多少种不同的等价关系?
    • 看个栗子
    • 再看一个例子
    • 一个直观的递归想法
    • 代入递归思想
    • 一般规律
    • 拓展
    • 思考

集合A(|A|=n)上可以定义多少种不同的等价关系?

一个包含n元素的集合A,有 2 n 2^{n} 2n个子集, A × A A \times A A×A笛卡尔积集合中有 n 2 n^2 n2个元素,对应的不同的二元关系(子集)有 2 n × n 2^{n \times n} 2n×n个,那其中有多少个为等价关系呢?

看个栗子

例: 求出A={1,2,3}上所有的等价关系
求解思路:先求出A的所有划分, 然后根据划分写出对应的等价关系。

划分和等价关系为一一对应关系
划分里的元素即为等价关系得到的等价类
也就是说,划分即为商集

在这里插入图片描述
可见对应有五个等价关系。
让我们看看有什么规律:

每个划分块里面的元素范围为:[1,n]
每个划分块非空
每个划分块不交
所有划分块的并集为集合A本身

再看一个例子

n=1时,只有一个划分;
n=2时,一个划分块的情形有1个,2个划分块的有1个,共2种划分;
n=3时,一个划分块的情形有1个,2个划分块的有3个,3个划分块的有1个,共5种划分;
。。。

嗯!思考一下,我们可以归纳嘛!

找规律!!

n=11
n=22
n=35
n=415
n=n?

能看出规律吗?
不等差也不等比!
-------------------------------------------------------------------(这是一条无情的分割线)
看来没那么容易找规律?

一个直观的递归想法

f ( n ) = 操 作 ∗ f ( n − 1 ) + C f(n)=操作*f(n-1)+C f(n)=f(n1)+C
是不是适用呢?

代入递归思想

一般地,非空集合A上的等价关系与A上的划分一一对应。设n元集合上的划分有 B n B_n Bn种。
  
例2:设A={1,2,3,4},则A上的划分有如下四种情况:

  1. 元素4被单独分为一类,剩余3个元素随便划分,这样的划分总共有 B 3 B_3 B3种;
  2. 元素4与另3个元素中的某一个一起被分为一类,剩余2个元素随便划分,这样的划分总共有 B 2 B_2 B2种;
  3. 元素4与另3个元素中的某2个一起被分为一类,剩余1个元素随便划分,这样的划分总共有 B 1 B_1 B1种;
  4. 元素4与另3个元素一起被分为一类,剩余0个元素随便划分,这样的划分总共有 B 0 B_0 B0种;

哦哦哦出来了,出来了!!,
B 0 = 0 B_0=0 B0=0 B 1 = 1 B_1=1 B1=1呀,
(于是我们得到了结论)
并且其中

元素4和抽取的其他某个元素分为一类,满足组合形式即为 C 3 1 C_3^1 C31
元素4和抽取的其他两个元素分为一类,满足组合形式即为 C 3 2 C_3^2 C32
元素4和抽取的其他三个元素分为一类,满足组合形式即为 C 3 3 C_3^3 C33
同理
元素4和抽取的其他0个元素分为一类,满足组合形式即为 C 3 0 C_3^0 C30

因此,我们有
B 4 = C 3 0 B 3 + C 3 1 B 2 + C 3 2 B 1 + C 3 3 B 0 B_4=C_3^0B_3+C_3^1B_2+C_3^2B_1+C_3^3B_0 B4=C30B3+C31B2+C32B1+C33B0

一般规律

集合 A ( ∣ A ∣ = n ) = { a 1 , a 2 , . . . , a n } A(|A|=n)=\{ a_1,a_2,...,a_n\} A(A=n)={a1,a2,...,an}上可以定义多少种不同的等价关系?

元素 a n a_n an被单独分为一类,剩余n-1个元素随便划分,这样的划分总共有 C n − 1 0 B n − 1 C_{n-1}^0B_{n-1} Cn10Bn1种;
元素 a n a_n an和剩余n-1个中抽取的某个元素分为一类,剩余n-2个元素随便划分,划分总共有 C n − 1 1 B n − 2 C_{n-1}^1B_{n-2} Cn11Bn2种;
元素 a n a_n an和剩余n-1个中抽取的某两个元素分为一类,剩余n-3个元素随便划分,划分总共有 C n − 1 2 B n − 3 C_{n-1}^2B_{n-3} Cn12Bn3种;
元素 a n a_n an和剩余n-1个中抽取的某三个元素分为一类,剩余n-4个元素随便划分,划分总共有 C n − 1 3 B n − 4 C_{n-1}^3B_{n-4} Cn13Bn4种;
… …
元素 a n a_n an和剩余n-1个中抽取的n-1个元素分为一类,剩余0个元素随便划分,划分总共有 C n − 1 n − 1 B 0 C_{n-1}^{n-1}B_{0} Cn1n1B0种;

因此,我们有
B n = C n − 1 0 B n − 1 + C n − 1 1 B n − 2 + C n − 1 2 B n − 3 + C n − 1 3 B n − 4 + . . . . . . + C n − 1 n − 1 B 0 B_n= C_{n-1}^0B_{n-1}+ C_{n-1}^1B_{n-2}+ C_{n-1}^2B_{n-3}+ C_{n-1}^3B_{n-4}+......+ C_{n-1}^{n-1}B_{0} Bn=Cn10Bn1+Cn11Bn2+Cn12Bn3+Cn13Bn4+......+Cn1n1B0

这就是递归定义出来的结果!
我们可以一一验证是正确的。

拓展

B n B_n Bn被称为 Bell Number
详情请见:https://mathworld.wolfram.com/BellNumber.html

思考

还有别的方法吗?
例如:
划分即为序列插空分成若干部分,每部分非空不交,即:
a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an

若分成n部分,即:
a 1 ∣ a 2 ∣ . . . ∣ a n a_1 | a_2| ...|a_n a1a2...an

若分成2部分,即为
a 1 ∣ a 2 , . . . , a n a_1|a_2,...,a_n a1a2,...,an a 1 , a 2 ∣ . . . , a n a_1,a_2 | ...,a_n a1,a2...,an,或 a 1 , a 2 , a 3 , ∣ . . . , a n a_1,a_2,a_3,|...,a_n a1,a2,a3,...,an等。
此外,还需要考虑序列的排序,因为
a 1 ∣ a 2 , . . . , a n a_1|a_2,...,a_n a1a2,...,an a 2 , ∣ a 2 , . . . , a n a_2,|a_2,...,a_n a2,a2,...,an是不一样的。

你能从中得到规律吗?
期待不同的回答。

这篇关于集合A(|A|=n)上可以定义多少种不同的等价关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512189

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http