哪个代码更好?

时间:2018-03-27 10:19:40

标签: javascript arrays algorithm

我建议我的大四学生使用下面代码的hashmap来匹配数据。我确信下面代码的复杂性是O(n * n),我认为使用散列这可能是线性的。谁能证实我是对的?假设presencePatients = 100000,fhirPatients = 10000,beds = 10000,departments = 5000

let filteredPatients = new Array();

presencePatient.forEach( patient => {

    let fhir  = fhirPatient.find((fhir)=>{
        return ( fhir.pid === patient.id);
    });

    let beds = bedsInHospital.find( (bed) => {
        return (bed.id === patient.bedId);
    });

    let deparmtment = departmentsInHospital.find( (deparmtment) => {
        return (deparmtment.id === patient.icuId);
    });

    let obj = {
        name : patient.name,
        dob : patient.dateOfBirth,
        gender : patient.gender,
        email : patient.emailId,
        maritialStatus : patient.maritialStatus,
        mrn : patient.mrn,
        contact : patient.phoneNumber,
        bed : beds.name,
        deparmtment : deparmtment.name
    };

    filteredPatients.push(obj);
});

2 个答案:

答案 0 :(得分:5)

“更好”是一个主观的术语。

需要考虑的一些要点:

  • 是的,如果您有Mapid为患者,床位和部门键入的对象,一般按id查找患者,病床和部门使用Map /对象更快,而不是对这些数组进行线性搜索。
  • ,假设您需要数组以及代码的其他部分,同时维护数组和Map /对象会导致代码复杂性成本(主要问题)和额外的开销。
  • 如果数组很大,线性搜索只会有问题。

如果列出的代码存在性能问题,那么您可能会考虑Map /对象查找(接受添加它以支持提高速度的成本)。但如果没有,可能会过早优化引入不必要的代码复杂性。

答案 1 :(得分:2)

@ T.J有很好的答案。克劳德。但是,我想就索引数据结构的有用性上限提出我的反对意见。

是。除了上述代码之外,在多个位置使用和修改源数据可能是正确的。更新索引辅助结构可能会提供额外的性能优势。但是这会给其他地方的代码带来额外的复杂性,这对于这个应用来说可能是不可接受的。

但是,我想指出上面的代码将会: 各种循环中的100 000 *(X fhirPatients + Y床+ Z部门)迭代。

另一方面,如果我们做索引传递,它将大致相当于: 6 *(X fhirPatients + Y床+ Z部门)

构建索引的成本非常便宜,因此,即使仅针对上述代码,也会显着加快速度!

需要提出的第二点是,对于大型计算重型代码,应使用高效的数据结构作为主要数据结构。因此,从数组到哈希映射的重构也许是一个很好的决定。如果数据使用更加复杂,那么引入轻量级或完整的内存和进程内数据库也有助于控制复杂性。