1、普通查找:双层循环遍历,第二层循环中找到即break,查找时间复杂度O(M*N/2)
List<PtCameraInfo> cameraList = new List<PtCameraInfo>(); List<string> cameraIdList = dataIds.Split(',').ToList(); List<PtCameraInfo> oldList = this.cameraList.Cameras.ToList(); for (int i = 0; i < cameraIdList.Count; i++) { string cameraId = cameraIdList[i]; int j = 0; j < _cameraList.Count; j++) { PtCameraInfo camera = _cameraList[j]; if (camera.ID == cameraId && !oldList.Exists(a => a.ID == camera.ID)) { cameraList.Add(camera); break; } } }
2、高效查找:排序虽然费时,但数量级低,所以耗时很低,排序时间复杂度O(M*logM+N*logN),查找过程也是双层循环,但第二层循环比较省时,查找时间复杂度O(M*logN),总的时间复杂度:O(M*logM+N*logN+M*logN)
List<PtCameraInfo> cameraList = //排序 this._cameraList.sort(new Comparison<PtCameraInfo>((a,b) => { return string.Compare(a.ID.PadLeft(36,0'),b.ID.PadLeft()); })); cameraIdList.sort((a,b) =>string.Compare(a.PadLeft()); }); 高效查找 int k = 0; int j = k; j < _cameraList.Count; j++ camera.ID)) { cameraList.Add(camera); k = j; ; } } }
说明:cameraList的数量级是2万,当cameraIdList数量从1到大约1000时,高效查找耗时始终是0.1秒多左右,而普通查找,当cameraIdList数量很少时,很快,0.05秒,当cameraIdList数量接近1000时,大约2秒。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。