Natknąłem się na zadanie, które sprawia, że sprawdzasz, czy String przekazany jako argument do twojej metody/funkcji jest poprawnym stwierdzeniem w sensie odwróconej polskiej notacji. Może zawierać małe litery alfabetu, znaki operacyjne i liczby całkowite. Czy jest jakiś szybszy sposób na sprawdzenie, niż czytanie każdej postaci osobno i próba oceny całego wyrażenia?Jaki jest najszybszy sposób sprawdzenia, czy wejściowy ciąg znaków jest prawidłowym wyrażeniem RPN?
Jaki jest najszybszy sposób sprawdzenia, czy wejściowy ciąg znaków jest prawidłowym wyrażeniem RPN?
Odpowiedz
Nie musisz oceniać całego wyrażenia, ale musisz podzielić je na tokeny i musisz znać wartość każdego operatora (czyli ile operandów to wymaga). Dla uproszczenia niech wartość operandu będzie równa 0; następnie wykonaj następujące czynności:
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
Przykłady przy użyciu _
dla jednolity minus.
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)
Możesz użyć tabeli analizowania do rozpoznawania odwróconej notacji. Wymaga spojrzenia na każdą postać, ale jest szybki.
Rozumiem. Dzięki :) – Straightfw
Wikipedia ma dobry algorytm do analizowania wyrażenia. O ile wyrażenie nie jest nieprawidłowe (w takim przypadku możesz wypowiedzieć się wcześniej), nie ma możliwości, byś mógł zrobić to lepiej niż O (n). Oznacza to, że musisz przetestować wszystkie tokeny w ciągu znaków, aby upewnić się, że są poprawne.
- 1. W języku ActionScript: Czy istnieje sposób sprawdzenia, czy argument wejściowy jest prawidłowym wektorem dowolnego typu?
- 2. Jaki jest najszybszy sposób sprawdzenia duplikatów cyfr numeru?
- 3. Jaki jest najłatwiejszy/najszybszy sposób sprawdzenia, kiedy utworzono gałąź git?
- 4. C# w VS2005: jaki jest najlepszy sposób sprawdzenia, czy ciąg znaków jest pusty?
- 5. Jaki jest najszybszy sposób na sprawdzenie, czy obiekt jest IEnumerable?
- 6. Ruby: Jak sprawdzić, czy ciąg znaków jest prawidłowym czasem?
- 7. Jaki jest najlepszy i najszybszy sposób sprawdzenia, czy obraz jest poprawny w PHP?
- 8. jaki jest najlepszy sposób sprawdzenia, czy ciąg znaków istnieje w innym?
- 9. Java - Najszybszy sposób sprawdzenia, czy URL istnieje
- 10. Jaki jest właściwy sposób sprawdzenia, czy Iterator jest kompletny?
- 11. Czy "_ [....]" jest prawidłowym identyfikatorem?
- 12. Jaki jest lepszy sposób sprawdzenia, czy ciąg jest liczbą całkowitą na iPhone?
- 13. Jaki jest najszybszy sposób sprawdzenia, czy wszystkie wartości w tablicy są numeryczne?
- 14. Jaki jest najszybszy sposób sprawdzenia, czy punkt znajduje się wewnątrz wielokąta w pytonie?
- 15. Jaki jest najskuteczniejszy sposób sprawdzenia, czy ciąg zaczyna się od określonej litery w TCL?
- 16. Jaki jest poprawny i idiomatyczny sposób sprawdzenia, czy ciąg zaczyna się od określonej postaci w Rust?
- 17. Jaki jest najlepszy sposób sprawdzenia, czy istnieje atrybut?
- 18. Jaki jest najlepszy sposób sprawdzenia, czy URL istnieje w PHP?
- 19. Jaki jest najlepszy sposób sprawdzenia zestawu wyników IQueryable jest pusty?
- 20. Sprawdź, czy ciąg znaków jest równy jednemu z łańcuchów znaków (z wyrażeniem regularnym).
- 21. Python: Jak sprawdzić, czy ciąg jest prawidłowym IRI?
- 22. Funkcja sprawdzania, czy ciąg znaków jest datą
- 23. Ruby, sprawdź, czy ciąg znaków jest prawidłowy?
- 24. Najszybszy sposób sprawdzenia istnienia pliku w NodeJs
- 25. Jaki jest najlepszy sposób sprawdzenia, czy ciąg zawiera adres URL w języku Java/Android?
- 26. Jaki jest najłatwiejszy sposób sprawdzenia, czy ciąg zawiera dowolny tag obrazu?
- 27. Sprawdź, czy ciąg znaków jest CAŁKOWITĄ liczbą liter w PHP
- 28. Prosty sposób sprawdzenia, czy ciąg zawiera inny ciąg w C?
- 29. jest delegatem najszybszy sposób wiązania?
- 30. Jaki jest najlepszy sposób sprawdzenia, czy obiekt jest tablicą, czy nie w JavaScript?
Bardzo ładne. Wielkie dzięki! :) – Straightfw