2012-04-04 264 views
7

Me han hecho una pregunta que es un poco ambigua para mi trabajo de curso.¿Puede un conjunto tener elementos duplicados?

The array of strings is regarded as a set, i.e. unordered. 

No estoy seguro de si necesito eliminar duplicados de esta matriz?

He intentado googlear pero un lugar me dirá algo diferente al siguiente. Cualquier ayuda sería apreciada.

+2

¿Cuáles son las referencias que ha buscado en Google? Me encantaría ver a aquellos que dicen que los elementos establecidos pueden duplicarse. –

+0

El conjunto no puede tener un elemento duplicado igual que en la tecla hash o diccionario, porque la implementación del conjunto es casi similar al hash con valor ficticio. –

Respuesta

6

Deje A = {1,2,2,3,4,5,6,7, ...} y B = {1,2,3,4,5,6,7, ...} entonces cualquier elemento en A está en B y cualquier elemento en B está en A ==> A contiene B y B contiene A ==> A = B. Entonces, por supuesto, los conjuntos pueden tener elementos duplicados, es solo que uno con elementos duplicados terminaría siendo exactamente el mismo que el que no tiene elementos duplicados.

+2

Está confundiendo la declaración de conjunto con la estructura de datos establecida. La declaración puede tener duplicados pero no la estructura en sí misma. –

25

De Wikipedia en el conjunto (Matemáticas)

Un conjunto es una colección de objetos bien definidos y distintos.

Quizás la confusión se deba al hecho de que un conjunto no depende de la forma en que se muestran sus elementos. Un conjunto permanece igual si sus elementos son supuestamente repetidos o reorganizados.

Como tal, los lenguajes de programación que conozco no pondrán un elemento en un conjunto si el elemento ya le pertenece, o lo reemplazarían si ya existe, pero nunca permitirían una duplicación.

Ejemplos de lenguajes de programación

Permítanme ofrecer algunos ejemplos en diferentes lenguajes de programación.

En Python

Un conjunto en Python se define como "una colección desordenada de elementos únicos". Y si declara un conjunto como a = {1,2,2,3,4}, solo agregará 2 al conjunto.

Si lo hace print(a), la salida será {1,2,3,4}.

Haskell

En Haskell se define la operación de inserción de los conjuntos como: "[...] si el conjunto ya contiene un elemento igual al valor dado, es reemplazado con el nuevo valor "

Como tal, si hace esto: let a = fromList([1,2,2,3,4]), si imprime a a la salida principal representaría [1,2,3,4].

Java

En conjuntos de Java se definen como: "una colección que contiene no hay elementos duplicados". Su operación de adición se define como: "agrega el elemento especificado a este conjunto si no está presente [...] Si este conjunto ya contiene el elemento, la llamada deja el conjunto sin cambios".

Set<Integer> myInts = new HashSet<>(asList(1,2,2,3,4)); 
System.out.println(myInts); 

Este código, como en los otros ejemplos, se ouput [1,2,3,4].

+0

Ah, gracias, ¿entonces no importa si los elimino o cambio el orden? – dev6546

+0

Mi punto es que no hay una propiedad matemática de los conjuntos que consiste en determinar cuántas veces un elemento pertenece a un conjunto o no. Si tenía A = {1,2,2,3,4}, puede preguntar si 2 ∈ A y la respuesta es sí, independientemente de cuántas veces apareció en el conjunto. –

+0

@Lewis: El punto es que un conjunto no implica CUALQUIER COSA sobre ordenar algo, por lo que ni siquiera debería ser una pregunta. Claro, podría ser que su implementación de un conjunto mantenga todo en el orden de inserción, pero eso no está definido en la definición de un conjunto. Una implementación válida de un conjunto podría ser algo que simplemente agregue cualquier elemento que desee agregar, pero cuando le pregunta qué elementos tiene, solo devuelve cada valor uno (es decir, valores distintos). –

2

Un conjunto no puede tener elementos duplicados por su mera definición. La estructura correcta para permitir que los elementos duplicados es Multiset or Bag:

En matemáticas, un conjunto múltiple (o bolsa) es una generalización del concepto de un conjunto que, a diferencia de un conjunto, permite varias instancias de los elementos de la multiconjuntos. Por ejemplo, {a, a, b} y {a, b} son multisets diferentes, aunque son el mismo conjunto. Sin embargo, el orden no importa, entonces {a, a, b} y {a, b, a} son el mismo multiset.

A muy común y ejemplo útil de un Multiset en la programación es la colección de valores de un objeto:

values({a: 1, b: 1}) //=> Multiset(1,1) 

Los valores aquí son desordenada, sin embargo, no se puede reducir a Set(1) que, por ejemplo, romper la iteración sobre los valores del objeto.

Además, citando del artículo de Wikipedia enlazado (ver allí para las referencias):.

conjuntos múltiples se han convertido en una herramienta importante en bases de datos [18] [19] [20] Por ejemplo, los multisectos se usan a menudo para implementar relaciones en los sistemas de bases de datos. Las multiestaciones también juegan un papel importante en la informática.

Cuestiones relacionadas