我与算法的缘分

2023-05-16


            六年前,我完全不知道算法是什么东西。六年后,我看到算法就两眼放光。六年的时间让我从算法小菜鸟蜕变成算法爱好者。

            大一上学期,我对算法一点概念都没有,当时老师让我们用伪代码写算法,我基本上都是从网上找答案或者直接空着不写。给我印象最深的一个算法是计算两个分数相加,其中涉及求最大公约数,用的是辗转相除法。那时觉得这个算法很难懂,现在回首再看时,觉得这个算法还是很简单的。大一下学期,听到算法和数据结构对程序员是如何如何重要的传言,就抱着《零基础学算法》,啃哧啃哧啃了大半个学期也只啃完了前几章。那个学期我学会了二分查找算法,了解了贪心算法,递归算法,分治算法的基本原理。最重要的是我第一次学会了一种编程语言,C。说到学C的经历,我特别特别感谢一个人,我的师傅。我是在一个算法讨论群里认识师傅的,那时我傻傻呼呼的问scanf是什么东西,所有人都笑而不答,只有师傅耐心的回答我是输入的意思。之后,我在C上遇到不懂的就问师傅,结果一个月不到就把那本C语言书啃完了,并练手写了一堆小程序。期间,师傅还给我灌输了代码规范的理念,让我受益匪浅。

            大二,师傅又给我推荐ACM群,鼓励我去hdu网站上刷题。我在acm.hdu网站上从最简单的算法题A+B做起,然后就迷上了它,每天下课都去网站做题,不会的就去ACM群里,与来自不同大学的学生讨论。周末从早上起床一直编代码到睡觉,有时觉得编程的人是孤独的,现在回想起那段岁月,都觉得心酸,但当时真的很疯狂很快乐,能做自己喜欢的事是最幸福的。师傅还给了我一张他AC掉的题目列表,让我从容易的题目上手。他比我先刷掉200多题目,我在后面不停地追赶他,他刷掉400多个就停了。我在大二的寒假终于在AC掉的题目数目上超过了师傅,当时还得意洋洋地把这件事告诉了师傅,就像一个小孩考试考了高分,然后眼巴巴地等着大人夸奖自己。ACM刷题经历提高了我写代码的能力和逻辑推理能力,让我对算法设计产生了浓厚的兴趣。大二这一年,我刷过的题目类型有动态规划,贪心算法,数论算法,组合算法,字符串处理,图算法,树算法等等。我对基础算法和数据结构有了一定了解,并写了很多小程序。

            大三,我和另一个同学跟着老师做项目,研究蚁群算法在TSP问题中的应用。我先把Marco Dorigo写的书粗读了一遍,了解了一下蚁群算法的原理、信息素的概念和轮盘算法,启发式算法的基本思想,然后按书中的算法步骤把算法实现了。我们当时实现5种蚁群算法,包括AS基本蚁群算法,EAS精华蚁群,ASrank基于排列的蚂蚁系统,MMAS最大最小蚂蚁系统,ACS蚁群系统。

          大学前三年都是在学算法,而且没有系统地看过基础理论知识。大四,我认认真真地读完《算法导论》,看完《组合数学》,《数论》,《图论》的北师大视频,读完厚厚一本《离散数学》的经典书籍。再回首看以前的题目,感觉过去很多模糊不清的地方都豁然开朗起来。大四这一年给我留下了太多的回忆,被计算所顺利录取,去图书馆阅读大量书籍,生病半年,父母挚友陪我到处玩,厌学,考试差点考挂了,第一次成功地改进了外排算法,第一次写博客,第一次参加ACM竞赛,第一次在论坛给大家培训ACM……海量浮点数的外排算法涉及到败者树,基数排序,成块I/O等等。我设计并实现的外部排序软件非常快,主要改进点是我自创了一套编码和解码技术,减少了文本中的字符串数字和计算机中的二级制数字转换所需的时间,并利用了单批数据排序后相邻两个数之间的冗余信息。

           研一,我了解并实践了推荐算法和搜索引擎。我对推荐算法、机器学习的了解主要源于天猫推荐算法比赛。第一赛季时,主要是理解业务,用一些规则进行筛选,比如最畅销的品牌,最近点击,周期购买等等,使用语言为C++。第二赛季前两周,也是用一些规则进行筛选,使用语言为SQL。后两周使用随机森林建模,共二十几个特征,分数一路飙升,当了一天的第一,第一个月结束时排第四,被邀请到杭州参加研讨会。那两周,我和队友了解了MapReduce编程框架,数据分析基础(折线图,散点图,直方图,相关系数等等),特征选择方法,采样方法,构建训练预测验证数据集,各种模型特点(逻辑回归,随机森林),尝试分组建模,各种去噪方法。后面两个月,我们还尝试了归一化,GBDT模型,曲线拟合,后验概率,模型融合等方法。一个学期下来,我对推荐算法和机器学习的基础知识有了初步的认识。另外,我研究的方向是生物信息学,主攻蛋白质搜索引擎。研一,我参考师兄的毕业论文,自己实现了一个蛋白质搜索引擎,掌握了倒排索引技术和核函数打分技术等。研一主要是基础课程的学习,印象最深的三门课是统计学,随机算法,生物信息学算法三门课。从中我了解到假设检验,随机游走,隐马尔科夫等知识。我通过阅读论文,自己动手实现了个半隐马尔科夫算法,解决的是第三类问题,学习问题,目的是调整模型参数,涉及Baum-Welch算法。

           研二,进入实验室,上半个学期主要是接手软件。我接手了两个大不相同的蛋白质搜索引擎,每个引擎的核心代码大约几万行。因为两个软件都是刚写完不久,所以我在阅读代码和测试软件时,发现了不少bug,改得我头都大了。不过从中,我也学到不少东西。最重要的就是索引技术,我们组的索引技术种类繁多,各有各的优势,组合起来非常厉害。比如在蛋白质搜索领域,用后缀数组来构造索引就比普通的倒排索引快得多。另外,我还学习了迭代式的半监督学习算法。1月份的时候参加智能交通算法大赛,用java实现了深度优先遍历算法,尝试了一些简单的流量控制策略,不过进第二赛季之后就没怎么弄了,听说第一名用的是强化学习算法。研二下学期,也就是今年,我的主要任务是优化蛋白质搜索引擎,完胜前一个版本。之前两个月主要做数据分析,修改原软件的bug,顺便学了pandas数据分析工具。后两个月就是各种尝试,基本流程就是分析数据->修改算法->测评->分析数据->修改算法->测评……

           总结一下,学习算法可以沿袭先博后渊的套路。

           1、了解《算法导论》里的基础算法,HDOJ上刷题200+或者LeetCode上刷题100+或者在其他OJ上刷掉一定数目的题目,找一下感觉。

           2、认真学习一段时间的数学知识,特别是离散数学,强推荐《组合数学》,《数论》,《图论》三套北师大视频。

           3、自己动手实现一个”高级“算法去解决实际应用。比如用蚁群算法解决TSP问题,优化外部排序程序,自己写一个简单的搜索引擎等等。这一步能培养一个人的科研能力,能让人长时间专注于一个算法,而不是像第一步那样全面撒网。

           4、了解机器学习算法。无论是推荐引擎还是搜索引擎,都会涉及机器学习算法。了解回归,分类问题的基础算法,来一个问题,大致知道它是属于哪类问题。比如预测用户下个月是否购买某商品,可以将其划为分类问题,成绩排名预测可以将其划为排名问题,使用learning to rank方法求解,资金流入流出预测属于回归问题或时间序列预测问题。了解一些常用的线性模型,非线性模型。

           5、深度研究一种算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我与算法的缘分 的相关文章

  • 英特尔 RealSense D415 + OpenCV 4.0 + VS2017 配置方法

    首先是Opencv 4 0 43 VS2017的配置过程 xff0c 网上已经有很多类似教程 xff0c 这里不再累赘 xff1a https www cnblogs com xinxue p 5766756 html 接下来开始配置D41
  • Android 系统调用实现函数功能--SVC指令的实现与检测

    0x0 简述 xff1a arm android中通过一些反编译的工具分析ELF文件时 xff0c 根据一些导入的系统函数可以很轻松的找到一些功能代码的实现 xff1a 查看libc中分析这些函数的实现 xff1a arm中通过SVC指令实
  • Docker学习笔记(九):Docker +Jenkins +Github持续集成

    本次配置时 xff0c jenkins需要配置在外网可访问的服务器上 xff0c 因为在git push内容到github时 xff0c 触发Webhooks并推送到jenkins服务器上 1 配置Github xff08 通过秘钥登录 x
  • opencv-python 常用函数介绍

    目录 imread xff1a 读取图片 imshow xff1a 展示图片 resize xff1a 图片等比例缩放 split xff1a 获取所有像素的颜色值 merge xff1a 根据颜色值合成图片 VideoCapture xf
  • redis 内存占用分析

    在Redis命令行中 xff0c 执行MEMORY STATS命令查询内存使用详情 Redis实例的内存开销主要由两部分组成 xff1a 业务数据的内存开销 xff0c 该部分一般作为重点分析对象 非业务数据的内存开销 xff0c 例如主备
  • php laravel 分析 redis 各个key的内存占用情况

    lt php namespace App Console Commands Tools use Illuminate Console Command use Illuminate Support Facades DB class Redis
  • centos7手动修改dns

    DNS是计算机域名系统 Domain Name System 或Domain Name Service 的缩写 xff0c 它是由域名解析器和域名服务器组成的 域名服务器是指保存有该网络中所有主机的域名和对应IP地址 xff0c 并具有将域
  • 查看并关闭占用端口

    查看占用端口 sudo lsof i 8888 关闭占用端口 sudo kill 9 2558243
  • 从水果连连看到两条序列比对

    一 序列比对 Sequence Alignment 序列比对 xff08 sequence alignment xff09 xff0c 目前是生物信息学的基本研究方法 算法类似于连连看 xff0c 规则是上下两个水果一样 xff0c 就可以
  • Nginx 配置详解

    Nginx 配置 文章目录 Nginx 配置文件结构全局配置events 配置http 配置server 配置 Rewrite一 地址重写 xff0c 地址转发 xff0c 重定向二 URL 重写语法 xff1a 使用 xff1a 三 if
  • 趣谈网络协议(一)

    一般来说 xff0c 网上的购物 都是基于应用层的Http协议 那么在这一层协议书我们包装了什么呢 xff0c 请看下图 一 应用层 Http头 http1 1 POST URL 正文格式 content type 长度 content l
  • JS 中 Json 数据的快速排序

    主要方法 span class token comment 升序排列 span span class token keyword function span span class token function up span span cl
  • 生物信息学导师推荐(持续更新)

    本系列会持续更新 xff0c 帮助大家找到更适合自己的导师 xff0c 注意排名不分先后 xff0c 接下来我们开始介绍 xff1a 陈润生 单位 xff1a 中国科学院生物物理研究所 方向 xff1a 长非编码RNA以及编码小肽的系统发现
  • Python 中变量的多种复制方法(常规拷贝,浅拷贝,深拷贝)

    常规拷贝 大家常用的变量复制方法 xff0c 用 61 就行 但是 xff01 但是 xff01 但是 xff01 在我们复制字典和列表时会和我们预想的不一致 接下来 xff0c 做个小实验 常规拷贝在原始变量 x 的改变后 xff0c 因
  • 图解机器学习:分类模型性能评估指标

    人间出现一种怪病 xff0c 患病人群平时正常 xff0c 但偶尔暴饮暴食 xff0c 这种病从外观和现有医学手段无法分辨 为了应对疫情 xff0c 准备派齐天大圣去下界了解情况 事先神官从人间挑选了一些健康人和患病者来对大圣的业务能力进行
  • 数据库涉及大量数据查询时的注意事项

    避免频繁连接和关闭数据库 xff0c 这样会导致IO访问次数太频繁 设计表时要建立适当的索引 xff0c 尤其要在 where 及 order by 涉及的列上建立索引 避免全表扫描 xff0c 以下情况会导致放弃索引直接进行全部扫描 避免
  • axios 使用详解

    一 安装 cnpm install axios 二 使用 三种写法 span class token comment 第一种写法 span axios span class token punctuation span span class
  • 生物序列比对的几种应用场景(图文)

    今天和大家讨论几种序列比对的应用场景 xff0c 当然只是抛转引玉 xff0c 如果小伙伴有其他应用场景 xff0c 欢迎讨论 一 物种 基因的进化 二 基因组学 2 1 比较基因组学揭示保守区 2 2 比较基因组学揭示功能元件 例如上图的

