随笔分类 - 机器学习算法
摘要:DTW为(Dynamic Time Warping,动态时间归准)的简称。应用很广,主要是在模板匹配中,比如说用在孤立词语音识别,计算机视觉中的行为识别,信息检索等中。可能大家学过这些类似的课程都看到过这个算法,公式也有几个,但是很抽象,当时看懂了但不久就会忘记,因为没有具体的实例来加深印象。 这次主要是用语音识别课程老师上课的一个题目来理解DTW算法。 首先还是介绍下DTW的思想:假设现在有一个标准的参考模板R,是一个M维的向量,即R={R(1),R(2),……,R(m),……,R(M)},每个分量可以是一个数或者是一个更小的向量。现在有一个才测试的模板T,是一个N维向量,即T={T(...
阅读全文
摘要:聚类算法总结:---------------------------------------------------------聚类算法的种类:基于划分聚类算法(partition clustering)k-means:是一种典型的划分聚类算法,它用一个聚类的中心来代表一个簇,即在迭代过程中选择的聚点不一定是聚类中的一个点,该算法只能处理数值型数据k-modes:K-Means算法的扩展,采用简单匹配方法来度量分类型数据的相似度k-prototypes:结合了K-Means和K-Modes两种算法,能够处理混合型数据k-medoids:在迭代过程中选择簇中的某点作为聚点,PAM是典型的k-me
阅读全文
摘要:网站:http://bokeh.pydata.org/gallery.html
阅读全文
摘要:最大堆排序算法:View Code #include<stdio.h>#include<stdlib.h>#define LEFT(i) i*2+1#define RIGHT(i) i*2+2#define PARENT(i) floor((i-1)/2)typedef int DataType;/* 局部特性:对节点i,考察它的子树,将其子树下面的最大值换到该节点上来。*/void max_heapify(DataType A[],int i,int length){ int l,r; int large; l = LEFT(i); r = RIGHT(i); ...
阅读全文
摘要:插入排序基本思想:将需要排序的数据分成有序区与无序区,默认的第一个有序区是第一个元素。然后依次排序不断扩大有序区,缩小无序区。通过将无序区第一个数据与有序区内数据比较,找到他的位置,然后将有序数据向后移动,将那个数据放到有序区的相应位置就可以了。知道比较到无序区的最后一个数据结束。但是由于每次比较需要移动大块数据,所以需要使用memmove来操作。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 typedef int DataType; 5 void insert_snort(DataType data[],
阅读全文
摘要:第一:快速排序+递归调用1)选取标点,一般取第一个数,空出一个坑A。2)从右边标志向左扫描,找到第一个比自己小的数,然后将数填充到位置A中,留出一个坑B,然后将左边标志指向左边坑后面的第一个数;3)从左边标志向右扫描,找到第一个比自己大的数,然后将数填到位置B中,留出一个坑A,然后将右边标志指向右边坑前面的第一个数上。4)重复2) 3)知道左边标志遇到右边标志5)将标点数填到左边标志的坑中,返回左边标志的位置。 View Code 对于快排提高效率的地方主要地方时如何选取标点数据。目前常用的有随机快排(不是选取第一个数,而是随机选取一个数)、平衡快排(从第一个、中间一个、最后一个分部取出三..
阅读全文
摘要:堆(heap)和栈(stack)是C/C++编程不可避免会碰到的两个基本概念。首先,这两个概念都可以在讲数据结构的书中找到,他们都是基本的数据结构,虽然栈更为简单一些。在具体的C/C++编程框架中,这两个概念并不是并行的。对底层机器代码的研究可以揭示,栈是机器系统提供的数据结构,而堆则是C/C++函数库提供的。具体地说,现代计算机(串行执行机制),都直接在代码底层支持栈的数据结构。这体现在,有专门的寄存器指向栈所在的地址,有专门的机器指令完成数据入栈出栈的操作。这种机制的特点是效率高,支持的数据有限,一般是整数,指针,浮点数等系统直接支持的数据类型,并不直接支持其他的数据结构。因为栈的这种特点
阅读全文
摘要:奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。集束搜索(又名定向搜索,Beam Search
阅读全文
摘要:#include<stdio.h>#include<stdlib.h>#include<string.h>int find_max(int arr[],int len){ int max; int i; max = arr[0]; for(i = 0 ; i < len;i++) { if( arr[i] > max) max = arr[i]; } return max; }int count_sort(int arr[],int max,int len){ int* mid; in...
阅读全文
摘要:今天看书,重新写了一个快排,留着给自己以后看。#include<stdio.h>#include<stdlib.h>#include<string.h>int partion(int a[],int bg, int ed){ int t; int i,j; t = a[bg]; //标志 i = bg; j = ed; while( i < j){ while(i < j && a[j] > t) j--; if(i < j){ a[i] = a[j]; ...
阅读全文
摘要:今天偶然看到一个找出N个数中最大的前500个数,一个不错的解法是使用堆来进行选择,每一次读取一个数判断是否需要放到堆中,这样比较下来就可以找到最大或最小的前500个数了,自己晚上就参考别人的代码写了一个最小堆的结构,后期继续补充。View Code #include <stdio.h>#include <stdlib.h>typedef int ElemType;struct heap{ ElemType *num; int heapsize; int maxSize;};struct heap HP;int init_heap(int size){ if(size .
阅读全文
浙公网安备 33010602011771号