我是编程算法的新手。我可以使用简单化的想法,但我当前的项目要求我创建一些更复杂的东西。
我正在尝试创建一个基于“常规”类别的关键字和子集的分类系统,这些类别可以过滤为更详细的类别,这些类别需要用户尽可能少地工作。
即
体育>>棒球>>投球>> Nolan Ryan
因此,如果用户决定他们想要谈论“棒球”并且他们过滤搜索,我想也包括'体育'
用户输入:“棒球”
然后用户进入体育>>棒球
现在我明白,如果没有一个以某种方式连接这两个类别的生动呼吸动态程序,这将是不可能的。它最初还需要“一些”用户输入,并且在软件的整个生命周期内需要更多输入,以便维护它并使其保持最新。
但是,唉,要求这样的算法将是轻浮的,没有详细说明我正在尝试做的具体细节。而且我不想要求提供帮助。
相反,我很好奇,如果人们知道已经实施的类似系统,并且有文档描述它是如何完成的。甚至是你自己项目的一些现实例子。
简而言之,我有一个'计划'但它需要更多的用户输入而不是我真正想要的。我觉得在开始研究这个项目之前,获得更多关于这个主题的信息将是最好的行动方案。
由于
答案 0 :(得分:1)
恕我直言,这并不像你想象的那么难。您想要的是Tagging
,您可以通过设置标记之间的相关性自动执行此操作(即Tag
可以有其有意义的信息加上其他的信息。然后,如果用户选择标记好吧,你通过查看你的ADT集合与其他人联系起来(可以像数组一样简单)。
Tag:
Sport
Related Tags
Football
Soccer
...
我希望这有帮助!
答案 1 :(得分:1)
听起来你想要做的是创建树/菜单结构,然后能够快速检索树中任何给定键的“痕迹”。
这就是我的想法:
使用所有分支创建树。如果你想让分支机构共享密钥也没关系 - 只要你能给用户一个“多个找到的选择”,请选择哪一个......?
对于树中的每个键,生成面包屑。这非常耗时,如果树非常大并且定期更新,那么离线,云端或通过hadoop等可能会做得更好。
将密钥和面包屑存储在键/值存储区(如redis)中,或存储在内存/缓存中(如果需要)。如果要跨类别/分支共享密钥,则需要每个值都有一个数组。
当用户选择一个键时 - 在商店中查找该键,如果结果值只包含一个匹配项,那么您只需构造一个痕迹导轨即可将用户带到您想要的位置。如果它有多个,你给他们一个选择。
我甚至会说,如果你需要更有机的东西,比如用户可以从其他任何地方动态创建“新主题”,那么你可能希望在初始导入后根本不使用树 - 而只是更新你的密钥/值实时存储。