¿Cómo diseñaría un algoritmo para clasificar 100 millones de libros y encontrar duplicados funcionales?

Como lo sugirió RaviKumar Kothuri, movió el comentario para responder.

En primer lugar, hay muchos parámetros en función de los cuales se puede realizar la clasificación, consideremos que queremos clasificar utilizando el ISBN no. para que cada libro pueda identificarse de manera única.

Así que ordenemos los libros en base al ISBN no. (13 dígitos), suponiendo que tenga un número ISBN válido. si no puede, simplemente escriba una función para verificar si ISBN es válido o no.

público booleano estático isISBN13Valid (String isbn)
{ int check = 0;
para ( int i = 0; i <12; i + = 2)
{
check + = Integer.valueOf (isbn.substring (i, i + 1));
}
para ( int i = 1; i <12; i + = 2)
{
check + = Integer.valueOf (isbn.substring (i, i + 1)) * 3;
}
check + = Integer.valueOf (isbn.substring (12));

cheque de retorno % 10 == 0;
}
Consulte wiki para esto, Número de libro estándar internacional

y finalmente ordenar libros válidos que tengan números ISBN válidos.

Ahora, teniendo en cuenta la escala de la que está hablando, 100 M, primero debe tener una máquina en la que esa cantidad pueda caber bien + algo de espacio para otro proceso (olvidemos esto)
entonces la respuesta es SÍ si no. puede caber en la máquina suponiendo que cada número entero tome 32 bits.

por ejemplo, puede ordenar alrededor de 134217728 enteros usando 4 GB de RAM en el sistema y para 100 m solo necesita 4 MB de memoria, creo que puede ordenar fácilmente en el sistema que tenemos hoy.

Si no es así, debe usar el algoritmo de dividir y conquistar, como Clasificación externa, también conocido como fusión, para no decir que tiene M memoria disponible y N tamaño de datos, debe dividir eso en k = N / M fragmentos, ordenar cada fragmento individualmente y escribe de nuevo en el disco y finalmente fusiona todo esto, mientras combina puede usar Min Heap para minimizar la llamada a lectura-escritura.

Para duplicados funcionales, debe verificar los algoritmos de duplicación de documentos si se refiere a los contenidos

Si fuera usted, haría un hash con los números ISBN de cada libro (si ordenando en la pregunta quiere decir ordenar ISBN).
simplemente puede usar un servicio de API como la familia de API de Google Books: Google Developers para hacerlo y no tener que preocuparse por la memoria.

Dada la complejidad del problema, puede utilizar un mapa de bits para representar el estado de los libros.
crear un mapa de bits e iniciarlo en 0.
procese todos los libros del uno al 100M y configure el bit correspondiente en el mapa de bits.
si el bit ya está configurado, puede suponer esto como duplicado y tratarlo.
continúa procesando y terminarás clasificando todos los libros que tienes
Puedes resolver este problema en O (n).

Referencias
Matriz de bits
Programming Pearls (libro de 1986)

More Interesting

¿Hay algún algoritmo de dirección de camino legible para humanos?

¿Qué algoritmo es mejor para datos no estructurados?

¿Cómo no es aplicable el algoritmo de Dijkstra a los gráficos con pesos negativos? ¿No podemos simplemente agregar alguna constante a cada peso para que cada peso sea positivo, y luego aplicar el algoritmo de Dijkstra para encontrar el camino más corto?

Estoy aprendiendo algoritmos, ¿para qué sirve la notación Big O?

Cómo resolver el problema de 'La lista negra' en un CodeSprint reciente de HackerRank

¿Cuál es el significado de la ganancia de Kalman? ¿Qué produciría una ganancia mayor / menor?

¿Qué algoritmo puedo usar para generar enteros (pseudo) aleatorios con una duración de ciclo infinito?

¿Cuáles son algunas técnicas utilizadas en la criptación?

¿Cuál es la diferencia entre programación dinámica y recursividad?

¿Está bien tomar referencias de otras soluciones mientras se resuelve la programación competitiva para un principiante?

Cómo resolver este problema SPOJ

¿Cuál es el mejor método para aprender efectivamente ciencia de datos / aprendizaje automático desde cero para un estudiante promedio de Ingeniería (idiomas, algoritmos, tutoriales, etc.)?

¿Qué significa esta notación sigma?

¿Cuál es el mejor sitio en línea para aprender estructuras de datos y algoritmos?

¿Por qué hay una diferencia de complejidad de tiempo entre los algoritmos de clasificación en Java cuando estoy usando Integer e integer?