Pourquoi评论组合 le博客du Goulu博士
le博客du Goulu博士

套房infinies en Python

Python程序的代表,《Goulib》中的代码实用程序和潜在的可利用程序,以及可在开源(许可证LGPL)上使用的图书馆皮皮github,ReadTheDocs倾倒拉多克,avec des(平均值)笔记本Jupyter de démo。

Comme la valeur d'un code se mesure surtout par les tests quivérifient son bon functionnement,je me suis lancédans un ambitieux projet(de plus…):测试仪un maximum de functions de mes模块马特2et(等)itertools2en-calculant-des-suites-de-l'百科全书(en ligne des suites de nombres entiers),加上connue sous son缩写词anglais OEIS。

Pour cela j’ai fait un truc don je suis vachement-fier*:

La类序列

总工程师容器(doc胚胎)代表团成员一套(英语顺序)结束你的提名儿子建造师:

  • iterf:un它的评价者ou geénérateur制片人《洛杉矶套房的术语》(les termes de la suite l'un après l'autre)
  • 项目f:对套房参数的重新调整
  • containf:une function renvoyant vrai(True)是一名助理医生。

关于佩特·克莱尔的典型例子,《安西》首映者拉塞里(infinie)des nombres:

A000040型=序列(containf=是素数(_P))

Ensuite,l'objet ainsi crééavec n'importe quelle combinison de ces 3 paramètres peutétre utiliséindifférement公司:

  • 巴黎市长:A000040中的p():打印(p)#affiche les nombres premires(jusqu'ál'infini)
  • 委员会名单:A000040[999]#renvoie le 1000ème nombre premier(parce que Python indiceápartir de 0…)
  • comme un合奏:201420142013,A000040#renvoie True car ce nombre est premier。

清创术,治疗功能加疗效pour chacun de ces paramètres,治疗peut les utiler pour rendre les calculs bien plus rapides。关于peut explorer trois算法差异的Par example pour la suite de Fibonacci:

A000045号=序列(iterf=斐波纳契根,项f=斐波那契,包含=is_fibonacci公司)

顺便,语音评论est définie la séquence«auto descriptrice»quiorne la bannière de l’OEIS ci-dessus:

A005150型=序列(重现(λx:数字_来自_位数压扁互换压缩数字(x) ),1))

紧凑型和preque clair,不是吗?

Dérivation公司

Une Sequence peutátre dérivée e d'Une autre gráceáplusieurs方法:

  • 滤波器与序列源过滤器相对应的序列反悔。Par示例:
    A000043号=A000040.过滤器(math2.lucas_lehmer公司)
    《默森展览》(exposants de Mersenne),《诺姆布雷斯首映式》(les-nombres premires p tels que)(2^p–1)est premier。
  • 应用序列源的功能变更贴花。例如,《红楼梦》首映者佩特·塞·德菲尼尔·安西(la série des carrés des nombres premiers peut se définir ainsi):
    A001248号=A000040.适用(λn:n*n)
  • 将“利用”应用于简单的琐事,将“附加”应用于完整的序列。Par示例:
    A000215号=A001146号+1
    有限域费马命名形式命名部分(2^{2^n})
  • 积累renvoie une Sequence don le n-ième terme est obtenu en sommant les n premires termes de la Sequence来源:
    A007504号=A000040.累计()
  • 成对地反致序列产生贴花贴花功能,并对其进行分类。Ainsi la suite des differences entre nombres premiers consécutifs s'écrit:
    A001223号=A000040.成对(operator.sub)

关于peut aussi组合器deux Sequences pour en créer une nouvelle:

  • L'opérateur%(模数,pourquoi pas……)反致于pas dans L'opérande de droite上的gauche quine序列术语。艾恩斯:
    A007510号
    =A000040%A001097号
    首字母序列限定朱缪
  • L'opérateur和(和)renvoie les termes de la Sequence opérande gauche quisont aussi dans L'opèrande droite。艾恩斯:
    A020449号=A007088号&A000040型
    définit la suite des nombres premiers不要求“紧急状态”的0和1。
  • L'opérateur|(或)反致:双重后果的融合heapq.merge(堆合并)艾恩斯:
    A030513型=A030078型|A006881号
    définite les nombres ayant 4除数(don 1 et eux-mímes)comme l'union de ceux qui sont le produit de deux nombrespremiers avec ceux que sont lecube d'un nombre premier。

