Cześć, na co zwrócilibyście uwagę, by pisane programy działały szybciej?
Napiszę ogólnie. Zwróciłbym uwagę na algorytm. Czasem sprawdzanie wszystkich warunków nie ma sensu, możne zrobić pre-selekcję. Przykładowo ostatnio pisałem dwa takie programy, które szukały blisko siebie położonych punktów na płaszczyźnie XY. Nie ma sensu sprawdzać odległości dla każdej z par punktów, bo zabiera to sporo czasu, zwłaszcza jeśli próbka posiada 50 000 punktów. Wystarczy zwrócić uwagę, że jeśli różnica w X (lub w Y) będzie większa niż pewna założona wartość, to od razu wiadomo, że punkty te są odległe. Czyli mamy tutaj taką korzyść, że liczymy tylko różnicę dwóch liczb (x1 - x2) i używamy operatora porównania, zamiast liczyć różnice dwóch współrzędnych, podnosić je do kwadratu, sumować, a potem pierwiastkować. Zastosowałem w swoim programie i mam wyraźne przyspieszenie programu.
Innym przykładem jest optymalizacja podczas sprawdzania warunków. Wracając do przykładu wyżej, jeśli obszar XY będzie prostokątem o znacznych dysproporcjach pomiędzy długościami boków, to sprawdzanie różnic we współrzędnych XY najlepiej rozpocząć od współrzędnych w których bok ma większą długość:
if (|x1 - x2| < d && |y1 - y2| < d) { ... }
------------------------
y | |
------------------------
x
W ten sposób pierwszy warunek będzie zachodził rzadziej, ponieważ rozrzut współrzędnej X jest większy niż Y. A jak wiemy, jeśli pierwszy warunek koniunkcji nie jest spełniony, to jej wartość jest 0 i komputer nie liczy drugiego warunku.
Kolejną optymalizacją może być obliczenie kolejnych wartości funkcji okresowych w sposób iteracyjny. Inny przykład, zamiast liczyć wiele wartości sinusa w wąskiej przeciwdziedzinie za każdym razem, można policzyć wartości na brzegach i interpolować je prostą. W przypadku badania zmian wielomianu wysokiego rzędu można operować na jego pochodnej, a więc zmniejszyć rząd o jeden.