如何发明新算法(一)

算法一直是计算机科学的核心,算法改变世界,算法创造未来!这篇文章我主要从复杂化、简单化两个方面谈谈怎么样发明一个新的算法。新算法在时间复杂度,空间复杂度,预测精度等方面并不一定是最优化的,我只想起到抛砖引玉的作用,激励爱钻研,爱发明,爱算法的人员进行创新。后续我还会继续将我多年来研究的复杂化、简单化、随机化、联想化、交叉化、逆向化等其他发明方法写出来和大家交流学习。我相信,只要方法得当,积极研究,勇于试错,有朝一日您也可能发明新的算法。

一、把简单的算法复杂化

通过抽象思维方式,把原有的简单的算法想复杂一些,找到一定的规律,得到新的算法。这种方法运用非常广泛,比如:插入排序、希尔排序、快速排序、Timsort ,顺序查找、二分查找、三分查找,LeNet 、AlexNet、VGGNet等创新算法,都是推广前人简单算法得到的,下面我将举几个例子详细谈一谈。

1、排序算法

具体思路:每个排序或者交换都有一个比较值,冒泡排序比较值是“虚拟基准数”,0个;快速排序比较值是“基准数”,1个;新排序算法比较值是“两个基准数”,2个。这里看起来有点抽象,继续把下面内容看完就会明白。
a.冒泡排序: 冒泡排序(Bubble Sort)每次比较都是把大的向后交换,我们可以把它想象成,每次和相邻两个数的“平均值”进行比较。然后大的放后面,小的放前面。下图中数字3和6,可以看成是3和4.5作比较,6和4.5做比较。冒泡排序比较值是“虚拟基准数”,一般选择相邻两数的均值。

b.快速排序 : 快速排序(Quick Sort)是20世纪十大算法发明之一,其实它也是冒泡排序的一种推广,如下图:基本思想是选取一个基准数6,作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于基准数6,另一部分都大于基准数6。然后继续对这两部分继续进行排序,从而使整个序列达到有序。快速排序比较值是“基准数”,一般选择最后一个数。
c.新发明排序算法 : 新排序(New Sort),通过前面两个排序算法,我想把比较基准数从0个,1个变成2个,新排序算法比较值是“两个基准数”,我选择头尾两个数。如果成功排序,就可以发明新的排序算法。 如图所下图所示,我先选出35、31作为基准数,再按照小于31,31到35,大于35将数组分成(27、19、14、10、31),(33、32),(35、42、44)三部分,递归调用前面的方法就可以得到有序数组。同样道理,选择三个,四个基准数也可以进行排序,其优劣还需要进一步验证。

2、查找算法

简单到复杂的推广思路是:一分查找———>二分查找———>三分查找———>四分查找———
a、顺序查找: 顺序查找(Sequence Search),适用于顺序表,按照顺序从头开始查找,可以抽象的说成一分查找,在一推东西里面找。

b、二分查找: 二分查找也称折半查找(Binary Search),它是一种效率非常高效的查找方法。把数组分成2部分进行查找,可以抽象的说成,在2推东西里面找。

c、新发明查找算法: 新发明查找(New Search),上面两个查找算法从简单向复杂推广,可以抽象为:1堆数组里面不好找,2堆数组里面容易找,那么3堆东西里面找情况怎么样呢?每次分成3堆进行查找,新的算法就这样发明出来了,也许效率更高。

3、神经网络算法

感知机———>前馈神经网络———>新发明的网络,从简单的向复杂的推广。
a、感知机: 感知机(perceptron),由科学家Frank Rosenblatt受其他科学家启发后于1950至1960年代发明。感知机在人工神经网络的发展史上有着非常重要的地位,尽管它的能力非常有限,主要用于线性分类,但是它对神经网络的影响非常大,后来的神经网络算法基本上都是在此基础上进行复杂化推广发明而来的。

b、前馈神经网络: 前馈神经网络也成为多层感知器(Mutlti-Layer Perceptron,MLP)。属于各神经元分层排列,每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层,各层间没有反馈(这一性质区别于反馈神经网络)。前馈神经网络的发明就是复杂化推广法进行算法发明的最直接运用。

c、新发明的网络: 新网络(New Net), 向后传播的神经网络。从前面向前传播的网络很容易推广出一种能接收信号既能向前传播,又能接收自己的反馈信号的神经网络。这就是反馈神经网络,其实循环神经网络(RNN)、Hopfield网络和玻尔兹曼机都是在此原理下推广出来的。

二、把复杂的算法简单化

把复杂的算法简化,丢弃一部分结构,得到新的算法,这种方面方法刚好和前面的那种方法相反。

1、排序算法

冒泡排序———>选择排序———>新发明排序算法
a、冒泡排序: 冒泡排序(Bubble Sort)冒泡排序就是排序发明的基础,几乎所有新排序算法都离不开它。这次我从交换次数进行思考。从交换次数来看,冒泡排序算法挺复杂,可以通过减少交换次数来发明新算法。

b、选择排序: 选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,走一趟只交换一次。相对冒泡排序,其交换次数是进行了简单化。

c、新发明排序: 新算法(New Sort),从上面的两个排列算法来看,其目的是为了减少交换。如果相邻几个数是顺序数,我就不交换了,只需要把他们组合起来,然后再从小到大合并即可。这样就能很大程度上减少了交换次数。如下图方式可以快速实现排序。

2、 深度学习算法

卷积神经网络连接线太复杂,容易出现过拟合,加上dropout,丢弃一些网络连接后效果反而好一些。同样的原理我想直接丢弃一些层,于是发明出了新的算法。
a、卷积神经网络算法: 卷积神经网络(CNN),它一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,一方面它的神经元的连接是非全连接的,另一方面同一层中某些神经元之间的连接的权重是共享的(即相同的)。