Il y a encore diux methodes un peu«tirées par les cheveux»du point de vue matique,mais qui functionnent très bien information:

  • 分类反致序列单调牛角面包(par défaut)en triant les termes de la Sequence d’origine。例如,表面套件三联体食腐菌dans l'ordre牛角面包:
    A024406号=序列(math2.primitive_triples).apply(lambda x:x[0]*x[1]//2).sort()
  • 独特的反致序列o'les termes redondants de la suite d'origine sont缺席,例如:
    A001097号 =A077800型.unique()//oui,parce que le 5 appartientádeux paires de nombres premiers jumeaux…

塞斯梅特德利用尊重itertools2.sorted可更改et(等)itertools2.独特功能性参数que la suite首字母缩写est“presque”triée,即savoir tant que l’écart n entre un-terme(a _i+n \leq a _i)n’excède pas le paramètre“buffer”de la function。在peutévidemment trouver des suites qui ne pourront«mathematiquement»pasétre traitées ainsi上,mais informatiquement j’arriveáreproduire les suites de l'OEIS rencontrées jusqu'ici avec buffer=100 seulement

OEIS字典

J'ai ainsi constituépeuápeu le fichier公司oeis.py公司《150年代OEIS环境的公平行动》(quidéfinite actuellement environ 150 séries de l'OEIS,et que jétoff lorsque l'ocasion se presente)。作为一个最终的模块,j'use la géniale possibilityéd'introspection de Python pour recurpower toutes les Sequence définies dans un dictionnaire fort utile pour les tests:

#Construit le dictionnaire OEIS par自省:简单和惊喜!oeis={}#关于字典的参考seqs=globals().copy()#在复制所有对象时使用déclarés dans ce模块对于seqs中的id:#关于parcourt tous les identicateurs des objets如果id[0]=='A'和len(id)==7:#ets’ils ont un nom de sésequence OEIS。..oeis[id]=seqs[id]#在les ajoute au dictionnaire上。.. seqs[id].name=id#et关于définit leur champ name

性能

最重要的一点是计算出最有效的公民行动。使用序列定义了函数iterf、itemf、containf和leurséventuelles组成的序列。

在“自动魔法”中,mais il faut tout de méme veileráuseler les algorithmes les plus efficies,et C’est mém eun des buts que je poursuis avece projet。例如,首映的提名组曲不应被视为“犯罪记录”
A020449号=A007088号&A000040型
aurait pu s'écrireégalement公司:
A020449=A000040和A007088
这是一个完美的配方,再加上一辆快速的汽车A007088,这辆车的名字是0和1千万美元,再加上名字是A000040。《最具代表性的Beaucoupt和rapide de tester是1101010101011101首歌曲的类型命名》首映式《16首奇弗莱斯和jeter ceux que contiennent d'autres chiffres que des ou 1》首映。

Malgré吹嘘“公共安全”、“私人套房”、“临时雇员”、“白痴”、“同事”、“儿子”、“总统”阿尔雷问题.J'ai doncécrit un先生décorateur(j’adore!)计算布克勒艾市温度的公平限制(qui limite le temps de calcul d'une boucle ainsi):

对于x个在里面 装饰器.itimeout(suite,1):打印(x)#affiche tous les termes calculatables en 1 seconde(au total)

Ce décorateur est utiliéen particulier丹打印上诉法院功能顺序。__代表__pour afficher les dix首映词“une Sequence”,“ou du moins ceux qu’on peut calculer en moins d'une seconde”。

Les suites particulèrement lentes堪称典范A007508号A035533号不要把我的名字写在donne le nombre de nombres inférieursé10^n满足特定条件。Faute de meilleur算法,chaque terme prend 10x+de temps que le précédent…

测验

好了,我们的测试仪是功能校正的beaux算法,虽然是简单的,但却是初始的je le rapelle。

对于ceci来说,这是一个对序列进行验证的过程,它包含了OEIS中可争议的术语。Ceci est facilitépar le fait que l’OEIS fournit pour chaque suite les n premières valeurs dans un fichier texte en酒店设施格式maison«B文件»可访问的par le web。Par示例https://oeis.org/A000040/b000040.txt网站四部十万部首映,提名首映。

Donc mon fichier公司测试环境.pyest lui aussi génialement simple*:il travel le dictionnaire oeis et pour chaque Sequence il télécharge les N termes de référence du site oeis,vérifie que les N premiers termes des la Sequence sont bien ceux attentus,et produit une erreur sinon。我们避免了10个月的限制。

Ces测试自动化测试(avec beaucoup d'autres)苏·特拉维斯-CIchaque fois que je pousse une nouvelle版本GitHub河畔Goulib,ce qui fait que je suis averti si modified cre e un problème avec une ancinne version de Python ou un Pingouin détecte un probleme invisible de mes Fenétres。

Débogage…de l'OEIS!

J'ainsi beaucoup débogué,amélioréet optimiséla functions de多功能古利卜.math2et beaucound’(与博阿库奇德)itertools2,et je compte poursuivre dans cette voie qui permet d'utiler les données de l'OEIS comme une référence,validées par de nombreux utiateurs。

Sauf que des fois,le bugétait chez eux餐厅。Et je ne suis pas peuifier d’埃弗里·普科里奇欧亚大陆:

  • A121727号,梅塞·迪安·梅坦斯(comme déjámentionnédans)cet文章,le20ème terme de la série est 145,pas 142。
  • A036275号,不要确定除了0个补给品之外的可用术语。Tant qu'a faire j'ai fourniun B-file contentant les 1000 premiers termes requis pour remplacer l'ancien quin’en avait que 500(第四个B级文件)。

这是一个重要的时刻,《世界经济展望》是一个充满活力的节日,也是一个为丁香贡献力量的节日。Peut-átre que mon谦逊projet pourrait servir de baseáun site+interactive,利用du代码(当然是Python)为计算程序注入所需的动态les-suites…

Ce long article mijotépensel加上6个mois se termine par un appel auxdu代码的诱惑bonnes volontés:这篇文章是你的动机,你在GitHub上对Goulib的贡献。

倒入ma-part je m'attaque aux无名自恋et(等)弗里德曼(nombres de Friedman)qui-seront l’occusion de nettoyer le code du网络安全规范杰·德兰内伊利用et测试le模块Goulib.expr公司

笔记

*中国外交政策…
**你的目标是为安可剧团表演…

自由放任

Votre adresse电子邮件已公开。 《印度之声》(Les champs objectiatories sont indiqués avec)*

Ce站点使用Akismet pour réduire les indésirables。En savoir plus sur comment les données de vos commentaires sont utiliées(恩萨维尔附加评论).

2条评论”套房infinies en Python