Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(232)

Issue 6002059: 2 - Shtokhov Alexander - shtokhov@gmail.com 2013 - 4

Can't Edit
Can't Publish+Mail
Start Review
Created:
14 years, 1 month ago by shtokhov
Modified:
9 years, 10 months ago
Reviewers:
ys.algorithms
CC:
ys.algorithms+andrey_gmail.com
Visibility:
Public.

Patch Set 1 #

Total comments: 14

Patch Set 2 : Fix first group remarks #

Total comments: 6

Patch Set 3 : Fix second group remarks #

Total comments: 13

Patch Set 4 : Fix third group remarks #

Patch Set 5 : Fix all third group remarks #

Total comments: 1

Patch Set 6 : Fix fourth group remarks #

Total comments: 32

Patch Set 7 : Fix fifths group remarks #

Patch Set 8 : Fix fifths group remarks add #

Total comments: 2

Patch Set 9 : Fix sixth group remarks #

Total comments: 1
Unified diffs Side-by-side diffs Delta from patch set Stats (+2598 lines, -0 lines) Patch
A hgrc.hg View 1 chunk +2 lines, -0 lines 0 comments Download
A main.cpp View 1 2 3 4 5 6 7 8 1 chunk +266 lines, -0 lines 1 comment Download
A upload.py View 1 chunk +2330 lines, -0 lines 0 comments Download

Messages

Total messages: 13
shtokhov
14 years, 1 month ago (2012-04-15 20:45:45 UTC) #1
ys.algorithms
Надо вынести весь фукционал по решению конкретной задачи из класса графа. -- Петя. https://codereview.appspot.com/6002059/diff/1/main.cpp File ...
14 years, 1 month ago (2012-04-16 16:36:07 UTC) #2
shtokhov
https://codereview.appspot.com/6002059/diff/1/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/1/main.cpp#newcode21 main.cpp:21: m_vertices[endVertexIndex].m_reverseEdges.push_back(Edge(startVertexIndex, weight)); On 2012/04/16 16:36:07, ys.algorithms wrote: > Нет ...
14 years, 1 month ago (2012-04-27 18:56:15 UTC) #3
ys.algorithms
-- Петя. https://codereview.appspot.com/6002059/diff/5001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/5001/main.cpp#newcode49 main.cpp:49: m_adjacentEdgesList(0) { Это и так делает конструктор ...
14 years, 1 month ago (2012-04-29 17:41:50 UTC) #4
shtokhov
https://codereview.appspot.com/6002059/diff/5001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/5001/main.cpp#newcode49 main.cpp:49: m_adjacentEdgesList(0) { On 2012/04/29 17:41:50, ys.algorithms wrote: > Это ...
14 years, 1 month ago (2012-05-02 00:21:52 UTC) #5
ys.algorithms
-- Петя. https://codereview.appspot.com/6002059/diff/9001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/9001/main.cpp#newcode172 main.cpp:172: Graph CutOutSubraph( Разве не влезет на одну ...
14 years, 1 month ago (2012-05-06 11:47:03 UTC) #6
shtokhov
https://codereview.appspot.com/6002059/diff/9001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/9001/main.cpp#newcode172 main.cpp:172: Graph CutOutSubraph( On 2012/05/06 11:47:03, ys.algorithms wrote: > Разве ...
14 years, 1 month ago (2012-05-07 08:51:07 UTC) #7
ys.algorithms
Хорошо. +Андрей. -- Петя. https://codereview.appspot.com/6002059/diff/9001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/9001/main.cpp#newcode176 main.cpp:176: for (int vertexIndex = 0; ...
14 years, 1 month ago (2012-05-09 19:02:59 UTC) #8
ys.algorithms
Надо исправить. Андрей. https://codereview.appspot.com/6002059/diff/21001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/21001/main.cpp#newcode10 main.cpp:10: const int NOT_VISIT_VERTEX_OPEN_TIME = -1; not ...
14 years ago (2012-05-19 16:39:53 UTC) #9
shtokhov
https://codereview.appspot.com/6002059/diff/21001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/21001/main.cpp#newcode10 main.cpp:10: const int NOT_VISIT_VERTEX_OPEN_TIME = -1; On 2012/05/19 16:39:53, ys.algorithms ...
14 years ago (2012-05-23 20:22:40 UTC) #10
ys.algorithms
Надо исправить. Андрей. https://codereview.appspot.com/6002059/diff/21001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/21001/main.cpp#newcode64 main.cpp:64: m_adjacentEdgesList[headVertex].push_back(Edge(headVertex, tailVertex, edgeWeight)); Надо исправить названия ...
14 years ago (2012-05-23 21:59:40 UTC) #11
shtokhov
https://codereview.appspot.com/6002059/diff/21001/main.cpp File main.cpp (right): https://codereview.appspot.com/6002059/diff/21001/main.cpp#newcode64 main.cpp:64: m_adjacentEdgesList[headVertex].push_back(Edge(headVertex, tailVertex, edgeWeight)); On 2012/05/23 21:59:41, ys.algorithms wrote: > ...
14 years ago (2012-05-25 22:05:55 UTC) #12
ys.algorithms
14 years ago (2012-05-27 16:43:07 UTC) #13
Засчитываем.

Андрей.

