[Homework] Algorithms - Sorting and Searching - Problem 2
Здравейте,
стигнах до задача 2 от домашното: Implement Interpolation Search
Използвайки псевдо кодове които намерих из нета a и този който е в слайдовете, успявам да го докарам до работещ вариант, когато колекцията е от числа.
Но как да стане когато елемента който търсим е от тип Т и няма как да намеря Mid позицията по формулата:
int mid = low + ((needle - list[low]) * (high - low)) / (list[high] - list[low]);
тъй като няма как от нещо което незнам какво е да извадя число
Интересно е решението с делегатите. Единствено на 111-ти и 115-ти ред според мен изразите в условията трябва да са с различни знаци, за да работи правилно.
И аз мислех за GetHashCode(), но не съм го пробвал, защото ако o1.CompareTo(o2) > 0 то o1.GetHashCode() > o2.GetHashCode() изобщо не е задължително. Дори по някакъв GetHashCode() имплементацията да се обвърже с CompareTo() пак няма да стане в общия случай.
Да, трябва да обърна знака на 115ти ред. Благодаря!
Относно тестовете: аз правя нещо от сорта Assert.AreEqual(element, collection[result]). Така независимо дали има повтарящи се елементи пак може да се тества за правилна работа. Иначе е вярно, че ако имаме {.....3, 4, 4, 4.....} и търсим 4 няма как да знаем на кой индекс ще ударим.