摘要: 根据前段时间对论文参考和研究,总结了几种对语音音乐搜索的一些常用技术和大概框架。随着项目的实施和深入,将会继续深化对该领域的技术探讨和性能分析。1、大概框架:预处理:建立候选MIDI音乐文件的数据库和索引,每一首歌曲,通过基音周期检测的手段,将歌曲的音乐信号转换为音高和音长。说白了,就是提取旋律特征,建立音高序列的数学模型。本系统打算采用音高差和音长比的二元组表示旋律轮廓。在线处理:测试者通过麦克风哼唱一段输入歌曲,可以根据用户的习惯来哼唱。然后利用最低信号强度,音高连续性、人类唱歌音高范围等方法来消除不需要或者错误的音高点,再利用自相关函数、平均幅度差函数来寻找最有可能用来接下匹配的音高序列 阅读全文
posted @ 2012-02-29 21:44 liftBug 阅读(591) 评论(0) 推荐(0) 编辑
摘要: 重在理解题意,想了好久才弄明白题意,大意是有n头牛,有k种特征,要求在这n头牛中,找出连续的第i头和第j头中,满足这些牛的k种特征个数是一样的。明白了这层意思,似乎仍不知从何下手,看了discuss里,豁然开朗,佩服牛人能想到这。注:大概思路如下:111 111 000110 221<= 110111 332 110010 342 120001 342 120100 443<= 110010 453 120中间一列的221和443的”形状”一样, 也就是相减能得到... 阅读全文
posted @ 2011-12-07 23:49 liftBug 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 一般来说,超过10w的数组大小,若涉及到查找操作时,第一要考虑的数据结构是散列表,毕竟在散列表的支持下,查找操作所需的时间为O(1)。本题就是利用散列表解决问题的典型体现。另外针对字符串的哈希值我们考虑用unix的ELF哈希函数给输入字符串生产哈希值。由于操作的对象是字符串,因此针对对象冲突问题,利用链表来解决是再合适不过了。注:本题的输入情况比较特殊,字典输入和foreign language输入之间有个空行,所以考虑用gets函数输入字典后用sscanf函数提取English word和foreign word。#include<stdio.h>#include<stri 阅读全文
posted @ 2011-12-07 23:20 liftBug 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 初看这道题,有点深度搜索的味道。不过在解决之前我们要抓住题目隐含的意思:1、最后分段后每一段的长度一定是输入数总和的约束。2、我们先对输入数(假设是a[0..n-1])进行排序,形成从大到小顺序数。优先组合最大的数,以便接下剪枝分析。3、剪枝分析(1)、如果a[i - 1](i=1..n-1)在组合第m个木棍时不成立,若a[i] == a[i - 1],则直接跳过a[i]。因为a[i]也不会组合进第m个的木棍。(2)、若尝试组合第m个木棍的第一段时,如果数组a的剩余数里的最大数是a[j],即a[j]是组合第m个木棍的第一段,如果以a[j]为第一段的该组合不成立,那么直接退出搜索,跳回到对第m- 阅读全文
posted @ 2011-12-03 01:35 liftBug 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 2011-11-2720:10:14 算法导论第2章里就提出逆序对的思想(设A[1..n]是一个包含n个不同数的数组,如果在i<j的情况下,有A[i]>A[j],则(i,j)就称为A中的一个逆序对),这里要强调n个数是不同的。我们的目的是要确定n个元素的任何排列中逆序对的数目。 冒泡排序本质上体现逆序对的思想。不过由于在时间数量级上的巨大差异,用冒泡排序来计数逆序对的对数会随着n的增大而增大,我们可以估算出最坏情况下逆序对的数目是n*(n-1)/2。故从性能上考虑,冒泡排序不适合大数据量得求解。 其实,合并排序就是一种天然地求解逆序对对数的算法。若最初不考虑是否想到用合并排序的思想 阅读全文
posted @ 2011-11-27 20:12 liftBug 阅读(1108) 评论(0) 推荐(0) 编辑