Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-02-2010, 14:08   #1
omniaforever
Senior Member
 
Iscritto dal: Apr 2009
Messaggi: 1926
soluzione algoritmica

allora ragazzi, mi servirebbe un aiuto algoritmico..
in c# ma alla fin anche in pseudo codice mi sta bene..

sostanzialmente io ho una stringa del genere(con più coppie di numeri, anche formati da più cifre):
1-2|2-3|3-4|5-6|6-7|8-9
dovrei suddividerla in sottostringhe in modo da avere in ognuna di esse tutte le coppie del tipo a-b mostrate in precedenza che contengono un elemento in comune,..nel caso
sottostringa a) 1-2-3-4 (ma mi starebbe bene anche in 1-2-2-3-3-4, che deriva dall'unione di 1-2 con 2-3 e 2-3 con 3-4 che contengono i primi il 2 in comune e i secondi il 3)

sottostringa b) 5-6-7 (o 5-6-6-7 che derivano dall'unione di 5-6 con 6-7)

sottostringa c) 8-9

premesso che so come splittare in sottostringhe in coppie a-b(splitting sul carattere |), ed inoltre estrarre da ognuna di queste coppie il singolo numero a o b (ulteriore spit sul carattere -), ma mi interessava proprio la soluzione algoritmica per ottenere ciò che voglio..
grazie
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx:
http://www.hwupgrade.it/forum/showpo...ostcount=21774

Ultima modifica di omniaforever : 20-02-2010 alle 14:30.
omniaforever è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 14:36   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12896
In pratica se ho capito bene vorresti estrarre da:

1-2 e 2-3

1-3? giusto?

Se è così non dovrebbe essere molto complicato, dovresti tener conto in pratica degli elementi:

(a, b) (c, d) tali che b=c e a quel punto derivare la nuova coppia (a, d).
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 14:57   #3
omniaforever
Senior Member
 
Iscritto dal: Apr 2009
Messaggi: 1926
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
In pratica se ho capito bene vorresti estrarre da:

1-2 e 2-3

1-3? giusto?

Se è così non dovrebbe essere molto complicato, dovresti tener conto in pratica degli elementi:

(a, b) (c, d) tali che b=c e a quel punto derivare la nuova coppia (a, d).
no, voglio creare diverse concatenazioni che mi uniscono tutte le coppie a-b che hanno almeno un elemento in comune: cioè se ho a1-b1 e a2-b2 deve accadere che a1==a2 oppure a1==b2 oppure b1==a2 oppure b1==b2 ed in questo caso concatenerò
nel caso 1-2|2-3|3-4|5-6|6-7|8-9, lo concatnazioni finali dovranno essere 1-2|2-3|3-4( semplificando togliendo i doppioni:1-2-3-4) poi 5-6|6-7(senza doppioni 5-6-7) e poi 8-9
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx:
http://www.hwupgrade.it/forum/showpo...ostcount=21774

Ultima modifica di omniaforever : 20-02-2010 alle 14:59.
omniaforever è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 15:44   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Edita il titolo perche' non e' conforme.

Inizio con una proposta bruta e poco efficiente.
Complessita' O(N^2 Log N)

