2. Why J
J is particularly strong in the mathematical,
statistical, and logical analysis of data.
Компании, использующие язык J:
Intel, Hewlett Packard, Microsoft, Novel...
http://www.jsoftware.com/
4. псевдокод из Кормана
s - та самая вершина, от которой считаем
расстояния
for each i in V(G)
d[i] = infinity
d[s] = 0
for i <- 1 .. количество вершин - 1
for всех ребер (u,v)
d[v] = min(d[v], d[u] + w(u,v))
страницы: 669, 670, 673
7. вилки и крючки
] (<./ @: +)^:_ {
x (f g h) y -> (x f y) g (x h y)
x (f g) y -> (x f (g y))
v ( ] (<./ @: +)^:_ { ) m ->
(v ] m) (<./ @: +) (v { m)
2(-%+)1
0.333333
(a b -> (a-b)/(a+b)) 2 1
8. (v ] m) -> m
> flip const 1 2
=> 2
(v { m) - это список расстояний от заданной
вершины до всех остальным (строка номер v
в матрице смежности)
> flip (!!) 3 [1,2,3,4,5]
=> 4
9. fix point
(<./ @: +)^:_
f^:_ -> неподвижная точка f
v1 =: m f v0
v2 =: m f v1
v3 =: m f v2
...
и так бесконечное количество раз
10. композиция функций
x (f @: g) y -> f (x g y)
m (<./ @ +) b -> <./ (m + b)
15. собираем все вместе
m (<./ @: +)^:_ v (v - начальные расстояния)
пока расстояния меняются
для каждой вершины v
d[v] = минимум списка
map (d[u] + w(u,v)) (u <- список вершин)
16. итого
+ код на порядок лаконичнее
+ код ближе к предметной области
+ во многих случаях быстрее чем решения
на других языках (из презентации это не
следует)
- несколько непривычно
17. ссылки
http://dr-klm.livejournal.com/42312.html - хорошее введение
http://dr-klm.livejournal.com/130679.html?thread=1544055#t1544055 - ответ
на вопрос, зачем изучать J и где его использовать
http://dr-klm.livejournal.com/81190.html и http://www.fti.dn.
ua/~metlov/dictionary/contents.htm - официальный справочник
http://antilamer.livejournal.com/350367.html - пост с этим алгоритмом
http://www.jsoftware.com/ - официальный сайт