algorithm - 是否可以使用搜索功能枚举集合中的所有项目

标签 algorithm search heuristics

我正在寻找一种算法,也许是启发式算法来解决以下问题。

是否可以使用搜索功能枚举集合中的所有项目? 是否有任何已知的算法/启发式方法可以实现此目的?

例如按照以下条件:

  • 有一个 API 允许按标题搜索歌曲。
  • 不区分大小写。
  • 搜索匹配歌名的任何部分,可以匹配歌名的开头部分和中间部分。
  • 当搜索短语为空时,它返回前 100 个。
  • 歌曲按 SongOrder 属性排序。
  • 它只返回前 100 名。
  • 很可能最多会有几千首歌曲 数据库。但实际歌曲数量消费者不得而知 下面的函数。
  • 这是一个现实生活中的问题,搜索功能无法更改。

搜索功能的伪实现如下所示:

List<Song> FindSongs(string searchText)
{
    var allSongs = LoadAllSongsFromDB();
    var allSongsOrderedBySongOrder = allSongs.OrderBy(x => x.SongOrder);
    var matchingSongs = allSongsInDatabase.Where(song => searchText == null || song.Title.Contains(searchText));
    var topHundred = matchingSongs.Take(100);
    return topHundred.AsList();
}

class Song
{
    public int Id;
    public string Title;
    public int SongOrder;
}

最佳答案

首先搜索单个字母。例如,搜索“A”可能会返回 100 首歌曲,但搜索“Z”可能会返回不到 100 首歌曲。

然后对于返回 100 首歌曲的每个字母,添加另一个字母。例如,假设搜索“A”返回 100 首歌曲,则搜索“AA”、“AB”、“AC”等。

任何返回 100 首歌曲的搜索都需要通过添加另一个字母来优化。任何返回少于 100 首歌曲的搜索都已完成:这些歌曲可以在删除重复项后添加到输出列表中。

关于algorithm - 是否可以使用搜索功能枚举集合中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861388/

相关文章:

r - (速度挑战)根据通用汉明距离计算距离矩阵的任何更快的方法?

c++ - 用于拟合具有两条线的曲线的亚二次算法

c# - 递归如何打印列表的总和

php - MySQL全文搜索多个关键字一对多

algorithm - 如何将威胁空间搜索添加到我的井字游戏算法中?

algorithm - 为什么这种启发式是可接受的?

android - android中迷宫生成的递归划分算法

search - 使用搜索参数获取 Backbone 集合

search - 搜索所有内容(文章、链接、帖子..)的 joomla 后端搜索功能

java - 使用语言启发式检查