Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在已排序集合中的其他对象之间插入对象_Algorithm_Sorting - Fatal编程技术网

Algorithm 在已排序集合中的其他对象之间插入对象

Algorithm 在已排序集合中的其他对象之间插入对象,algorithm,sorting,Algorithm,Sorting,我有一个已排序(Mongodb)的对象集合: {"_id": ObjectId(...), "person": "Homer", "order": 1}, {"_id": ObjectId(...), "person": "Marge", "order": 2} 我想在两个对象之间添加、附加或插入另一个对象。我尝试过使用如下浮点数: {"_id": ObjectId(...), "person": "Homer", "order": 1}, {"_id": ObjectId(...), "pe

我有一个已排序(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 value是上一个对象和下一个对象中字段
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}

但这似乎难以实施。有更简单的方法吗?

我认为浮动方法最有意义。 假设开始时所有位置都是整数,那么在遇到精度问题之前需要进行大量的交换

我建议,每当你改变一件物品的“顺序”时,看看它是否离它的邻居太近。如果是,请重新指定所有对象的值(使它们再次都是整数)

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


编辑:我刚才看到您没有特别询问Python。用对您的系统有意义的东西替换精度。

什么是“订单”?不管怎样,您看起来已经将对象按顺序排列,因此我不确定您为什么需要设置顺序项。你们能不能不把它设置在输出或其他什么上?我查询并显示它们。在对象保存到Mongodb之后,用户可以修改其顺序。下次我想以同样的顺序展示它们。我无法想象仅仅重新编号会有那么大的开销。否则的话,你的字母排序会很好的,如果插入的对象后面只有几个对象,那就行了。我担心当有数百台时,性能会下降。我只想更新或插入一些对象,不要触摸其他对象。