• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 经典案例如何用算法实现

经典案例如何用算法实现

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了经典调度算法的实现,c语言经典算法100例,递归算法经典实例,算法竞赛入门经典,java递归算法经典实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:经典案例如何用算法实现
描述:

给你一把总长13刻度的尺子, 在尺子上最少打几个点就可以把13个以内的刻度全部通过分割的长度来组合表示出来。问题可以扩展为 0-N,N为整数。 现在要求在0-N中做最少次数的分割,可以形成一个间隔数组。并且满足就是 1- N任意的数都能用 这个间隔数组的连续子数组相加得到。
求方法


解决方案1:

哥隆尺,要保证所选的数据组合能度量出0-N所有的整数,两个数为一组,所以要满足排列组合K*(K-1)/2 >= N,例如N=13,k>=6,除去0和13两个点,就是还需要4个点就可以表示0-13所有整数。

解决方案2:

import itertools


def cuts(holes, length):
    result = []
    start = 0
    for hole in holes:
        result.append(hole - start)
        start = hole
    result.append(length - start)
    return result


def split(length):
    result = []
    hole_selection = range(1, length)
    max_hole_count = length - 1
    for i in range(max_hole_count):
        for j in itertools.combinations(hole_selection, i + 1):
            cut = cuts(j, length)
            r = []
            for k in range(1, len(cut) + 1):
                for res in itertools.combinations(cut, k):
                    s = sum(res)
                    r.append(s)
            si = True
            for l in range(1, length + 1):
                if not l in r:
                    si = False
                    break
            if si:
                if not j in result:
                    result.append(j)
    return result

results = split(13)
print results[0]
print 

for result in results:
    print result

顺手写的。。请无视各种ijkl si什么谜样的变量名。。。就是排列组合和穷举罢了

其实13个分割3块的就48个打洞方案((1, 3, 6)和(7, 10, 12)算是2个。。。)

如果要快,抓到第一个

        if si:
            if not j in result:
                result.append(j)

的时候就丢出去就完了


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 经典案例如何用算法实现

相关文章

  • 2017-06-07 PHPRedis做Mysql中间件的几个问题?
  • 2017-06-07 swoole+rabbitmq+redis构建高迸发网站
  • 2017-06-07 大家好,请问如何想jbosswar中写个图片
  • 2017-06-07 hibernaterevengxml??????
  • 2017-06-07 (shell)100644中的100是什么(文件权限)
  • 2017-06-07 七牛文件镜像本地缓存无法清除
  • 2017-06-07 (python)使用requests获取网页源码的时候报错:failedtodecodegzip
  • 2017-06-07 视频转码与播放
  • 2017-06-07 如何给外部程序只读文本框赋值(键盘事件)
  • 2017-06-07 足球联赛排名算法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 服务器如何保存图片信息?
    • 为何rand循环后总输出相同随机数
    • 正则:去掉中括号前后的双引号
    • (golang)Go中,除了使用缓存池,如何减少slice的动态分配?
    • PHP字符串中用正则表达式匹配中文出现乱码
    • Jboss处理超时页面,导致后台每隔5分钟自动重新执行的问题。
    • 指针的指针为什么这三个指针值不一样?
    • 七牛JavaSDK问题
    • 为什么我没有qiniudn这个域名?
    • [新手求助奇怪问题]codecademy上和本地shell运行同一程序,结果不同

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有