PPT 生成整数序列字典序的r-组合算法

生成整数序列字典序的r-组合算法

  • 一、PPT效果展示
  • 二、问题
    • 2.1 简述
    • 2.2 算法简述
    • 2.3 例子
  • 三、PPT实现

一、PPT效果展示

在这里插入图片描述

二、问题

2.1 简述

给定一个整数序列 (1,2,3,…n),输出其所有字典序的r-组合,注意事项:

  1. 所有组合不能重复,每个组合中的元素顺序需为字典序 (从小到大)
  2. 所有组合呈字典序 (后一组合 > 前一组合)

例:给定整数序列123456,求其4-组合
开始组合:1234
中间组合:1235,1236,1245,…
结束组合:3456

2.2 算法简述

给定一个整数序列(1,2,3,...n),其r-组合:

  1. 其必从{ 1 , 2 , . . . , r 1,2,...,r 1,2,...,r}开始,到{ n − r + 1 , . . . , n − 1 , n n-r+1,...,n-1,n nr+1,...,n1,n}结束
  2. 存在最大的一个整数 k ∈ { 1 , . . . , r } k\in \{1,...,r\} k{1,...,r},使得 A k + 1 ≤ n A_k + 1 \leq n Ak+1n A k ∉ A A_k\notin A Ak/A ( A A A为当前组合, A k A_k Ak不属于当前组合)
  3. 新的组合 A = A = A= { A 1 , . . . , A k − 1 , A k + 1 , . . . , A k + r − k + 1 A_1, ..., A_{k-1}, A_k+1, ..., A_k+r-k+1 A1,...,Ak1,Ak+1,...,Ak+rk+1}
    其中, A 1 , . . . , A k − 1 A_1, ..., A_{k-1} A1,...,Ak1是上一个组合的前一部分,新的组合从 A k A_k Ak开始更新

(个人理解)核心思想就是:由于现组合中的元素为字典序,选取最大 k k k以及使用 A k + 1 , A k + 2 , . . . A_k + 1, A_k+2, ... Ak+1,Ak+2,... 替换 A k A_k Ak及其后的元素,即可保证替换后依旧为字典序,且刚好比前一组合大“一点”

2.3 例子

例:整数序列1-6的4-组合,从1236 -> 1245: A = A = A= { A 1 = 1 , A 2 = 2 , A 3 = 3 , A 4 = 6 A_1=1, A_2=2, A_3=3, A_4=6 A1=1,A2=2,A3=3,A4=6}

  1. k = 4 k=4 k=4 A 4 = 6 A_4 = 6 A4=6 A 4 + 1 > 6 A_4 + 1 > 6 A4+1>6,不符合条件。
  2. 存在最大的 k = 3 k=3 k=3,使得 A 3 + 1 = 4 A_3+1 = 4 A3+1=4,4小于6且不属于1236。
  3. 新的组合从 A 3 A_3 A3开始更新,即 { A 1 , A 2 , A 3 + 1 , A 3 + 4 − 3 + 1 A_1,A_2,A_3+1,A_3+4-3+1 A1,A2,A3+1,A3+43+1} =
    { 1 , 2 , 3 + 1 , 3 + 4 − 3 + 1 1, 2 ,3+1, 3+4-3+1 1,2,3+1,3+43+1} = { 1 , 2 , 4 , 5 1,2,4,5 1,2,4,5}

三、PPT实现

可到博客顶端 or 通过此链接 进入资源页下载完整PPT,放映即可用

亦可自行开发:在PPT左上角选择开发工具
主要控件:文本框 和 按钮
在这里插入图片描述

核心源码:

Public Sub F()s_all = T_in.Textn = Len(T_in.Text)num = T_num.Texts = L_c.Captionk = 0ak = 0flag = 0' 计算k和AkFor i = 1 To numflag = 1' 如果大于n 则直接退出a = Mid(s, i, 1) + 1If (Val(a) > n) ThenExit ForEnd IfFor j = i To num' 如果不符合条件 标志位set为0 跳出循环b = Mid(s, j, 1)If (StrComp(a, b, 1) = 0) Thenflag = 0Exit ForEnd IfNext jIf StrComp(flag, 1, 0) = 0 Thenk = iEnd IfNext iL_k.Caption = kL_ak.Caption = Mid(s, k, 1)ak = L_ak.Caption' 下一个组合For i = num To k Step -1'Dim tmp As String'tmp = ak - k + 1 + i s_all's = Replace(s, Mid(s, i, 1), Mid(s_all, ak - k + 1 + i, 1))Mid(s, i, 1) = Mid(s_all, ak - k + 1 + i, 1)Next iL_next.Caption = s
End SubPrivate Sub B_next_Click()s_all = T_in.Textn = Len(T_in.Text)num = T_num.TextL_c.Caption = L_next.CaptionT_show = T_show + L_c.Caption + vbCr + vbLfIf StrComp(L_c.Caption, Mid(s_all, n - num + 1, num), 1) = 0 ThenMsgBox "已经是最后一个组合了"Exit SubEnd IfCall F'current = L_c.Caption'MsgBox current'MsgBox num'current = Replace(current, Mid(current, 1, 1), Mid(s, 2, 1))'MsgBox current
End SubPrivate Sub B_s_Click()s = T_in.Textnum = T_num.TextL_c.Caption = Mid(s, 1, num)T_show = ""T_show = T_show + L_c.Caption + vbCr + vbLfCall F
End SubPrivate Sub T_show_Change()End Sub