https://codereview.appspot.com/6002059/diff/21001/main.cpp
File main.cpp (right):

https://codereview.appspot.com/6002059/diff/21001/main.cpp#newcode164
main.cpp:164: Graph CutOutSubgraph(const Graph& graph, const std::vector<int>&
vertices) {
Объект может копироваться, но на практике этого не происходит, потому что все
компиляторы умеют делать return value optimization. Поэтому если функция
возвращает одно значение, можно смело писать return result; и не думать о
скорости работы - о нас позаботились.
По указателю надо передавать объекты, если или они уже инициализированы и мы их
изменяем, или если требуется из функции вернуть несколько объектов.

On 2012/05/25 22:05:55, shtokhov wrote:
> On 2012/05/23 21:59:41, ys.algorithms wrote:
> > Я не писал, что есть ошибка.
> > Я задал вопрос, почему здесь результат - граф - возвращается по значению из
> > функции (это когда пишут return graph), а выше в функции обращения графа та
же
> > задача решается путём приёма указателя на ответ?
> > Следует соблюдать единство, причём стиль этой функции предпочтителен.
> > 
> > 
> > On 2012/05/23 20:22:41, shtokhov wrote:
> > > On 2012/05/19 16:39:53, ys.algorithms wrote:
> > > > Почему здесь подграф возвращается по значению (а это удобно), а функция
> > > > обращения графа принимает указатель?
> > > Не очень понимаю в чем проблема - на вход метод получает граф и набор
> вершин.
> > > Строит новый граф - подграф на этом наборе вершин. В чем ошибка?
> > 
> Я раньше все возвращал по ссылке, чтобы не выполнять лишнего копирования
> объектов. Возвращаемые по значению, при возврате в вызывающий метод копируются
в
> стеке, правильно я понимаю? это же не эффективно, почему "причём стиль этой
> функции предпочтителен" ? Вроде как и советовал Миша (я могу ошибаться)
> передавать объекты ко указателю, если объект будет меняться, и по константной
> ссылке, если объект остается неизменным в методе. В других языках оперируют
> ссылками, и такой проблемы вообще не стоит. Конечно же, удобнее писать, что
> метод возвращает какой то объект(по сути возвращается ссылка на объект из
кучи),
> поэтому случайно возникло "отсутствие единообразия":)

https://codereview.appspot.com/6002059/diff/21001/main.cpp#newcode174
main.cpp:174: std::find(vertices.begin(), vertices.end(), tailVertex) -
vertices.begin();
O(V) - я имел в виду именну ту часть.
Сейчас функция работает, разумеется, за O(E). Иначе, рассуждая аналогично, ты бы
и на DFS получил оценку O(VE). Она верная - бесспорно, но грубая.

On 2012/05/25 22:05:55, shtokhov wrote:
> On 2012/05/23 21:59:41, ys.algorithms wrote:
> > Одно другому не мешает. Я полностью поддерживаю, что функция нахождения
цикла
> > должна работать от любого графа.
> > Я лишь предлагаю оптимизировать именно эту функцию получения подграфа. С
точки
> > зрения интерфейса ничего не изменится, всё внутри.
> > 
> > On 2012/05/23 20:22:41, shtokhov wrote:
> > > On 2012/05/19 16:39:53, ys.algorithms wrote:
> > > > В этой задаче это, конечно, неважно, но вообще так эффективно найти КСС
и
> > > после
> > > > этого так неэффективно вырезать подграф - странно. Алгоритм работает за
> > O(VE).
> > > > Быстрее сделать легко: предпосчитать номер каждой необходимой вершины, а
> > тем,
> > > > которые не входят в подграф, проставить специальный флажок. Это делается
> за
> > > > O(V).
> > > Если посмотреть по истории коммитов, то вначале так и было сделано. Не
> совсем
> > > так, но идея такая же. Метод поиска отрицательного цикла использовал в
> > качестве
> > > таких флажков, собственно, саму компоненту связности. Но Петр предложил
> > сделать
> > > более универсальный метод, который находил отрицательный цикл в графе,
> поэтому
> > > предложил мне реализовать метод строящий подграф на вершинах компоненты.
> > Вернуть
> > > назад? или оставить текущую версию?   
> > 
> Я сделал такую маску с пред подсчитанными номерами вершин для подграфа, но
> работает за O(VE). Раньше работал за O(V^2*E), но не понимаю как сделать за
O(V)
> - такое возможно вообще? мы для каждой вершины, должны добавить все возможные
> ребра. То есть для каждой вершины подграфа мы проходим циклом по всем ребрам и
> добавляем ребро или нет - это уже O(VE).

https://codereview.appspot.com/6002059/diff/25003/main.cpp
File main.cpp (right):

https://codereview.appspot.com/6002059/diff/25003/main.cpp#newcode91
main.cpp:91: void SetStronglyConnectedComponentIndexes(
И код упростился, и эффективнее стало.

https://codereview.appspot.com/6002059/diff/31001/main.cpp
File main.cpp (right):

https://codereview.appspot.com/6002059/diff/31001/main.cpp#newcode149
main.cpp:149: vector<int> subgraphVertexIndices(graph.VerticesCount(), -1);
И этот -1 в именованную константу, аж 3 раза встречается.
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b