Следующая процедура (объяснение следует) отлично работает для действительно небольших списков, но когда список содержит большее количество элементов (1/2 миллиона), приложение вводит «не отвечает», и требуется около 2,5 минут (очень плохое время). Я мог бы добавить, что приложение должно обрабатывать списки из 100 миллионов элементов как минимум (в конечном итоге).достаточно смешно, это, вероятно, проблема переполнения стека
вот код для проблемной процедуры:
public void removeItems(List<long> L, SortedList<long, List<long>> _subLists)
{
foreach (KeyValuePair<long, List<long>> kvp in _subLists)
{
foreach (long duplicate in kvp.Value)
{
int j = L.IndexOf(duplicate);
L.RemoveRange(j,(int)kvp.Key);
}
}
}
L представляет собой список длинных значений. _subLists - это отсортированный список, в котором каждое значение представляет собой список значений из L, начиная ряд арифметических прогрессий с некоторой разницей (не относится). ключ, связанный с этим значением, представляет собой длину ряда, содержащую значения.
Пример:
L = {1,2,3,5,6,7,18,20,21} _subLists = {2, < 20>} {3, < 1,5> }
процедура просто удаляет арифметическую прогрессию из серии L.
Какой язык? И в чем вопрос? – 2009-05-11 14:57:39
C#. идеи для более быстрой реализации? – 2009-05-11 15:10:55