Mi sono imbattuto in un'attività che consente di verificare se una stringa passata come argomento al metodo/funzione è un'istruzione corretta nel senso di notazione polacca inversa. Può contenere lettere dell'alfabeto minuscolo, segni di operazione e numeri interi. C'è un modo più veloce per controllarlo che leggere ogni personaggio separatamente e in realtà cercare di valutare l'intera espressione?Qual è il modo più veloce per verificare se Input String è un'espressione RPN corretta?
risposta
Non è necessario valutare l'intera espressione ma è necessario suddividerla in token e occorre conoscere la valenza di ogni operatore (ovvero, quanti operandi richiede). Per semplicità, lascia che la valenza di un operando sia 0; quindi effettuare le seguenti operazioni:
Set stack_size to 0;
For Each token In expression:
Set stack_size to stack_size + 1 - valence(token)
If stack_size <= 0: Report failure
If stack_size == 1: Report success
Else : Report failure
Esempi utilizzando _
per meno unario.
expression: 3 4 + 1 * _
stack_size: 0 1 2 1 2 1 1 -> success
expression: 2 3 4 + 1 * _
stack_size: 0 1 2 3 2 3 2 2 -> failure (not 1 at the end)
expression: 2 3 + + 1 * _
stack_size: 0 1 2 1 0 -> failure (stack_size <= 0)
È possibile utilizzare una tabella di analisi per riconoscere la notazione del lucido inverso. Richiede l'osservazione di ogni personaggio, ma è veloce.
Vedo. Grazie :) – Straightfw
Wikipedia ha un buon algoritmo per analizzare l'espressione. A meno che l'espressione non sia valida (nel qual caso è possibile terminare anticipatamente), non è possibile fare meglio di O (n). Cioè, devi valutare tutti i token nella stringa per assicurarti che sia valido.
- 1. Qual è il modo migliore e più veloce per verificare se l'immagine è valida in PHP?
- 2. Qual è il modo più veloce per verificare se due Tbitmap sono uguali?
- 3. Qual è il modo più veloce per verificare se una classe ha una funzione definita?
- 4. Qual è il modo più veloce per verificare se due numeri dati sono coprimi?
- 5. Il modo più veloce per verificare se esiste un oggetto
- 6. Il modo più veloce per verificare se un tipo è blittabile?
- 7. Qual è il modo più veloce per verificare le cifre duplicate di un numero?
- 8. Qual è il modo più affidabile per verificare se una variabile JavaScript è nullo?
- 9. Qual è il modo più veloce per verificare che la voce esista nel database?
- 10. Qual è il modo più veloce per verificare se una stringa contiene caratteri ripetuti in Python 3?
- 11. Qual è il modo migliore per verificare se un UIAlertController è già presente?
- 12. (Wide) String - memorizzazione in TFileStream, Delphi 7. Qual è il modo più veloce?
- 13. Qual è il modo più veloce per verificare se un punto si trova all'interno di un poligono in python
- 14. WCF - qual è il legame più veloce?
- 15. Il modo più veloce per verificare una stringa è alfanumerico in Java
- 16. Qual è il modo più semplice per verificare se la stringa contiene un tag immagine?
- 17. Modello Meteor: qual è il modo più semplice per verificare se un utente ha effettuato l'accesso?
- 18. Il modo più veloce per verificare se una stringa può essere analizzata in Double in Java
- 19. Qual è il modo più veloce per calcolare la distribuzione di frequenza per array in C#?
- 20. Qual è il modo più semplice in C# per convalidare se un'espressione regolare è ben formata?
- 21. Lua - Se e, cosa è più veloce?
- 22. Qual è il modo più semplice per leggere diversi ints da stdin se è ok fallire?
- 23. Qual è il corretto "modo clojure" per verificare se una raccolta non è vuota
- 24. Qual è il modo più efficace per verificare se una stringa inizia con un certo carattere in TCL?
- 25. Qual è il modo più veloce per ottenere più copie di un albero in python?
- 26. Qual è il modo più semplice per determinare se `<input type =" email "..` (per esempio) è supportato nel browser corrente?
- 27. Qual è il modo più semplice/veloce per scoprire quando è stato creato un ramo git?
- 28. Il modo migliore per verificare se una variabile è nulla?
- 29. Qual è il modo più efficace per determinare se un grafico diretto è collegato singolarmente?
- 30. Qual è il modo più veloce per selezionare una grande quantità di checkbox e de/selezionarli?
Molto bello. Molte grazie! :) – Straightfw