- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
%%% O(n log n)
nub([]) -> [];
nub([H|T]) ->
case lists:member(H, T) of
true ->
nub(T);
false ->
[H|nub(T)]
end.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
%%% O(n log n)
nub([]) -> [];
nub([H|T]) ->
case lists:member(H, T) of
true ->
nub(T);
false ->
[H|nub(T)]
end.
кто-то услышал про логлинейный nub, и решил, что у него тоже получится
bormand 06.10.2015 18:47 # +2
CHayT 06.10.2015 22:39 # 0
roman-kashitsyn 06.10.2015 19:49 # +4
CHayT 06.10.2015 22:43 # 0
но внутри там никакой магии, обычный линейный алгоритм
roman-kashitsyn 06.10.2015 23:59 # 0
roman-kashitsyn 06.10.2015 19:56 # 0
А есть пример реализации?
Какие ограничения на элементы списка? Они должны быть Ord или достаточно Eq?
CHayT 06.10.2015 22:39 # 0
реализация: map head . group . sort
roman-kashitsyn 06.10.2015 23:55 # 0
Я просто думал, что есть какой-нибудь более изящний divide-and-conquer алгоритм, который ещё и относительный порядок сохраняет.
CHayT 06.10.2015 23:59 # 0
roman-kashitsyn 07.10.2015 00:08 # 0
wvxvw 07.10.2015 18:11 # +1
Практически наверняка в Эрланге найдется куча.
roman-kashitsyn 07.10.2015 19:00 # 0
wvxvw 07.10.2015 19:21 # 0
но тут же суть нужно было передать.
CHayT 24.11.2015 00:11 # 0
этот говнокод меня натолкнул на мысль, что было бы круто специализировать имплементацию в зависимости от констрейнтов типов (к примеру, если есть Ord ебашим логлинейный nub, если только Eq -- квадратичный)
на крестовых концептах и хаскельных closed type families прям руки чешутся оптимизированную библиотеку алгоритмов запилить, которая бы сама за меня все алгебраические свойства операций учитывала
guest 22.01.2016 02:35 # +1
guest 22.01.2016 02:37 # 0