Codice:
class Program
{
    static void Main(string[] args)
    {
        string src = "1-2|5-6|3-2|6-7|9-8|3-4";

        var coupleStrings = src.Split('|');

        // Parso e ordino le coppie secondo l'elemento minore
        var CoupleOrdered = coupleStrings.Select(cs => new Couple(cs))
                                         .OrderBy(cp => cp.NumA)
                                         .ToArray();            
                          
        // Conterra' per ciascuna coppia ordinata quale e' il suo gruppo finale         
        Dictionary<int, int> Clusters = new Dictionary<int, int>();

        // Costruisco i Cluster.
        // Doppio ciclo O(N^2)
        // Per ciascun elemento se ancora non fa parte di un cluster
        //  Ne creo uno e ve lo assegno.
        // Ciclo sui successivi e ciascuno di quelli che sono insieme al pilota
        // li assegno allo stesso cluster del pilota.            
        int maxGroup=0;
        int ln = CoupleOrdered.Count();
        for (int t = 0; t < ln; t++)
        {
            int CurrentGroup;
            Couple reference = CoupleOrdered[t];
            if (!Clusters.TryGetValue(t, out CurrentGroup))
            {
                Clusters[t] = maxGroup;
                CurrentGroup = maxGroup;
                maxGroup++;
            }
            
            for (int u = t+1; u < ln; u++)
            {
                Couple other = CoupleOrdered[u];
                if (reference.IsTogetherWith(other))
                {
                    Clusters[u] = CurrentGroup;
                }
            }
        }

        // Raggruppo i Cluster di Couple secondo l'ordinale di gruppo
        // Per ogni elemento del gruppo considero la coppia originale
        // Della coppia originale ottengo l'array dei suoi 2 valori
        // Per ciasucn cluster quindi unisco insieme tutti
        //   gli array da 2 valori di tutte le coppie (SelectMany)
        // Ottengo quindi un array di stringhe per ciascun gruppo
        // Spool-out di un record per gruppo, con l'ordinale e la stringa
        //    composta dai valori distinti e ordinati comma-separated 
        var res = from cluster in Clusters
                  group cluster by cluster.Value into grp
                  let OriginalValues = grp.Select(gr => gr.Key)
                                          .SelectMany(oi=>CoupleOrdered[oi].DNum)                                                          
                                          .Distinct()
                                          .OrderBy(oi=>oi)
                                          .Select(oi=>oi.ToString())
                                          .ToArray()
                  select new
                  {
                      GrpKey = grp.Key,
                      Data = string.Join(",", OriginalValues)
                  };
                  
        // Spool-out su Console.
        var resFinalizer = res.ToList();
        resFinalizer.ForEach(Console.WriteLine);
        Console.ReadKey();
    }

    public class Couple
    {                        
        public Couple(string src)                
        {
            var strspl = src.Split('-');
            int numA = int.Parse(strspl[0]);
            int numB = int.Parse(strspl[1]);                
            NumA = Math.Min(numA, numB);
            NumB = Math.Max(numA, numB);
            DNum = new int[2] { NumA, NumB };
        }
                    
        public int NumA { get; private set; }
        public int NumB { get; private set; }            
        public int[] DNum {get; private set;}

        public bool IsTogetherWith(Couple other)
        {
            return (NumA == other.NumA || NumA == other.NumB || NumB == other.NumA || NumB == other.NumB);
        }
    }
}
Risultato
Codice:
{ GrpKey = 0, Data = 1,2,3,4 }
{ GrpKey = 1, Data = 5,6,7 }
{ GrpKey = 2, Data = 8,9 }
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 20-02-2010 alle 15:50.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 16:36   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Getto anche una soluzione migliore.
O(N)
passando attraverso matrici di adiacenze e un simil algoritmo flood-fill

Lo so, oggi mia moglie lavora e non mi passa un c...o
ma ora esco e vado con un amico ai festeggiamenti del capodanno Cinese

A sto giro non commento.
Ciau.

Codice:
class Program
{
public class Couple
    {                        
        public Couple(string src)                
        {
            var strspl = src.Split('-');
            int numA = int.Parse(strspl[0]);
            int numB = int.Parse(strspl[1]);                
            NumA = Math.Min(numA, numB);
            NumB = Math.Max(numA, numB);
            DNum = new int[2] { NumA, NumB };
        }
                    
        public int NumA { get; private set; }
        public int NumB { get; private set; }            
        public int[] DNum {get; private set;}

        public bool IsTogetherWith(Couple other)
        {
            return (NumA == other.NumA || NumA == other.NumB || NumB == other.NumA || NumB == other.NumB);
        }
    }

