Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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
C# 找到合适的藏品还是以我自己的方式写作?_C#_Sorting_Dictionary_Collections_Path Finding - Fatal编程技术网

C# 找到合适的藏品还是以我自己的方式写作?

C# 找到合适的藏品还是以我自己的方式写作?,c#,sorting,dictionary,collections,path-finding,C#,Sorting,Dictionary,Collections,Path Finding,我正忙着找路。 我目前使用字典保存所有要评估的点,然后在不再需要它们时删除它们。这相当快,因为我可以在添加和删除时直接解决一个问题,并从中获得O(1)性能 但是,在某一点上,我需要评估所有开放点,并根据每个点对象内的值找到最佳的开放点。所以我们在这个字典中做一个foreach循环,需要对每个循环进行评估,直到最后。O(n)性能是否正确 所以我现在正在寻找一条中间道路。我希望能够使用O(1)获取任何节点,但我希望能够更高效地获取我想要的点对象。在这种情况下,我总是希望找到最低的值,所以我可以根据这

我正忙着找路。 我目前使用字典保存所有要评估的点,然后在不再需要它们时删除它们。这相当快,因为我可以在添加和删除时直接解决一个问题,并从中获得O(1)性能

但是,在某一点上,我需要评估所有开放点,并根据每个点对象内的值找到最佳的开放点。所以我们在这个字典中做一个foreach循环,需要对每个循环进行评估,直到最后。O(n)性能是否正确

所以我现在正在寻找一条中间道路。我希望能够使用O(1)获取任何节点,但我希望能够更高效地获取我想要的点对象。在这种情况下,我总是希望找到最低的值,所以我可以根据这个值排序。但是,我找不到一个集合,它可以直接获取键值,同时根据我的值对它们进行排序。(我会在添加一个新的列表时对它们进行排序。理想情况下,只需浏览列表并将其添加到其他列表之间,然后根据该神奇值将其放入其中)

有人知道最好的收藏是什么吗?或者我最好写一个我可以习惯性地操作的链表?如中所示,每个点对象都有一个指向下一个点对象的引用,因此我可以通过更改链中的1个引用在两者之间添加一个引用。我还可以找到最好的下一个进行评估,因为它始终是链中的第一个

任何建议都将不胜感激,
微笑

那么使用两本字典有什么问题?一个是键是当前的,另一个是键是你的“魔法值”,这样你就可以使用不同的标准定位对象,并且仍然获得O(1)性能?第二个字典仍然是一个字典,因此没有排序。因此,对我目前的处境毫无帮助?也许不是最好的内存方式,但如果我能保证这样的速度,我不会介意这样的解决方案。您仍然可以使用SortedSet对其进行排序,然后您可以从第二个字典中获取数据的子集。出于某种原因,SortedSet具有O(logn)查找效率,即使它使用类似于字典的键。如果我是正确的,它比O(n)更好,但我仍然想知道为什么它不是O(1),因为它使用了键。