- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
-- GUESS THE NAME OF "algorithmX":
import qualified Data.List as DL
infinity = 1/0
adjacencyMatrix =
[[0,3,1,6,0,0],
[3,0,5,0,3,0],
[1,5,0,5,6,4],
[6,0,5,0,0,2],
[0,3,6,0,0,6],
[0,0,4,2,6,0]] :: [[Double]]
replaceZerosWithInfinity matrix =
map (map (\e -> if e == 0 then infinity else e)) matrix
type Edge = (Int,Int,Double)
algorithmX adjacencyMatrix initialVertex = (minimumTotalCost,minimumEdges)
where
third (_,_,t) = t
minimumTotalCost = sum $ map third minimumEdges
(_,minimumEdges) = foldl iterate ([initialVertex],[]) [1..n-1]
matrix = replaceZerosWithInfinity adjacencyMatrix
n = length matrix
getIndexes visited =
filter (\(i,j) -> not $ elem j visited) [(i,j) | i <- visited, j <- [0..n-1]]
iterate :: ([Int],[Edge]) -> Int -> ([Int],[Edge])
iterate (visited,edges) iteration = (newVisited:visited,minimumEdge:edges)
where
(_,newVisited,_) = minimumEdge
minimumEdge = DL.minimumBy compareEdges $ map newEdge (getIndexes visited)
newEdge (i,j) = (i,j,matrix !! i !! j)
compareEdges e0 e1 = compare (third e0) (third e1)
kegdan 12.10.2016 15:25 # 0
удивило, что в прилюде из коробки нет replace
kegdan 12.10.2016 15:31 # +1
kegdan 12.10.2016 15:53 # 0
roman-kashitsyn 12.10.2016 15:58 # 0
kegdan 12.10.2016 16:19 # 0
Вникать лень
roman-kashitsyn 12.10.2016 16:22 # 0
Я предложил юзать kruskal's mst
kegdan 12.10.2016 16:32 # 0
А таки можно не предлагать таких больших функций?
kegdan 12.10.2016 16:35 # 0
roman-kashitsyn 12.10.2016 16:40 # 0
Написано на скучном митинге, наверняка можно многое улучшить. Запилил свой UF и incidence list:
> А таки можно не предлагать таких больших функций?
Сделай короче (не в ущерб понятности), жду пулл-реквест.
kegdan 12.10.2016 16:56 # −1
Эх, как же хорошо окунуться в хаскель после ебаного ксамарина...
3_14dar 12.10.2016 18:19 # −11
bormand 12.10.2016 18:22 # 0
З.Ы. Ну Qt разве что.
3_14dar 12.10.2016 18:24 # −11
bormand 12.10.2016 18:26 # +2
barop 12.10.2016 18:26 # −11
kegdan 13.10.2016 13:53 # −1
"java.exe" exited with code 2
Так же потрясающие штуки - "я не буду деплоиться, иди нахуй" или черного экрана вообще без какой либо инфы об ошибках
bormand 13.10.2016 13:59 # +1
Ты только что описал половину пофиксанных мной багов ;)
kegdan 13.10.2016 14:08 # +1
dxd 13.10.2016 16:31 # +5
Soul_re@ver 13.10.2016 16:39 # +1
CrashTesterAnusov 13.10.2016 17:05 # −66
bormand 14.10.2016 12:31 # 0
passiv 15.10.2016 17:26 # −71
3_14dar 13.10.2016 21:46 # −11
guestinho 13.10.2016 22:26 # −11
3_14dar 13.10.2016 23:04 # −11
https://habrahabr.ru/post/188130/
---
Для Android интереснее. При компиляции приложения происходит перевод кода на C# в промежуточный байт-код, понятный виртуальной машине Mono и сама эта виртуальная машина также добавляется в упакованное приложение. И Mono и Dalvik написаны на Си и работают поверх ядра Linux (а мы помним, что Android основана на Linux).
---
Но причем тут тогда жава?
guestinho 13.10.2016 23:14 # −11
guestinho 13.10.2016 23:16 # −11
defecate-plusplus 14.10.2016 08:30 # −1
кордова, нейтивскрипт
но мы тоже выбрали замарин
kegdan 12.10.2016 18:30 # 0
a=:(/:{:@>)graph
kruskal =: a#~>&0@+/"1@((3 2)&$)@(<#)@((i.&#@]i.~]#~#>])@]i.i.@#)@,(}:@>)a
но там где то что то по дороге наебнулось и кароч не работает
хер отдебажишь
kegdan 12.10.2016 18:39 # +2
a=:(/:{:@>)graph
kruskal=:a#~>&0@+/"1@($~(,&2)@-:@#)@(<#)@((i.&#@]i.~]#~#>])@]i.i.@#)@,(}:@>)a
таки отладил. Юледь, в 100раз проще, чем бороться с багами ксамарина
roman-kashitsyn 19.10.2016 20:24 # +1
barop 19.10.2016 21:51 # −15
Сканер памяти обнаружил вредоносную программу! Очень опасно работать на компьютере, в памяти которого активен вирус. Рекомендуется назначить загрузочное сканирование.
barop 20.10.2016 02:49 # −15
Поэтому намёки Грэма Хэнкока о том, что он передаёт нам наследие наших предков, – это издёвка. Почему Грэм Хэнкок не возмущается, что Сионо-Нацисты Украины сейчас утюжат Градами мегалитические пирамиды в Луганске?
roman-kashitsyn 13.10.2016 13:08 # 0
Вообще говоря, в этой функции как раз самое смешное. Причём даже не в реализации (твоя с liftM2 мне нравится ещё меньше, кстати), а в идее. Из-за того, что код перебирает O(n^2) ребёр на каждой из n-1 итераций, алгоритм становится O(n^3), хотя мог бы быть O(e * log n).
Ну и самый цимус: если подать на вход несвязный граф, алгоритм зарепортит бесконечную стоимость и перечислит рёбра бесконечного веса.
kegdan 13.10.2016 13:55 # 0
А чем тебе лифт лифтов неугодил?
CHayT 13.10.2016 14:55 # +3
Indices!
inkanus-gray 13.10.2016 15:34 # +2
https://en.wiktionary.org/wiki/moduli
https://en.wiktionary.org/wiki/formulae
kegdan 12.10.2016 16:07 # +3
ну это уже блядство
(compare `on` third) e0 e1