将其他对象之间的对象插入到已排序的集合中

时间:2012-07-27 15:09:14

标签: algorithm sorting

我有一个排序的(Mongodb)对象集合:

{"_id": ObjectId(...), "person": "Homer", "order": 1},
{"_id": ObjectId(...), "person": "Marge", "order": 2}

我想在两个对象之间添加,追加或插入另一个对象。我试过这个使用这样的浮点数:

{"_id": ObjectId(...), "person": "Homer", "order": 1},
{"_id": ObjectId(...), "person": "Bart", "order": 1.5},
{"_id": ObjectId(...), "person": "Marge", "order": 2}

订单值是前一个和下一个对象中字段order的算术平均值。只要数字看起来不像1.9999999,它就能正常工作。然后将其四舍五入为2,并且不对该集合进行排序。 我可以用这种方式使用整数:

{"_id": ObjectId(...), "person": "Homer", "order": 1},
{"_id": ObjectId(...), "person": "Bart", "order": 2},
{"_id": ObjectId(...), "person": "Marge", "order": 3}

但这意味着需要修改其他对象,我宁愿避免这种情况。

我考虑过使用字符串和词法排序来阻止命令:

{"_id": ObjectId(...), "person": "Homer", "order": aa},
{"_id": ObjectId(...), "person": "Bart", "order": ab},
{"_id": ObjectId(...), "person": "Marge", "order": bb}

但似乎很难实施。有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:2)

我认为浮动方法最有意义。 假设你从所有位置开始作为整数,那么在你遇到精度问题之前需要一个很多的掉期。

我建议每当你改变一个项目的“顺序”时,看看它是否太靠近它的一个邻居。如果是,则重新分配对象的所有的值(因此它们都是全部整数)。

如果设置| x-y |的限制> = 2 **( - 50),这很好,因为python为浮点数保留了53个精度位,在你需要重新分配订单之前需要至少50个不幸的交换。

编辑:我刚看到您没有具体询问Python。将精度替换为适合您系统的精度。