• 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
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 求一则算法(python)

求一则算法(python)

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

佚名通过本文主要向大家介绍了python算法教程,python算法,python算法题,汉诺塔递归算法python,遗传算法python代码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:求一则算法(python)
描述:

罗列出qwerty被.分割的所有情况:

q.werty
q.w.erty
qw.erty
...
q.w.e.r.t.y

解决方案1:

写了个周期性交互插入的函数riffle,模仿的是Mathematica的一个内置函数,

from itertools import product
'''
riffle([1, 2, 3, 4, 5], [x, y]) = > [1, x, 2, y, 3, x, 4, y, 5]
'''
def riffle(a1, a2):
    m ,n = divmod(len(a1), len(a2))
    return sum( zip( a1, a2*m + a2[:n] ), ())[:-1]

print [''.join(riffle("abcde", i)) for i in product(['.', ''], repeat = 4)  ]

注意,sum(.., ())的写法简洁但是低效.

python基础教程,python 下载,python 2.7,python 教程,python入门,python 爬虫,python官网,python安装,python list Mathematica code(可以在www.mathics.net在线运行):

Row@Riffle[{a, b, c, d, e}, #] & /@ Tuples[{".", ""}, 4]
(*可能是最短的吧*)

TableForm@Table[Join @@ Append[ij, {e}] // Row,
  {p, Tuples[{".", ""}, 4]}, {ij, {Transpose@{{a, b, c, d}, p}}}]
(*模仿ls的列表解析*)

解决方案2:

来个5行简单版

def add_dots(s):
    r = [s[:i] + '.' + s[i:] for i in range(1, len(s))]
    r += [j + '.' + s[i:] for i in range(1, len(s)) for j in add_dots(s[:i])]
    r += [s[:i] + '.' + j for i in range(1, len(s)) for j in add_dots(s[i:])]
    return set(r)

//效率灰常低,纯属玩玩。。

p.s. 针对"abcde"字符串的排列

某男的ruby(1.9.x)精简版:

p (?b..?e).inject([?a]){|a,q|a.product [q,?.+q]}.map &:join

简单地说就是笛卡尔积,至于看不看得懂是另一回事了……(反正我没看太懂,ruby语法太抽象。。)

某男的C精简版:

#define z(a,b) printf(#a"%s",(x>>b)&1?".":""),
main(x){z(a,3)z(b,2)z(c,1)z(d,0)puts("e");16-x&&main(x+1);}

与hit9同学协力完成了个(易读易写的)

from itertools import product
[''.join(i + j for i, j in zip('abcd', p)) + 'e' for p in product(['.', ''], repeat = 4)]

解决方案3:

具体的实现:

s = 'qwerty'

k = {}.fromkeys(s[0:-1], 0)

def foo(a, b):
	if b == len(a):
		for p, q in zip(s, a+[0]):
			print p, 
			if q:
				print '.', 
		print ''
	else:
		a[b] = 1
		foo(a, b+1)
		a[b] = 0
		foo(a, b+1)

foo(k.values(), 0)

如果你想看下实现原理: 我这里有个C版的,更清楚些:

http://hit9.org/blog/Data_Structures_... 的第2题

--------------- 10-25更新-----------

好吧.比较简短的版本来了:

下面的属于比较'不那么麻烦的做法'~ 用了itertools模块:

from  itertools import product
s = 'qwerty'
for i in product(*(([1, 0], )*(len(s)-1))):
	for p, q in zip(s, list(i)+[0]):
		print p, '.' if q else '', 
	print ''

解决方案4:

楼主 这个问题其实不难,首先肯定的是“点”是存在于两个字母之间的 ,那么你就想象有n个“位置”在n+1个字母之间,每一个“位置”有两个状态,一个是存在“点”,一个是不存在“点”,都不存在的情况被排除掉了,所以本题的核心是求集合的非空子集。所有的可能性的个数为 2^n - 1

假设 字符串为qwer,那么有三个“位置”,我们把这个三个“位置”分别命名为a,b,c
那个通过循环和二进制位的判断可以得出所有的结果
楼主静下心来看看下面的结果,悟一下,算法的复杂度还是蛮低的
index从 1 到 2^n-1 (<=) 循环,每一步判断当前index中二进制位为1对应的位,然后将"点"放到相应的位置,下面的例子当到2^3-1也就是7的时候,三个“位置”上都放上了“点”

c   b   a   
0   0   1      qwe.r 
0   1   0      qw.er
0   1   1      qw.e.r
1   0   0      q.wer
1   0   1      q.we.r
1   1   0      q.w.er
1   1   1      q.w.e.r

我自己之前写过一个SKU相关的算法,其实本质和这个问题是一样的,可以参见 http://geeklu.com/2012/09/sku/


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

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

  • (python)多叉树求值,程序高手,算法高手看过来
  • 如何用python实现《多社交网络的影响力最大化问题分析》中的算法?
  • python算法题如何进行多重判断?
  • (python)urlliburlretrieve下载pdf死循环
  • 求一则算法(python)

相关文章

  • 2017-06-07 七牛上传文件覆盖的情况
  • 2017-06-07 BloomFilter在爬虫里该如何用?
  • 2017-06-07 如何做一个开源项目?
  • 2017-06-07 七牛与视频设备的接口
  • 2017-06-07 不小心错删除了一些文件,能恢复吗?
  • 2017-06-07 如何使用正则表达式提取微博中的话题(hashtag)?
  • 2017-06-07 FileUploaded返回的info中hash有值key没有值是什么原因
  • 2017-06-07 python用金山快盘API进行上传老返回405
  • 2017-06-07 JBoss可以像tomcat那样指定程序目录吗?
  • 2017-06-07 python查询sqlite数据库问题?

文章分类

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

最近更新的内容

    • aspnetmvc多类型用户程序开发
    • 武汉是不是没有搞Python客户端开发的程序猿啊?
    • (golang)关于DefaultServeMux源码这一块没看懂,请高手解释一下
    • Flask集成CKEditor表单提交问题
    • WIN7PYTHON27GHOSTPY怎么安装呢
    • 正则匹配手机号后四位至少有一个是8?如何写?
    • 我从window拷贝cookie的字符串,在python怎么转换字符串cookie让request可以用呢?
    • c++调用python的一个函数,函数的返回值是tuple。问题:怎么解析这个tuple类型。
    • 使用PHP如何上传url地址的文件
    • Python:实时数据画图,横轴显示时间(小时,分钟),纵轴显示随时间变化的另一个量,怎样做?

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

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