news 2026/6/9 21:36:17

基于Matlab实现和相等的两个不相交子集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Matlab实现和相等的两个不相交子集

确认与验证 作业

程序目的

抽取n个不相同的两位数 (10~99),验证这n个数组成的集合能找到两个不相交子集,其所有元素之和相等。

附加要求

假设抽取n个不相同的两位数,总是能找到两个元素之和相等的不相交子集,求n的最小值。

测试过程

  1. 运行Q30.m,输出如下:
the set is 91 90 89 88 83 64 55 33 21 18 one solution is: first subset is: 55 33 second subset is: 88
  1. 阅读代码,分析算法
n = 10; A = 10:99; random_num = A(randperm(numel(A),n));%随机选出10个2位数 random_num = sort(random_num,'descend'); %排序 disp('the set is ') disp(random_num) indx = ff2n(n); S = zeros(1,2^n); for k = 1:2^n S(k) = sum(random_num(boolean(indx(k,:)))); end [S2,indx2] = sort(S); k = 1; stop_flag = 1; while stop_flag if S2(k) == S2(k+1) hasInterSet = max(indx(indx2(k),:) + indx(indx2(k+1),:)); if hasInterSet<2 disp('one solution is:') disp('first subset is:') disp(random_num(boolean(indx(indx2(k),:)))) disp('second subset is:') disp(random_num(boolean(indx(indx2(k+1),:)))) stop_flag = 0; else k = k+1; end else k = k+1; if k == 2^n stop_flag = 0; disp('can not find the sub sets'); end end end
  1. 分别在第8131827行设置断点,在断点处查看变量是否符合预期。
  2. 根据分析结果,优化代码。
  3. 重复步骤三,直至程序运行情况符合预期。
  4. Q30.m程序封装为一个函数,调用该函数,重复执行,直至出现某一次找不到和相等的两个不相交子集,此时判定该n不满足条件;或到达重复次数上限,上限为1000000 次,此时判定该n符合条件。
  5. 更改n的值,从初始值10开始,以步长1递减,重复执行上一步骤。
  6. 根据上一步骤,找到满足要求的最小的n 。

优化

  1. 26-27行的条件分支冗余,hasInterSet<2恒成立。
    1. 实验现象:设置于第27行的断点,在超过3000000次运行过程中均未触发。
    2. 理论依据:任何求和相等的相交子集对,都能找到其对应的、前置的求和相等的不相交子集对,而这个前置子集对被找到时,程序即已停止迭代。
  1. 15stop_flag建议更改为continue_flag,更加符合变量功能。

测试结果

满足条件的n最小为8 。

♻️ 资源

大小:133KB

➡️资源下载:https://download.csdn.net/download/s1t16/87404306

注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 8:19:28

振动器-Android studio软件源代码-java语言

振动器 App 简介与使用说明 一、软件简介 &#x1f4f1; 软件定位 本软件是一款基于 Android 系统的多功能振动控制应用&#xff0c;通过调用设备振动马达&#xff0c;提供多种预设振动模式和高度自定义的振动编辑功能&#xff0c;满足用户在提醒、反馈、娱乐等场景下的多样化…

作者头像 李华
网站建设 2026/6/10 12:59:24

人工智能应用- 人机对战:04. 蒙特卡洛树搜索

蒙特卡洛树搜索&#xff08;MCTS&#xff09;是 AlphaGo 成功的核心技术之一。围棋中的最大挑战在于如何评估当前局势&#xff0c;而MCTS 通过模拟走棋到终局来进行评估。为了提高模拟走棋的效率&#xff0c;MCTS 并不会扩展所有可能的路径&#xff0c;而是通过随机采样的…

作者头像 李华
网站建设 2026/5/29 16:21:54

雨量监测站 雨量实时监测系统

问&#xff1a;这款翻斗式自动雨量站的核心定位是什么&#xff1f;为什么能被称为防汛抗旱的“千里眼”&#xff1f;答&#xff1a;核心定位是全自动高精度雨量监测终端&#xff0c;主打“精准采集、稳定运行、免维护、低功耗”&#xff0c;专为防汛抗旱、水资源监测设计&#…

作者头像 李华
网站建设 2026/6/10 12:57:15

拖延症福音 10个AI论文网站测评:MBA毕业论文写作+格式规范全攻略

在当前学术研究日益数字化的背景下&#xff0c;MBA学员在撰写毕业论文时面临诸多挑战&#xff0c;如选题构思困难、文献资料繁杂、格式规范不熟悉以及写作效率低下等问题。为帮助更多学生高效完成论文任务&#xff0c;本次测评基于2026年的实测数据与用户真实反馈&#xff0c;全…

作者头像 李华
网站建设 2026/6/9 19:40:42

JumpServer API 使用指南

JumpServer 是开源的堡垒机系统,本文档介绍如何通过 API 进行自动化管理。 一、API 认证方式 JumpServer 支持多种认证方式: 认证方式 说明 适用场景 Session 登录后使用 session_id Web 页面 Token 一次性 Token,有有效期 临时调用 Private Token 永久 Token 脚本调用 Acc…

作者头像 李华
网站建设 2026/6/10 0:44:31

互联网大厂Java求职面试实战:从Spring Boot到AI技术的全栈考察

互联网大厂Java求职面试实战&#xff1a;从Spring Boot到AI技术的全栈考察 本文通过模拟互联网大厂Java岗位的求职面试&#xff0c;展现了严肃的面试官与搞笑的水货程序员谢飞机之间的问答。场景涵盖电商与内容社区的业务背景&#xff0c;问题围绕Java核心技术栈、微服务架构、…

作者头像 李华