什么是良好的数据结构来分组这些功能?什么算法可用于插入和检索?

时间:2017-02-15 08:03:13

标签: algorithm data-structures

我有50个科目的清单。 我还有1000所学校的名单,这些学校将教授至少一门或多门这些科目。 每当我找到一所学校时,我都会考虑用它所教授的科目来缓存这所学校。以最佳方式保存这些数据的好方法是什么?

2 个答案:

答案 0 :(得分:1)

我建议您使用哈希表,使用school作为键,以及元素的主题。哈希表的插入,删除和搜索操作的复杂性可能会有所不同,具体取决于处理额外冲突的方式(许多键可以在同一索引中进行哈希处理)。但是在你的问题中碰撞是不可避免的(主题在许多学校之间共享)所以例如,使用双重哈希的开放寻址可以减少额外的冲突,但不会减少你问题中的隐式冲突。如果你想自己实现它,使用良好的哈希函数(密钥在索引上的均匀分布)和简单的冲突列表,可以使您在O(50)中实现插入,在O(50)中删除(搜索主题及其删除)并在O中搜索(50)在最坏的情况下,我认为这个问题很好(并且实施起来简单快捷)。有关哈希表以及如何实现它的更多信息:https://en.wikipedia.org/wiki/Hash_table

答案 1 :(得分:0)

我会将这些信息存储在HashMap中。 HashMap存储键值对,因此您可以将每个学校映射到学校教授的科目。

以下是java中实现的代码示例:

public class Main{

     public static void main(String[] args){

         //Creates a HashMap with a String as the key and String[] as the value.
         Map<String, String[]> schools = new HashMap<String, String[]>();

         //Name of the college 
         String college = "College";

         //Subjects offered at said college
         String[] subjects = {"Physics","Calculus","Algorithms"};

         //Stores the college and its subjects within the HashMap
         schools.put(college, subjects);

         //Search and print the given subjects any college stored in the map. 
         System.out.println(Arrays.toString(schools.get("College")));

    }
}

此代码将返回:

[Physics, Calculus, Algorithms]