随机推荐

  • 图解机器学习之回归模型性能评估指标

    一个房价预测的任务 xff0c 老板说你看看这个模型咋样 xff1f 我们先绘制一个坐标轴 xff1a Y 轴为房价 xff0c X 轴为年份 将过去房价数据绘制为绿色 xff0c 回归模型绘制为蓝色 关键问题是 xff0c 怎么知道这个模
  • Chrome 将 http 域名自动跳转 https 的解决方案

    问题来源 使用 Chrome 内核浏览器 xff0c 包括 Google Chrome xff0c edge xff0c 360浏览器等 为了安全在访问同一域名时 xff0c 只要访问过带有 https 域名 xff0c 如果再使用http
  • 一文读懂相分离(图文详解)

    目录 什么是相分离 xff1f 相分离的原理 相分离的分子功能 生物信息中的相分离 一 什么是相分离 xff1f 相分离 phase separation 本身是一个物理化学概念 xff0c 二元或多元混合物会在一定的条件下分离为不同的相
  • g++: 内部错误:Killed (程序 cc1plus)

    这个原因是内存不足 xff0c 在linux下增加临时swap空间 step 1 sudo dd if 61 dev zero of 61 home swap bs 61 64M count 61 16 注释 xff1a of 61 hom
  • React 开发 | 样式模块化

    1 使用 ES6 实现样式模块化 xff0c 避免样式冲突 index module css span class token punctuation span title span class token punctuation span
  • React 开发 | 父子组件间通信

    文章目录 一 省流二 父传子例子三 子传父例子 一 省流 父组件 gt 子组件 xff1a 通过 props 传递 子组件 gt 父组件 xff1a 通过 props 传递 xff0c 但是父组件需要提取给子组件传递一个预定义的函数 二 父
  • React 开发 | 常用 Hooks

    useState 作用 用于函数式组件操作 state xff0c 类似于类组件的 setState 写法 xff1a state setState 61 useState initValue state xff1a 状态变量名setSta
  • React 项目部署后,页面404解决

    解决方法一 xff1a Nginx 配置 span class token punctuation span listen span class token number 80 span span class token punctuati
  • 一文读懂 UniProt 数据库(2023 最新版)

    一 UniProt 数据库介绍 Uniprot xff08 Universal Protein xff09 是包含蛋白质序列 xff0c 功能信息 xff0c 研究论文索引的蛋白质数据库 xff0c 整合了包括EBI xff08 Europ
  • 理解泛型调用和函数调用签名

    这里通过五个示例逐步理解泛型调用和函数调用签名 span class token comment 64 Author Zheng Lei 64 Email baimoc 64 163 com 64 Date 2023 01 18 16 29
  • 图解统计学 10 | 贝叶斯公式与全概率公式

    文章目录 概率联合概率条件概率全概率公式贝叶斯公式 过年了 xff0c 作为水果店老板的我们 xff0c 一共进了三种水果 xff0c 其中 xff1a 西瓜 xff1a 50个 香蕉 xff1a 30个 橙子 xff1a 20个 为了方便
  • 中断处理流程

    大家都说在中断处理函数中不能调度 xff0c 或者说睡眠 这到底为什么 xff1f 下面看中断处理的过程 xff0c 从中是否能找到原因 中断发生后会调到 irq svc xff1a align 5 irq svc svc entry ir
  • ROS Publishers

    ROS的发布者 在python语言中 xff0c ROS发布者定义格式如下 xff1a pub1 61 rospy Publisher topic name message type queue size 61 size topic nam
  • 用已有镜像创建容器

    背景 想编译一套针对arm架构上CPU的keepalived xff0c 现有条件是 xff0c 有一套arm的CPU xff0c 上面已经安装了centos7 xff0c 为了不影响本身系统的环境 xff0c 所以想着创建一个容器来隔离环
  • Ubuntu 18.04生命周期现被扩展至10年

    为更好的与刚被蓝色巨人 IBM 收购的红帽展开竞争 xff0c Ubuntu 18 04 LTS长期支持版周期被扩展至整整10年 正常情况下 Ubuntu LTS 长期支持版的生命周期都是五年 xff0c 即在五年内这些版本都会持续提供安全
  • 卡尔曼滤波(Kalman filtering)小结

    最近项目用到了kalman滤波 xff0c 本博文简单介绍下卡尔曼滤波器的概念 原理和应用 xff0c 做个小结 概念 卡尔曼滤波 xff08 Kalman filtering xff09 一种利用线性系统状态方程 xff0c 通过系统输入
  • Cmake:编写CMakeLists.txt文件编译C/C++程序

    1 CMake编译原理 CMake是一种跨平台编译工具 xff0c 比make更为高级 xff0c 使用起来要方便得多 CMake主要是编写CMakeLists txt文件 xff0c 然后用cmake命令将CMakeLists txt文件
  • 官方免费的正版Xshell,人人都可以马上拥有

    找个 Xshell 咋就这么费劲 可以说 Xshell 是 Windows 平台下最好的第三方终端软件了 xff0c 程序员必备 但是屏幕前的你 xff0c 搜索下载 Xshell xff0c 都是跳到奇怪的下载网站 有时候下载的也是免费试
  • 第2章 梅西法 阅读

    梅西法可以用于任何对象集合的排名 xff0c 但是一定要预先定义好成对比较数据 比如乒乓球赛 xff0c 成对比较数据就是两个人PK的结果 xff1b 网页排序 xff0c 成对比较数据可以是两个网页的流量 梅西法的主要思路是构造一个最小二
  • 我与算法的缘分

    六年前 xff0c 我完全不知道算法是什么东西 六年后 xff0c 我看到算法就两眼放光 六年的时间让我从算法小菜鸟蜕变成算法爱好者 大一上学期 xff0c 我对算法一点概念都没有 xff0c 当时老师让我们用伪代码写算法 xff0c 我基