当前位置: 代码迷 >> 高性能数据库开发 >> - [查找结构优化有关问题]
  详细解决方案

- [查找结构优化有关问题]

热度:135   发布时间:2016-05-11 10:02:00.0
请教大家 - [查找结构优化问题]
最近遇到一个难题, 要进行一个电影字幕查找的算法优化
解析过的字幕会以一个[Array]存储, 每个字幕元素包括{start,end,subtitle};
每秒钟拿到现在的播放时间, 然后比较字幕数组的元素, 从第一个开始, 每个元素比较是否在start和end之间, 如果是, 查找subtitle的值 和之前的是否相同, 如果不相同则显示.然后退出循环. 用代码表示:
for(var n=0;n<subtitleArray.length-1;n++){
  if(currentTime>=subtitleArray[n].start&&currentTime<=subtitleArray[n].end){
     if(subtitleArray[n].subtitle!=之前显示的字幕){
       显示字幕();
     }
     return; //退出循环
  }
}

刚开始还是很好用的, 但是随着时间推移, 需要遍历的元素越来越多, 而且每一秒要进行这么多次查找实在是耗费cpu资源. 请注意, 因为用户可以快进/倒退, 所以有可能之前的数据都要重新遍历到. 请问能够如何优化, 如果字幕不以[Array]存储而是新建一个表格映射应该如何去建立数据结构~
感谢各位!




------解决方案--------------------
利用散列的思想。

一个影片的时间应该不会超过4个小时吧,4个小时是14400秒。
1、构造一个数组Arr[14400]。
2、预处理
把字幕数组,根据时间的范围存储到Arr中,

这样,要取某一秒N需要显示的字幕直接
ARR[N]即可。

缺点是,会有Arr中会有很多的重复值和空值。但是性能是最好的
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
 
  • 最近登录:Sat Nov 25 08:02:58 CST 2017
  • 最近登录:Sat Nov 25 08:02:58 CST 2017
  • 最近登录:Sat Nov 25 08:02:58 CST 2017
  • 最近登录:Sat Nov 25 08:02:58 CST 2017
  • 最近登录:Sat Nov 25 08:02:58 CST 2017