    static void Main(string[] args)
    {
        string src = "1-2|5-6|3-2|6-7|9-8|3-4";

        var coupleStrings = src.Split('|');

        // Parso le coppie
        var Couples = coupleStrings.Select(cs => new Couple(cs))                                             
                                   .ToArray();            
        
        var Matrix = new Dictionary<int, List<int>>();            

        // Matrice Adiacenze
        foreach(var couple in Couples)            
        {
            var NumA = couple.NumA;
            var NumB = couple.NumB;
            AddMat(Matrix, NumA, NumB);
            AddMat(Matrix, NumB, NumA);
        }

        // FloodFill
        int CurGroup = 0;

        var res = new Dictionary<int, HashSet<int>>();            

        while (Matrix.Count != 0)
        {                
            var cline = Matrix.First();
            Stack<int> CurrentFiller=new Stack<int>(cline.Value);                
            res[CurGroup] = new HashSet<int>{cline.Key};
            Matrix.Remove(cline.Key);
            while (CurrentFiller.Count>0)
            {                
                var cd = CurrentFiller.Pop();
                res[CurGroup].Add(cd);
                List<int> brother;
                if (Matrix.TryGetValue(cd, out brother))
                {
                    CurrentFiller.PushMany(brother);
                    Matrix.Remove(cd);
                }
            }
            CurGroup++;
        }

        var spooler = from r in res
                      let vals = r.Value
                                .OrderBy(val => val)
                                .Select(val => val.ToString())
                                .ToArray()
                      select new {
                          GrpKey = r.Key,
                          Data = string.Join(",", vals)
                      };

        // Spool-out su Console.
        var resFinalizer = spooler.ToList();
        resFinalizer.ForEach(Console.WriteLine);
        Console.ReadKey();
    }

    public static void AddMat(Dictionary<int, List<int>> Matrix, int NumA, int NumB)
    {
        List<int> line;
        if (!Matrix.TryGetValue(NumA, out line))
        {
            line = Matrix[NumA] = new List<int>();
        }
        line.Add(NumB);      
    }  
}

public static class Extensions
{
    public static void PushMany<T>(this Stack<T> domain, IEnumerable<T> data)
    {
        foreach (T t in data)
            domain.Push(t);
    }
}
Risultato

Codice:
{ GrpKey = 0, Data = 1,2,3,4 }
{ GrpKey = 1, Data = 5,6,7 }
{ GrpKey = 2, Data = 8,9 }
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 20-02-2010 alle 17:02.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 20:37   #6
omniaforever
Senior Member
 
Iscritto dal: Apr 2009
Messaggi: 1926
strepitoso!grazie
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx:
http://www.hwupgrade.it/forum/showpo...ostcount=21774
omniaforever è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 22:15   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da omniaforever Guarda i messaggi
strepitoso!grazie
Non e' per un esercizio vero?
Perche' tanto, anche se lo fosse, ti sgamerebbero subito.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2010, 01:56   #8
omniaforever
Senior Member
 
Iscritto dal: Apr 2009
Messaggi: 1926
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Non e' per un esercizio vero?
Perche' tanto, anche se lo fosse, ti sgamerebbero subito.
nono...mi serviva questa piccola parte per la mia tesi (ed onestamente già l'avevo trovata e volevo un confronto qui..diciamo che la mia soluzione ci sta il doppio della tua prima )
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx:
http://www.hwupgrade.it/forum/showpo...ostcount=21774
omniaforever è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Instagram introduce limite agli hashtag:...
Fortnite non arriverà sull'App Store gia...
IBM: dall’AI agentica ai dati in tempo r...
Vodafone ha la rete mobile migliore in I...
Lenovo Legion Go 2 con SteamOS: il debut...
L'aggiornamento ai contenuti pre-espansi...
Sony prepara il terreno per la sua handh...
DAZN per Android blocca l'accesso all'ut...
Amazon non si ferma più e abbassa...
Fire TV Stick 4K ancora in super offerta...
Google Pixel su Amazon, scontatissimi: t...
ECOVACS DEEBOT T80 OMNI e T50 OMNI Gen2 ...
Ribassi Bose su Amazon: QuietComfort ove...
Il portatile tuttofare migliore di Amazo...
SpaceX: un satellite ha fotografato il s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v