I calcoli impostati composti da unioni, intersezioni e differenze possono essere spesso espressi in molti modi diversi. Esistono teorie o implementazioni concrete che cercano di minimizzare la quantità di calcolo necessaria per raggiungere una determinata risposta? Ad esempio, ho trovato per prima cosa un'applicazione pratica di questo quando si tenta di scomporre gli atomi in una simulazione di un materiale amorfo in gusci vicini, dove la prima shell è l'immediata vicina di un dato atomo di origine e la seconda shell sono quelli atomi che sono vicini del primo guscio non in entrambi il primo guscio o quello prima:Set puramente funzionale intelligente
nth 0 = singleton i
nth 1 = neighbors i
nth n = reduce union (map neighbors (nth(n-1))) - nth(n-1) - nth(n-2)
ci sono molti modi diversi per risolvere questo. È possibile verificare in modo incrementale l'appartenenza a ciascun set mentre si compone il risultato oppure è possibile calcolare l'unione di tre shell vicine e utilizzare l'intersezione per rimuovere le due shell precedenti lasciando quella più esterna. In pratica, le soluzioni che richiedono la costruzione di grandi serie intermedie sono più lente.
Presumibilmente un'implementazione di un set intelligente potrebbe comporre l'espressione che doveva essere valutata e quindi ottimizzarla (ad esempio per ridurre la dimensione dei set intermedi) prima di valutarla al fine di migliorare le prestazioni. Esistono implementazioni di questo tipo?
Bene, suppongo che i database SQL con tabelle a colonna singola siano essenzialmente impostati con un ottimizzatore della lingua di query. Non ho idea se qualcuno di loro abbia ottimizzazioni applicabili a questa query, anche se ... o anche se SQL sia un linguaggio abbastanza interessante da poter esprimere questa query. –
Ho guardato forse una dozzina di anni fa e la risposta era "no" per questi, con la notevole eccezione degli ottimizzatori di query SQL. – Gene
Suoni come modelli di espressione C++ ... – ildjarn