Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-12-2009, 13:33   #1
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
[Generico / C#] - Comparare due cose che potrebbero essere chiamate "alberi"

Salve a tutti...

ho due strutture dati che possono essere riassunte attraverso lo schema XML presente nel primo snippet.

Finché devo fare il confronto di uguaglianza, é tutto abbastanza facile. Il problema viene quando devo ordinare una lista di di queste strutture dati secondo la somiglianza ad un dato template.

Anzi, finché non considero gli elementi "booleani" (ad eccezione del primo and che é implicito) é semplice anche comparare. Il problema é quando sia il template che le strutture dati da comparare possono rappresentare una funzione booleana (qualcosa tipo: "condizione 1 and condizione 2 and (condizione3 and not condizione 4)".

Per ora me la sono cavata con questa soluzione:

La lista da comparare invoca su ogni suo elemento un metodo che accetta il template. Ogni elemento della lista invoca a sua volta, recursivamente, un metodo che assegna un punteggio per ogni condizione rispettata.

Ho dovuto usare la ricorsione perché in questo modo, una volta rilevato un nodo "booleano", invoco la stessa funzione sui suoi figli.

Ovviamente non chiedo una soluzione completa, mi interessa piú un consulto su metodologie ed algoritmi.

Grassie a tutti e spero di essere stato abbastanza chiaro.

Schema XML:
Codice:
<xs:schema targetNamespace="http://www.educations.com/Search/Parameters.xsd"
    elementFormDefault="qualified"
    xmlns="http://www.educations.com/Search/Parameters.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:element name="parameters">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element type="parameter" name="parameter" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="parameter" abstract="true">
    <xs:attribute name="required" type="xs:boolean" default="true" use="optional" />
  </xs:complexType>

  <xs:complexType name="or">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:sequence minOccurs="2" maxOccurs="unbounded">
          <xs:element name="parameter" type="parameter" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="and">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:sequence minOccurs="2" maxOccurs="unbounded">
          <xs:element name="parameter" type="parameter" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="not">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:all minOccurs="1" maxOccurs="1">
          <xs:element name="parameter" type="parameter" />
        </xs:all>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="place" final="extension">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:attribute name="placeID" type="xs:int" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="type">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:attribute name="typeID" type="xs:int" />
      </xs:extension> 
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="category">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:attribute name="categoryID" type="xs:int" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="marker">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:attribute name="markerID" type="xs:int" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  
  <xs:complexType name="keywords">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:sequence minOccurs="1" maxOccurs="unbounded">
          <xs:element name="keyword">
            <xs:complexType>
              <xs:attribute name="key" type="xs:string" />
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  
  <xs:complexType name="keyword">
    <xs:complexContent>
      <xs:extension base="parameter">
        <xs:attribute name="value" type="xs:string" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>
alcuni esempi di struttura serializzata secondo lo schema:
Codice:
<parameters xmlns="http://www.educations.com/Search/Parameters.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <parameter xsi:type="category" categoryID="4" />
</parameters>

<parameters xmlns="http://www.educations.com/Search/Parameters.xsd">
  <parameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="keyword" value="fly" />
</parameters>

<!-- categoryID = 23 && placeID != 24 -->
<parameters xmlns="http://www.educations.com/Search/Parameters.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <parameter xsi:type="category" categoryID="23" />
  <parameter xsi:type="place" placeID="24" />
</parameters>

<!-- categoryID = 4 && (placeID == 24 || placeID == 7) -->
<parameters xmlns="http://www.educations.com/Search/Parameters.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <parameter xsi:type="category" categoryID="4" />
  <parameter xsi:type="or">
    <parameter xsi:type="place" placeID="24" />
    <parameter xsi:type="place" placeID="7" />    
  </parameters>
</parameters>
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2009, 20:47   #2
Gremo
Senior Member
 
L'Avatar di Gremo
 
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
Questo potrebbe essere d'aiuto?
Gremo è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2009, 23:34   #3
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
grazie del consiglio, onestamente non avevo pensato all'interfaccia IComparable, ora mi vedo un po' come innestarla.
Kralizek è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Il futuro di Dacia: ecco Striker, ma arr...
LG e DataVolt avviano una partnership: s...
Google, una modifica del kernel Android ...
A casa di Givi Bike per scoprire la line...
Il nuovo Samsung Galaxy S26 Ultra si pu&...
Google Play Games sfida Steam: demo, com...
HP Victus 15: un notebook gaming potente...
HPE al MWC 2026: la rete come spina dors...
Monitor da ufficio e gaming a prezzi ass...
Silent Hill 2 Remake è un trionfo...
Logitech svende le periferiche: mouse ga...
Uno studio accusa i principali chatbot A...
Loot box e gioco d'azzardo: Valve ai fer...
Pulire casa al posto tuo? Il robot umano...
iPhone 17 da 256GB al minimo storico: or...
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: 13:21.


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