2010-03-08 9 views
11

Ho una buona conoscenza dei problemi NP Complete; non è questo il problema Quello che non ho è un buon senso di dove si presentano nella programmazione "reale". Alcuni (come lo zaino e il venditore ambulante) sono ovvi, ma altri non sembrano ovviamente collegati a problemi "reali".Relazionare i problemi NP-Complete ai problemi del mondo reale

Ho avuto diverse volte l'esperienza di dover lottare con un problema difficile solo per rendermi conto che si tratta di un noto problema NP Complete che è stato oggetto di ricerche approfondite. Se avessi riconosciuto più rapidamente la connessione, avrei potuto risparmiare un po 'di tempo nella ricerca di soluzioni esistenti per il mio problema specifico.

Esistono risorse (online o di stampa) che collegano in modo specifico NP Complete alle istanze del mondo reale?

Modifica: Modifica: Ad esempio, stavo lavorando a un programma che ha cercato di dividere gli studenti in gruppi in base all'età, al grado e alla scuola di origine, che è essenzialmente un problema di partizionamento del grafico. Mi ci è voluto un po 'per realizzare la connessione.

+2

http://en.wikipedia.org/wiki/List_of_np_complete_problems – kennytm

+0

L'ultima volta che ho guardato, wikipedia era una fonte scarsa di applicazioni pratiche. Sembra essere migliorato un po '. Grazie per segnalarlo. – terru

+0

Sono d'accordo sul fatto che vedere alcune istanze reali di NP-complete/hard problems, e vedere la connessione alla versione astratta, aumenterebbe nel tempo l'intuizione per fare la connessione. –

risposta

4

Ho trovato che Computers and Intractability è il riferimento definitivo su questo argomento.

+0

Qualche commento sulla misura in cui discuteranno le connessioni con i problemi del mondo reale? Sembra concentrarsi pesantemente sulla teoria (che va bene, ma non è quello che sto cercando in questo momento). – terru

+1

Non discutono molto dei problemi del mondo reale, ma hanno una serie impressionante di problemi NP-completi e alcune discussioni su come dimostrare un problema NP-completo. Una volta che pensi di avere a che fare con un problema NP-completo o NP-duro, è un buon libro da esaminare e vedere se qualcosa sembra familiare. –

+0

È incentrato sulla teoria. Tuttavia, è piuttosto breve e se lo leggi, ti aiuterà a sviluppare quell'intuizione per quello che è probabilmente NP-completo. –

1

Di solito la connessione che si sta parlando deve essere estratto con un cosiddetto riduzione, ad esempio, si riducono 3-SAT al problema si sta lavorando e quindi si può concludere che il problema ha la stessa complessità di esso.

Questo passaggio non è banale, poiché è necessario dimostrare che si può trasformare ogni istanza problema l di un noto NP-Hard problema L in un'istanza c del problema C utilizzando un algoritmo deterministico polinomiale.

Quindi, se non da imparare correlazioni basical di comuni problemi NP-rigidi utilizzando la memoria, non c'è modo per essere sicuri che se un problema è simile ad un altro NP-Hard senza prima cercare di indovinare e poi dimostrarlo , devi essere intelligente.

+0

Tutto ciò che dici è corretto, ma non è proprio quello di cui sto parlando. Ad esempio, stavo lavorando a un programma che ha cercato di dividere gli studenti in gruppi in base all'età, al grado e alla scuola di origine, che è essenzialmente un problema di partizionamento del grafico. Mi ci è voluto un po 'per rendermene conto. – terru

1

Ecco un link wiki: http://wapedia.mobi/en/List_of_NP-complete_problems Avviso dice

Questo elenco non è in alcun modo completo (ci sono più di 3000 note problemi NP-completi)

probabilmente sarebbe essere un grande compito se qualcuno potesse compilare tale lista.

Un teorico dovrebbe cercare di capire/provare un problema NP-Completo/Difficile. Ma un programmatore non ha tempo per farlo. Ha bisogno di una lista.

Sono corretto?

Penso che si dovrebbe google. E, leggi tutti i link. Aggiungi a qualsiasi nuovo problema trovato nel link alla tua lista.

Speranza che aiuta

PS: Non dimenticate di inviare la lista quando hai finito: P

0

Per sviluppare meglio l'intuizione del libro "Manuale L'algoritmo Design, Second Edition" di Skiena (estratti su Google books) è semplicemente fantastico.

  1. List nella parte posteriore con problemi (compresi i problemi duri), che includono un'illustrazione ed una discussione (spesso) con una mondo reale esempio.
  2. Copre sia il teorico e il lato pratico delle cose, spesso parlando di codice effettivo.

Leggi excepts online qui (vedi alcuni esempi in capitoli 14): http://books.google.dk/books?id=7XUSn0IKQEgC&printsec=frontcover#v=onepage&q&f=false

capitolo 16 (non in linea) discute alcuni problemi difficili, tra cui partizione grafico.

+0

Inoltre, per i problemi gravi, fornisce suggerimenti su come effettivamente li risolvesti utilizzando, ad es. un algoritmo di approssimazione. –

+0

Il manuale di progettazione dell'algoritmo menziona anche un libro di Garey e Johnson, che ha un elenco di 400 problemi NP completi con commenti. I commenti sono la parte migliore che penso. Non ho questo libro, ma sto pensando di acquistarlo. Come te, mi piacerebbe ottenere un'intuizione migliore per riconoscere i problemi difficili nel mondo reale :) Dice: Sfoglia il catalogo non appena metti in discussione l'esistenza di un algoritmo efficiente per il tuo problema. In effetti questo è il singolo libro della mia biblioteca che raggiungo più spesso. –