当前位置:首页 > 文章列表 > Golang > Go问答 > 在 Go 语言中寻找匹配的排列

在 Go 语言中寻找匹配的排列

来源:stackoverflow 2024-02-28 22:12:25 0浏览 收藏

哈喽!今天心血来潮给大家带来了《在 Go 语言中寻找匹配的排列》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

在这里,我试图形成一个包含数字对的排列,每对mm元素分隔。例如:

  • 对于 [0,2],配对排列为 [2,0, 0,2],使得 m=2,因此数字 2 由 2 个元素分隔。
  • 对于 [0,1] = 没有有效的排列

我仍然无法弄清楚排列的模式或算法,因为我需要找到最多 [0,1,2,3,4,5,6,7,8] 的排列。然而,通过手动执行此列表的有效排列是 [3,7,8,2,3,1,2,1,6,7,5,8,4,0,0,6,5,4] 。

在下面的代码中,我只能通过首先获取列表中最大的数字来重新排列列表中的数字。我想知道如何根据对的数量来分离这对(例如,如果对是2,则分离数是2)

如何对数字列表进行分隔和模式?

package main

    import "fmt"

    func MagicPairs(list []int) {
        //length := len(list) * 2
        magicPair := []int{}
        magicPair = append(list, list...)

        for i := 0; i  max {
                max = value 
            }
        }
        return max
    }

    func main(){
        list := [] int {0,1,2,3,4,5,6,7,8}
        MagicPairs(list)

    }

解决方案


您似乎试图通过将源列表加倍,然后通过重复切片和连接数组来打乱数字来找到最佳解决方案。

我认为这个问题适合采用递归方法。使用 2 * len(list) 空槽创建目标数组。 (槽是否为空必须用特殊值标记,例如-1。)然后递归地尝试将原始数组的元素放入目标数组中。

让我们看看您的示例 {0, 1, 3}。创建目标数组:

. . . . . .

尝试 0 的所有可能位置。第一个是

0 0 . . . .

现在尝试拟合1。有两种可能性

0 0 . . . .
0 0 1 . 1 .

但是这不能容纳下一个元素,3.返回一步:

0 0 . . . .
0 0 . 1 . 1

这 3 个也不适合放在这里。我们已经用尽了对零位置的搜索,所以让我们采取下一个可行的零位置:

. 0 0 . . .

只有一种放置方法:

. 0 0 . . .
. 0 0 1 . 1

现在让我们尝试调整 3,宾果!它适合:

. 0 0 . . .
. 0 0 1 . 1
3 0 0 1 3 1

现在您可以停止搜索或尝试寻找其他解决方案。在这种情况下,只有另一种解决方案,即该解决方案的反射,但有 300 种方法可以放置从 1 到 8 的数字,例如。

这种方法几乎是蛮力的,但在实践中,没有很多有效的方法来填充数组,因此可以及早检测到错误的路径。也许将大数字放在第一位可以提供更好的性能。您可以使用它并测量它。

这是一个执行此操作的程序。 (它可能看起来更像 c 而不是 go。没关系。)

package main

import "fmt"

func fit_r(res[] int, a[] int, i int) int {
    n := len(a);

    if i == n {
        fmt.Printf("%v\n", res);
        return 1;
    } else {
        count := 0;
        m := a[i];

        for j := 0; j < 2*n - 1 - m; j++ {
            if res[j] == -1 && res[j + 1 + m] == -1 {
                // place values
                res[j] = m;
                res[j + 1 + m] = m;

                // test further values
                count += fit_r(res, a, i + 1);

                // clean up and remove values again
                res[j] = -1;
                res[j + 1 + m] = -1;
            }
        }        

        return count;
    }
}

func fit(a[] int) int {
    res := make([] int, 2 * len(a));

    for i := range res {
        res[i] = -1;
    }

    return fit_r(res, a, 0);
}

func main() {
    list := [] int {0, 1, 2, 3};
    n := fit(list);

    fmt.Println(n, "solutions");
}

本篇关于《在 Go 语言中寻找匹配的排列》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

版本声明
本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
深入了解jQuery中val方法深入了解jQuery中val方法
上一篇
深入了解jQuery中val方法
修复Ubuntu上PHP服务无法启动的情况
下一篇
修复Ubuntu上PHP服务无法启动的情况
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    1186次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    1138次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    1074次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    1260次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    1250次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码