如何学习算法

目前浅显地看过《数据结构与算法分析》 《算法设计与分析基础》两本涉及到算法的书。

简单认为,学习算法的重点和难点都不在代码实现上,而在:

1、数学逻辑式       这个是写出伪代码的关键

2、算法正确性证明     证明该算法能得到最优解还是比较优解

数学逻辑式,从两方面考虑:一种是迭代,另一种是递归。

迭代思维相对容易理解,它的要求是:一、可以明确知道循环次数;二、每次循环中操作对象可以用变量表示,如:

for i=0 to i=n-1 do:
    a[i] ....

递归思想其实本质上就是数学归纳法,它的思路是: f(n) = F(f(n-1)) .... 或者 f(n) = F(f(n/2)) ....

所以它的关键在于想清楚,怎么用n-1或者n/2的式子去表示n的

算法正确性证明,这个也还是不太懂,基本都是数学归纳法

时间: 2024-12-19 00:21:53

如何学习算法的相关文章

Ensemble_learning 集成学习算法 stacking 算法

原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学习器的概念,但是使用的相对于bagging和boosting较少,它不像bagging和boosting,而是组合不同的模型,具体的过程如下:1.划分训练数据集为两个不相交的集合.2. 在第一个集合上训练多个学习器.3. 在第二个集合上测试这几个学习器4. 把第三步得到的预测结果作为输入,把正确的回

写在前面:21天学习算法

最近打算找一份新的工作,感到自己在算法环节还很疲弱.由于时间还算充裕,就决定将LeetCode上面的算法题学一遍,找出自己的薄弱,锻炼算法思维,吸收他人长处.个人觉得,刷题只是学习算法中的一个环节,主要的作用是用来反馈错误和增加熟练度.相比较刷题,更加重要的是对比和总结,对比自己的代码和他人的代码,对比不同的解法,总结一类算法或一类问题,总结一些tips,这两步是提升自己的关键.另外,为了不让自己的视野过于局限,让得到的碎片化学习成果体系化,可以在刷题的时候,就某方面的算法或数据结构,多参考其他

感知机学习算法 python实现

参考李航<统计学习方法> 一开始的感知机章节,看着不太复杂就实现一下... 1 """ 2 感知机学习算法的原始形式 3 例2.1 4 """ 5 import numpy as np 6 7 class Perceptron: 8 def __init__(self,w,b,alpha): 9 self.w = w 10 self.b = b 11 self.alpha = alpha 12 13 def loss(self,x,y

Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯

(一)生成学习算法 在线性回归和Logistic回归这种类型的学习算法中我们探讨的模型都是p(y|x;θ),即给定x的情况探讨y的条件概率分布.如二分类问题,不管是感知器算法还是逻辑回归算法,都是在解空间中寻找一条直线从而把两种类别的样例分开,对于新的样例,只要判断在直线的哪一侧即可:这种直接对问题求解的方法可以称为判别学习方法. 而生成学习算法则是对两个类别分别进行建模,用新的样例去匹配两个模板,匹配度较高的作为新样例的类别,比如分辨大象(y=1)和狗(y=0),首先,观察大象,然后建立一个大

生成式学习算法

考虑一个分类问题: 根据一个动物的特征来区分该动物是大象(y=1)还是狗(y = 0).利用逻辑回归找到一条直线,即分界线,将训练集中的大象和狗分开,当给定一个新的动物特征时,检查该动物位于分界线的哪一边,然后做出判断是大象,还是狗,就是对p(y|x:θ)进行建模. 这里我们来看另一种不同的思路,首先根据训练集,我们找出大象有什么特征,然后找出狗有什么特征,当要对一个新的动物进行分类的时候,我们就对比该动物是与大象的特征更加匹配还是与狗的特征更加匹配,从而进行分类. 直接学习p(y|x)的算法是

斯坦福《机器学习》Lesson5感想———1、成学习算法

在前面几课里的学习算法的思路都是给定数据集以后.确定基于此数据集的最佳如果H函数,通过学习算法确定最佳如果H的各个參数,然后通过最佳如果函数H得出新的数据集的结果.在这一课里介绍了一种新的思路,它的核心思想是直接计算各种如果的最高概率,然后拟合各个如果的最高概率參数,并利用拟合得到的如果概率,计算出新的数据集的概率,选取概率最高的如果直接得出分类类别. 整个生成学习算法的精髓在于条件概率的使用.在二元分类里,也能够称为分别算法.在给定的数据集里确定p(y) 和p(x|y),然后根据贝叶斯定理.得

生成学习算法(Generative Learning algorithms)

一:引言 在前面我们谈论到的算法都是在给定x的情况下直接对p(y|x;Θ)进行建模.例如,逻辑回归利用hθ(x) = g(θTx)对p(y|x;Θ)建模. 现在考虑这样一个分类问题,我们想根据一些特征来区别动物是大象(y=1)还是狗(y=0).给定了这样一个训练集,逻辑回归或感知机算法要做的就是去找到一个决策边界,将大象和狗的样本分开来.但是如果换个思路,首先根据大象的特征来学习出一个大象的模型,然后根据狗的特征学习出狗的模型,最后对于一个新的样本,提取它的特征先放到大象的模型中求得是大象的概率

视图动画学习算法和数据结构(二)(&lt;Garry进阶(四)&gt;)

转载请注明: 接视图动画学习算法和数据结构(不定期更新)() 快速排序(QuickSort) 动画演示: java代码: public class QuickSort { private int array[]; private int length; public void sort(int[] inputArr) { if (inputArr == null || inputArr.length == 0) { return; } this.array = inputArr; length

机器学习(二):感知机学习算法

感知机是一种线性分类模型,属于判别模型 f(x)  = sign(wx+b) ;  f(x)∈{+1,-1}; 其中M为错分类点的集合M. 感知机学习算法是误分类驱动的,采用随机梯度下降法进行参数更新. w<-----w + γyixi b<-----b + γyi γ为学习率,反复迭代直到所有样本均分类正确. 总结: 输入:训练数据集T={(x1,y1),(x2,y2).....(xn,yn)},学习率γ∈[0,1] 输出:w,b 感知模型f(x) = sign(wx+b) (1)选取初值

菱形打印程序——谈如何学习算法

菱形打印程序——谈如何学习算法 1.菱形打印 很多人,打印菱形在控制台的思路是,把菱形上下拆分,分两段很接近的代码来打印,其实这样代码很不好看,并且不好阅读.    我们知道,要打印的图案是这种:                            *                          *** *****      ***    * 满足上下对称,左右对称,那么,你能不能也弄一个二重循环,同样是对称的?      很简单,首先我们要抛开习惯性思维,for循环不一定要在0开始或者