2012-04-21 20 views
5

He leído un montón de artículos sobre la elección de la correcta recaudación para una aplicación específica, y entiendo que al final todo se reducirá a la evaluación comparativa de los datos reales, pero mientras estoy ocupado haciendo que:Colección modificar elemento

  • ¿Qué colección ordenada en C# permite la modificación de un artículo contenido? Parece que no puedo encontrar ninguno?

  • Esto es porque una modificación probablemente se implementaría como una eliminación luego volver a insertar, por lo tanto, hacer una función explícita 'Modificar' inútil?

Estoy en la necesidad de una colección (personalizado o biblioteca estándar), con las siguientes operaciones que se realizan en él.

  • Insertar - a menudo
  • Remove - a menudo
  • Modificar - muy a menudo
  • elementos Seleccione Inicio X - cada vez que cualquiera de los anteriores sucede, y más, al mismo tiempo.

Actualmente estoy usando un SortedSet, ya que proporciona insertos (O) logn, pero no tengo muy claro en rendimiento de eliminación y cómo modificar un artículo mejor.

+0

¿La colección necesita ordenarse en todo momento? Obtendrá un gran beneficio de rendimiento si puede aplicar múltiples modificaciones y luego ordenarlas una vez. –

+0

@Evenhuis Desafortunadamente sí, porque varios "clientes" solicitarán esta lista, y la necesitan en orden ordenado cada vez que se realiza un cambio en esta lista. O al menos el elemento superior. – Vort3x

+0

Utilizamos un BST equilibrado en nuestro curso de estructuras de datos. Fue bastante rápido pero lo implementamos en C++. Puede considerarlo tal vez. Aquí hay una buena fuente de información: http: //www.codeproject.com/Articles/68500/Balanced-Binary-Search-Tree-BST-Search-Delete-Prin –

Respuesta

1

Primero, debemos aclarar el significado de modificar una colección.

En general, manipular la colección se refiere a insertar/eliminar elementos de la lista. Para modificar un elemento individual, básicamente se accede al elemento y se modifican sus propiedades. El costo de acceder a un elemento depende de la implementación de la colección, pero la modificación de las propiedades del elemento no depende de la colección. También tenga en cuenta que no puede modificar un elemento de colección si no es mutable.

Si solo busca las mejores colecciones integradas, básicamente está eligiendo entre SortedList y SortedSet (SortedDictionary es lo mismo que SortedSet).

SortedList almacena los datos internamente como una matriz, por lo que tiene un acceso eficiente por índice (para obtener los principales elementos X); SortedSet tiene una inserción y eliminación más rápida (por factor constante), pero el acceso indexado requerirá buscar en el árbol el siguiente elemento que en el peor de los casos es O (log n) y lo mejor es O (1).

Aparte de eso, la diferencia entre los dos es bastante pequeña, ya que ambos implementan Red Black Tree, solo difiere en los detalles de implementación.

El rendimiento real deberá medirse para sus casos de usuario. Pero tu ya sabes eso.

Cuestiones relacionadas