可参考的C源码

r-组合: https://blog.csdn.net/ld326/article/details/84341452

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108663.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLO目标检测——交通标志数据集+已标注voc和yolo格式标签下载分享

实际项目应用:交通安全监控、智能交通系统、自动驾驶和辅助驾驶、驾驶员辅助系统、交通规划和城市规划等等。数据集说明:YOLO交通标志检测数据集,真实场景的高质量图片数据,数据场景丰富,图片格式为jpg,分为…

Vue3统一导出局部组件和全局组件

局部组件统一导出 components新增ComponentA.vue、ComponentB.vue两个组件 新增index.js进行组件统一导入 import ComponentA from ./ComponentA.vue import ComponentB from ./ComponentB.vueexport {ComponentA,ComponentB }使用 <template><ComponentA /><…

Java判断时间间隔来决定任务执行

数据库中的任务记录表的某条记录&#xff0c;状态一直无法变更&#xff0c;导致整个任务进程卡住&#xff0c;看了代码如下&#xff0c; 正常情况是要走到这个else里面&#xff0c;执行dockingGroup.setStatus(JobStatus.FAILED.getCode());将任务状态改为失败的 &#xff0c;查…

如何在Ubuntu 20.04|18.04上安装 FreeSwitch

如何在Ubuntu 20.04|18.04上安装FreeSwitch 什么是 FreeSwitch PBX&#xff1f;FreeSwitch PBX 系统有哪些功能&#xff1f;开始部署部署前准备开始安装freeswitch 安装完成错误及问题FAQ常见配置文件及说明修改默认端口&#xff1a;防火墙配置账号密码配置/添加新用户freeswit…

目标检测笔记(十三): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程))

文章目录 一、目标检测介绍二、YOLOv5介绍2.1 和以往版本的区别 三、代码获取3.1 视频代码介绍 四、环境搭建五、数据集准备5.1 数据集转换5.2 数据集验证 六、模型训练七、模型验证八、模型测试九、评价指标 一、目标检测介绍 目标检测&#xff08;Object Detection&#xff…

浅谈STL|STL函数对象篇

一.函数对象概念 概念: 重载函数调用操作符的类&#xff0c;其对象常称为函数对象 函数对象使用重载的()时&#xff0c;行为类似函数调用&#xff0c;也叫仿函数 本质: 函数对象(仿函数)是一个类&#xff0c;不是一个函数 特点 函数对象在使用时&#xff0c;可以像普通函数那…

OpenAI开发系列(二):大语言模型发展史及Transformer架构详解

全文共1.8w余字&#xff0c;预计阅读时间约60分钟 | 满满干货&#xff0c;建议收藏&#xff01; 一、介绍 在2020年秋季&#xff0c;GPT-3因其在社交媒体上病毒式的传播而引发了广泛关注。这款拥有超过1.75亿参数和每秒运行成本达到100万美元的大型语言模型&#xff08;Large …

MFC项目改为多字节字符集界面风格变为win98风格的问题

在项目->属性->配置属性中,将字符集改为多字节字符集&#xff0c;则界面风格变成了win98风格 解决办法&#xff0c;在stdafx.h中有 #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"typewin32 nameMicrosoft.Windows.Com…

Hbase API

hbase版本&#xff1a;2.3.5 1、创建maven工程&#xff0c;引入pom依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><dependency>…

61、SpringBoot -----跨域资源的设置----局部设置和全局设置

★ 跨域资源共享的意义 ▲ 在前后端分离的开发架构中&#xff0c;前端应用和后端应用往往是彻底隔离的&#xff0c;二者不在同一个应用服务器内、甚至不再同一台物理节点上。 因此前端应用和后端应用就不在同一个域里。▲ 在这种架构下&#xff0c;前端应用可能采用前端框架&a…

了解稀疏数组

稀疏数组&#xff08;一种数据结构&#xff09; package com.mypackage.array;public class Demo08 {public static void main(String[] args) {//1.创建一个二维数组 11*11// 0&#xff1a;没有棋子 1&#xff1a;黑棋 2&#xff1a;白棋int[][] array1 new int[11][11];…

Redis总结(一)

目录 Redis简介 为什么使用Redis作为MySQL的缓存&#xff1f; 高性能 高并发 Redis数据结构及其使用场景分别是什么&#xff1f; String&#xff08;字符串&#xff09; 内部实现 常用命令 普通字符串基本操作 批量设置 计数器&#xff08;字符串内容为整数时使用&a…