b、加dropout的卷积神经网络算法: 失活神经网络(Dropout),让连接点失活,使得复杂的网络结构简单化,相当于从原始的网络中找到一个更瘦的网络,能有效解决过拟合问题。
c、新卷积神经网络算法: 新网络(New CNN), 通过对前面两个网络研究,启发我想到更好的简化方式,让连接层失活,减少网络层数,这种方式能否得到更鲁棒的模型呢?ResNet 就是按照这种思路推广出来的。

三、实现代码

这期博客我主要是通过模型、图表方式简单阐述发明新算法的方法。我自己是用C++和python把上述算法或模型实现的,后期会附上相关代码。感兴趣的朋友可以自己先根据模型、图表写一写相关代码。

如何发明新算法(一)相关推荐

  1. 如果让AI根据文字画「抽象画」,那得成什么样?|DeepMind新算法

    丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 根据文字生成图片,AI早就会了. 而如今,和以往的"写实派"不同,AI要开始进军"抽象派"艺术了! ...

  2. GooglePageRank排名新算法(一)

    http://www.8gcs.com 第一部分: 最新消息! Google的主要变化 Google的主要变化始于2003年11月的16号,从那时候起,网上论坛就开始对此议论纷纷并产生了形形色色的推测 ...

  3. 鉴于现有的形式化方法(简称“桥”系列)有其优点和缺点,特发明新的“秤”系列

    鉴于现有的形式化方法及其形式化语言(简称"桥"系列)具有的优点和缺点, 特依据信息基本定律发明新的"秤"系列,以扩充并解决"桥"系列所解决不 ...

  4. 腾讯天衍实验室夺世界机器人大赛双冠军,新算法突破脑机接口瓶颈

    日前,"2020世界机器人大赛-BCI脑控机器人大赛"公布成绩,腾讯天衍实验室和天津大学高忠科教授团队组成的C2Mind战队,经过多轮赛程的激烈比拼,实力入围BCI脑控机器人大赛& ...

  5. “重构”黑洞:26岁MIT研究生的新算法 | 人物志

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑ 整理 | 若名 出品 | AI科技大本营(ID:rgznai100) 这是一个重要时刻.除了发布跟丈夫的 ...

  6. 不止狂卖芯片,英伟达也飙了新算法:用AI生成逼真的虚假名人照,可用于万物

    本文来源于微信公众号遇见人工智能 如今,"英伟达NVIDIA"这个名字早已经成为GPU.芯片和股价飙升的代名词.但除了卖芯片疯狂赚钱之外,他们也没闲着. 在Deepmind又将升级 ...

  7. 清华校友斩获ACM博士论文奖!相关研究为自动驾驶新算法奠定基础

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 明敏 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 今 ...

  8. 超越AlphaZero,DeepMind新算法MuZero登顶Nature | AI日报

    超越AlphaZero,DeepMind新算法MuZero登顶Nature 2016年,DeepMind 推出了第一个人工智能程序 AlphaGo,在围棋游戏中击败人类.两年后,它的继任者AlphaZ ...

  9. 告别视频通话“渣画质”,英伟达新算法最高压缩90%流量

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | 量子位 为了让网速慢的用户用上高清通话,英伟达可谓绞尽脑汁.他们开发的新AI ...

最新文章

  1. 0基础玩转CV的利器绝了,还送万元礼金,机不可失!
  2. POJ1753 棋盘翻转(位压缩+广度优先搜索)
  3. 分析ASP.NET读取XML文件4种方法
  4. 主分区、扩展分区和逻辑分区(转载)
  5. C#中Lambda表达式总结
  6. k380没有验证码_罗技K380蓝牙键盘
  7. (搬运)手机卫星通信详细科普图漫版
  8. python mock server_五、python MOCK SERVER
  9. Matlab数组及多项式运算
  10. 叶三《我们唱》-野孩子(白银饭店)
  11. java 商品库存修改
  12. 易班自动答题脚本_一款功能强大的答题小程序,更智能的在线考试系统,出好试卷,随机出题的微信小程序...
  13. python画立体爱心_Python画3D心形
  14. 【论文笔记】PSEUDOSEG: DESIGNING PSEUDO LABELS FOR SEMANTIC SEGMENTATION
  15. 指针真的是个小机灵--将字符串中的n个字符左移,串中的前n个字符移到最后
  16. 设置窗体显示在屏幕的位置
  17. Volumes 数据卷管理
  18. UVA 1645 Count——dp
  19. Ubuntu 使用 create_ap 开启 wifi 热点
  20. kiwix 离线维基百科_离线内容提供商Kiwix背后的故事

热门文章

  1. ERROR 1044 (42000): Access denied for user/非root角色授权用户找不到已创建数据库
  2. 计算机辅助概念设计的内涵,12 计算机辅助概念设计.doc
  3. word之怎么对每节或每章使用不同的页眉或页脚?
  4. 苹果MacBook Air对比华为Matebook X Pro,如何选择
  5. chrome浏览器设置深色暗黑模式快捷方法
  6. C++知识总结(内附超详细知识框架图)
  7. 2013年小米校园招聘笔试题-朋友圈
  8. 鸿蒙系统全面屏手势,【魅族16X评测】系统:mBack全面屏手势 交互流畅好用-中关村在线...
  9. python3 迭代器、生成器、装饰器、数据序列化
  10. 微星MSI B360M MORTAR TITANIUM定制USB后typec不识别的问题(opencore0.6.3)