Acabo de estudiar la estructura de datos set disjuntos y sé que también se llama "union-find data structures", la unión y find son dos operaciones principales de esta estructura de datos. Podemos realizar la unión en conjuntos disjuntos, del mismo modo podemos realizar operaciones de búsqueda; Quiero saber qué otras operaciones podemos realizar en conjuntos disjuntos excepto union y find.¿Qué operaciones se pueden realizar en conjuntos disjuntos?
Respuesta
La estructura de conjuntos disjuntos también se denomina "estructura union-find". Por lo tanto, las operaciones union
, find
y MakeSet
deben ser compatibles de todos modos. Otras operaciones no son de lo que se trata esta estructura, y si son compatibles depende de la implementación y los objetivos que tenga. A veces tendrá que elegir una implementación particular específicamente para adaptarse a las necesidades de su proyecto de opertaciones adicionales.
Aparte de eso, sería bueno si admitiéramos las otras operaciones básicas relacionadas con el conjunto. Vamos a enumerarlos:
- intersección de dos conjuntos. Como los conjuntos son disjuntos, siempre están vacíos a menos que estos dos conjuntos coincidan.
- unión de dos juegos - compatible con la caja.
- obtener un elemento del conjunto - compatible, es muy probable el resultado de
find
. - eliminar un elemento del conjunto - depende de la implementación. Cuando los conjuntos se implementan como bosques, es complicado y requiere operaciones adicionales más lentas. Cuando los conjuntos se implementan como listas vinculadas, es simple.
- enumere el conjunto, es decir, itere cada elemento en el conjunto dado. Depende de la implementación de nuevo: para las listas vinculadas es simple, para la implementación de tipo bosque requiere estructuras adicionales para soportar.
Con la estructura de datos vainilla union-find, no puede enumerar el conjunto real, por lo que muchas de las operaciones establecidas no están disponibles. Esto se debe a que en la versión estándar solo tienes punteros en una dirección --- en la imagen siguiente, cada línea diagonal corresponde a una flecha hacia arriba, y las raíces (línea superior) son los objetos raíz para los conjuntos:
o [set1] o [Set2]
/\ \
o o o
/
o
Así que no hay forma de encontrar todos los objetos de, digamos, el conjunto 1; por ejemplo, no puede rastrear rutas desde el nodo raíz. También podría tener punteros hacia abajo, pero esto complica la estructura de datos significativamente porque un objeto puede tener un número arbitrario de padres en la estructura de datos.
Así que es realmente todo para las siguientes operaciones:
- respuesta a: ¿Mis objetos A y B pertenecen al mismo conjunto o no?
- Combinar establece S1 y S2 de manera que todos los objetos en los juegos de ahora se consideran que pertenecen a la misma serie
Elaborar esto, la estructura de datos de la Unión-set tiene tiempo complejidad muy baja para las operaciones que apoya ; tanto la combinación de conjuntos como la respuesta del mismo conjunto toman tiempo constante amortizado (O (1)); debido a esta misma complejidad de tiempo, no puede admitir todas las operaciones establecidas.Por ejemplo, una representación de conjunto estándar es por un árbol de búsqueda [binario], donde la mayoría de las operaciones tienen complejidades O (log n) al menos.
El objetivo de la estructura de conjuntos disjuntos union-find no se trata tanto de realizar operaciones de conjuntos elementales, como su pregunta y otros encuestados parecen sugerir. En cambio, se trata de ser una implementación altamente eficiente de la estructura que necesitan ciertos algoritmos. En particular, la búsqueda de componentes conectados y árboles de expansión mínima crea sus implementaciones más eficientes además de los conjuntos disjuntos de unión.
- 1. "Las operaciones dinámicas solo se pueden realizar en el dominio de aplicación homogéneo" error
- 2. Subversion: ¿Se pueden realizar varias operaciones de copia en una sola revisión?
- 3. ¿Cómo se utilizan conjuntos disjuntos en el etiquetado de componentes conectados?
- 4. ¿Se pueden realizar eventos personalizados con UIControlEventApplicationReserved?
- 5. Cómo realizar operaciones de fecha en hibernación
- 6. ¿Qué tareas de bajo nivel se pueden realizar en la JVM, pero no expresadas en Java?
- 7. ¿Qué operaciones en Java se consideran atómicas?
- 8. ¿Qué operaciones son operaciones atómicas
- 9. Cómo realizar operaciones booleanas elemento prudentes en matrices numpy
- 10. ¿Cómo realizar operaciones al reproducir sonido en iPhone?
- 11. ¿Se considera un mal diseño realizar operaciones largas en un constructor?
- 12. Cómo optimizar las operaciones en grandes (75,000 elementos) conjuntos de booleanos en Python?
- 13. ¿Puede el preprocesador C realizar operaciones aritméticas enteras?
- 14. Evaluar expresiones de conjuntos
- 15. ¿Se pueden realizar recorridos en paralelo en MATLAB igual que en Python?
- 16. No se pueden realizar cambios en el repositorio de git local
- 17. ¿Qué clases no se pueden subclasificar?
- 18. ¿Qué idiomas se pueden compilar a javascript?
- 19. ¿Por qué las operaciones LINQ pueden ser más rápidas que un bucle normal?
- 20. ¿Cómo se pueden realizar las pruebas de automatización en Silverlight con Selenium?
- 21. ¿Cuántas llamadas HttpWebRequest de salida simultáneas se pueden realizar en ASP.NET/IIS7?
- 22. ¿Qué operaciones son baratas/caras en mongodb?
- 23. ¿Es posible realizar operaciones bit a bit en una cadena en Python?
- 24. Cómo realizar operaciones de eliminación de AJAX sin problemas en los rieles
- 25. ¿Cómo realizar diferentes operaciones dentro de la actualización de Observer() en Java?
- 26. C# Bitwise Operaciones en cortocircuitos - ¿Por qué lanzar a int?
- 27. Encontrar subconjuntos que se pueden completar en tuplas sin duplicados
- 28. ¿Qué tokens se pueden parametrizar en declaraciones preparadas con PDO?
- 29. ¿Qué columnas se pueden usar en la cláusula OUTPUT INTO?
- 30. ¿Por qué se pueden invocar procs con === en ruby 1.9?