当然可以自己造轮子

前些天关于小学生寒假作业思考题的推文引发大量的讨论,见:连小学生都开始学编程了

我提到了其实是使用了一个 combinat::permn 轮子,生成1-9数字的全排列形式,有362880种可能性。然后有网友留言,提到了可以写一个递归函数即可产生这个排列,无需使用轮子, 我就邀请他分享一下:

网友(董理聪)投稿

应曾老师的邀请,这里发邮件说说生成全排列的算法。也只是基本算法的实现而已。

递归函数

如果一个函数在内部调用自身,就是递归函数。

通常来说,一门程序语言的教程在讲到函数的时候,也都会提及到 迭代递归

最经典的使用递归函数的例子是生成 Fibonacci 数列。

def Fibonacci(n):
  if n == 0:
    return 0

if n in [1, 2]:
    return 1

return Fibonacci(n - 1) + Fibonacci(n - 2)

于是生成全排列的方法也可以使用递归函数。

def permutations(iterable):
  if len(iterable) == 1:
    yield iterable

# 每次抽出一个元素,其他元素再产生全排列
    for i, element in enumerate(iterable):
    for p in permutations(iterable[:i] + iterable[i + 1:]):
      yield [element, ] + p

permutations(list(range(1, 9)))

这个网友强推python  ,一直在使用 Jupyter Notebook;希望我们以后的教程,比如 rm(ls = ls()) 的代码没有必要放在推文里;

学徒作业

首先是使用R语言实现这个递归函数,如果你能力足够强悍,也可以考虑shell脚本实现!

再怎么强调生物信息学数据分析学习过程的计算机基础知识的打磨都不为过,我把它粗略的分成基于R语言的统计可视化,以及基于Linux的NGS数据处理

把R的知识点路线图搞定,如下:

  • 了解常量和变量概念
  • 加减乘除等运算(计算器)
  • 多种数据类型(数值,字符,逻辑,因子)
  • 多种数据结构(向量,矩阵,数组,数据框,列表)
  • 文件读取和写出
  • 简单统计可视化
  • 无限量函数学习

Linux的6个阶段也跨越过去 ,一般来说,每个阶段都需要至少一天以上的学习:

  • 第1阶段:把linux系统玩得跟Windows或者MacOS那样的桌面操作系统一样顺畅,主要目的就是去可视化,熟悉黑白命令行界面,可以仅仅以键盘交互模式完成常规文件夹及文件管理工作。
  • 第2阶段:做到文本文件的表格化处理,类似于以键盘交互模式完成Excel表格的排序、计数、筛选、去冗余,查找,切割,替换,合并,补齐,熟练掌握awk,sed,grep这文本处理的三驾马车。
  • 第3阶段:元字符,通配符及shell中的各种扩展,从此linux操作不再神秘!
  • 第4阶段:高级目录管理:软硬链接,绝对路径和相对路径,环境变量。
  • 第5阶段:任务提交及批处理,脚本编写解放你的双手。
  • 第6阶段:软件安装及conda管理,让linux系统实用性放飞自我。
(0)

相关推荐

  • 什么是递归函数?

    FlyWine2018-02-21 09:42:10 44910 收藏 120 分类专栏:C++文章标签:递归函数c++递归函数什么是递归 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...

  • 读完这篇算法总结,我感觉自己距离谷歌更近了

    读完这篇算法总结,我感觉自己距离谷歌更近了

  • 这个递归不太难

    相信大家都知道什么是递归,但在实际开发的时候用过多少次递归呢? 程序的世界有句话叫"人用循环,神用递归",很多情况下我们都会优先使用循环而不是递归.我和几个朋友聊过,他们的看法是: ...

  • Learn Functional Python in 10 Minutes | Datacruiser's Blog

    最近在学习python,对函数式编程特别感兴趣,当然,这并不是python的专利,不过最近确实看到一遍文章正好以python为例来讲解函数式编程,特把它翻译过来与大家分享. 原文链接如下: Learn ...

  • 【每周一坑】程序猿的浪漫

    最近公众号上的自媒体们炸了,因为苹果爸爸把腾讯爸爸的赞赏给关闭了! 讲真,这对咱们编程教室的影响还是很大的.之前每次发完文章,晚饭还能靠打赏加个鸡腿儿,这下泡汤-- 来看本周的题目. 前几日刷朋友圈时 ...

  • 第39天: Python itertools 模块

    简介 在 Python 中,迭代器是一种非常好用的数据结构,其最大的优势就是延迟生成,按需使用,从而大大提高程序的运行效率.而 itertools 作为 Python 的内置模块,就为我们提供了一套非 ...

  • 造轮子-ThreadPoolExecutor

    以下代码的实现逻辑出自于公众号 码农翻身 <你管这破玩意叫线程池?> - PS:刘欣老师在我心中是软件技术行业的大刘. 线程池接口 public interface Executor { ...

  • 54 个官方 Spring Boot Starters 出炉!别再重复造轮子了…….

    前段时间 Spring Boot 2.4.0 也发布了,本文栈长再详细总结下最新的 Spring Boot 2.4.0 官方的 Starters 都有哪些. Spring Boot starters ...

  • 动手造轮子:实现一个简单的依赖注入(三) --- 支持属性注入

    Intro 前面写了几篇依赖注入的文章,有兴趣的小伙伴可以参考文末 Reference 部分中的链接,一直有小伙伴希望增加属性注入的支持,昨天试着加了一下,思路很简单,在获取到服务实例之后检查实例中有 ...

  • 动手造轮子:实现一个简单的 AOP 框架

    动手造轮子:实现一个简单的 AOP 框架 Intro 最近实现了一个 AOP 框架 -- FluentAspects,API 基本稳定了,写篇文章分享一下这个 AOP 框架的设计. 整体设计 概览 I ...

  • 造轮子-AgileConfig基于.NetCore的一个轻量级配置中心

    微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移.玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的可以选,比如spring-cloud-config,apoll,disconf等 ...

  • 一款开源的视频弹幕功能项目,不用重复造轮子了!

    嗨喽!Java后端编程的各位小伙伴们,由于公众号做了乱序推送改版,为了保证公众号的推文能够第一时间及时送达到大家手上,大家记得将公众号 加星标置顶 ,公众号每天会送上Java技术干货推文 ! 上篇推文 ...

  • LG U+公布iUICC技术,运营商为何要重复造轮子

    在5G时代,由于5G基带和更多天线的存在,以及相关功耗的问题,也使得智能手机的重量普遍有了一定程度的上浮,在这一情况下,为智能手机产品"减重",打造更为轻薄化的产品也成为了几乎所有 ...

  • 蛮夷欧洲:苏美尔文明,人类第一次造轮子

    作者:希夷先生 编辑:九月生人 要研究欧洲和西方文明的问题,如果脱离地中海文明这个大框架,只把视野局限于欧洲,那么西方文明从何而来,西方文明为什么是现在这样,欧洲的未来又将会是怎样,这些问题都无法得到 ...

  • 造车有什么难的?无非就是四个轮子,加几个沙发!

    眼下我国汽车行业正陷入一个怪圈:大把新能源新势力一个接一个的倒下:而大把新能源新势力又在一个接一个的起来.似乎总有死不完的资本,总有不怕死的资本家和投机者.于是车友们都看不懂了:难道如今的世道造车如此 ...