在我的python项目中,我有一张员工地图。关键是employee number
,值是employee information
的对象,值中的location
字段是唯一,例如,
mapA = {12: {name: 'John Ma', location: 'US'}, 25: {name: 'Richard Yan', location: 'Eng'}, ...}
还有另一个地图,关键是location
,而值是另一个具有其他内容的对象。比如,
mapB = {'US': objectS1, 'Eng': objectS2, ...}
现在我想在employee number
和objectS
之间构建一个名为mapC的地图。
mapC = {12: objectS1, 25: objectS2 ...}
我必须在mapA的对象中找到该位置,然后获取指向该对象的键。然后在mapB中使用此键和objectS来构建新的mapC。这样,时间复杂度为O(N ^ 2)。
为了减少时间复杂度,首先我通过遍历mapA构建mapD,其中键为location
,值为employee number
,然后我可以轻松获得mapC。
这个问题有更好的解决方案吗?
BTW,另一个问题出现在我的脑海中:数据库中主键和辅助键的最佳数据结构是什么?例如,这是一个表,
| Username | Password | Email_Addr |
--------------------------------------
| Username1 | Password1 | Email 1 |
| Username2 | Password2 | Email 2 |
| Username3 | Password1 | Email 3 |
和username
是第一个主键,Password
是辅助键,存储它们以获得最佳性能的最佳数据结构是什么?
IMO,简单地说,将用户名和密码组合为一个复合键。我们根据以下比较函数对这些记录进行排序,
bool key_compare(string key1, string key2){
return key1+key2 > key2+key1;
}
,这些信息存储在 B_tree 。
中 编辑2
我们知道,从this文档可以使用哈希表和反向表来实现这两个索引。在上表中,
哈希表保存Username
的信息和每条记录的地址
{Username1: 'record1 address', Username2: 'record2 address'}
倒置表保存Password
和记录地址表的信息。
{Password1: ['record1 address', 'record3 address'], Password2: ['record2 address']}
修改1 我想知道数据库如何处理它们,例如,MySQL ... B_tree旁边是否有hashMap?提前谢谢。
答案 0 :(得分:0)
我认为更好的解决方案是使用一个将id映射到员工的地图,并将所有关于所述员工的信息保存在'Employee对象中。
因此,基于您的示例,Employee将具有两个值 名字 2.位置
您的问题似乎是位置是另一张地图的关键,而不是您想要抓取的信息。为什么不拥有包含所有这些信息的“位置”对象?您将无需第二张和第三张地图。
使用以下信息创建“位置”对象: 1.国家 2.纬度\经度
所以现在
mapA = {12: employee1, 43: employee2, ...}
employee1有以下信息: name ='John' location = usLocation
usLocation是一个类型为location的对象,它包含了封装在其中的所有相关信息。
至于你的第二个问题,我没有处理过很多SQL,所以我会让其他人解决这个问题。