Автор Тема: Как часто и каким образом используете алг  (Прочитано 16921 раз)

DIzer

  • Гость
Re: Как часто и каким образом используете алг
« Ответ #15 : Февраль 22, 2012, 09:35:00 pm »
На мой взгляд , эта (велосипедная) тема высосана из пальца- в 99 процентах речь идет об оценке чей -то деятельности (и чаще всего со стороны). Я  к чему это говорю - я не знаю лично ни одного человека (из тех , чья деятельность оценивалась подобным образом) который СОЗНАТЕЛЬНО занимался бы "изобретением велосипедов" (ВСЕ они имели ДРУГИЕ цели).

alexus

  • Гость
Re: Как часто и каким образом используете алг
« Ответ #16 : Февраль 23, 2012, 06:09:41 am »
... я не знаю лично ни одного человека (из тех , чья деятельность оценивалась подобным образом) который СОЗНАТЕЛЬНО занимался бы "изобретением велосипедов" (ВСЕ они имели ДРУГИЕ цели).
Теперь можете уверено говорить, что... знаете такого человека, хоть и заочно... (я имею ввиду себя... люблю это занятие... "изобретение велосипедов"). :)

DIzer

  • Гость
Re: Как часто и каким образом используете алг
« Ответ #17 : Февраль 23, 2012, 07:51:11 am »

Теперь можете уверено говорить, что... знаете такого человека, хоть и заочно... (я имею ввиду себя... люблю это занятие... "изобретение велосипедов"). :)
Не думаю  ;), впрочем, раз так - то так.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Как часто и каким образом используете алг
« Ответ #18 : Февраль 23, 2012, 05:43:45 pm »
Осталось не понятным пишешь ли ты сам новые шаблонные алгоритмы или же всегда всё только из готовых-стандартных шаблонных кубиков собираешь?

Стандартное. Нестандартное редко оформляется как шаблон - потому что оно специализированное и используется в конкретном месте.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Как часто и каким образом используете алг
« Ответ #19 : Февраль 23, 2012, 05:50:00 pm »
Ну вот я как раз сейчас занимаюсь оптимизацией (по скорости)
Кстати, ни из одного стандартного контейнера нельзя удалить произвольный элемент за О(1) просто потому, что сначала его нужно в нём найти.

Обычно на руках есть итератор, если речь о стандартной библиотеке С++. Кроме того, в boost есть всякие интрузивные списки - там не нужен итератор.

Контейнеры из которых удаление элементов невозможно в принципе могут быть реализованы эффективнее контейноров из которых удаление элементов в принципе возможно. Ну и так далее. Так что, в моём понимании, оптимизация, если конечно это не просто чистка от говнокода, подразумевает неизбежный отказ от универсальных стандартных шаблонных кубиков.

Не обязательно сразу говнокод. Код может быть как раз нормальный и читабельный. Но не самый эффективный. Самый распространенный пример для С++ - это контейнер копируемых структур против контейнера указателей. С указателями возни/ошибок больше, но работать оно может быстрее в определенных случаях.

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Как часто и каким образом используете алг
« Ответ #20 : Февраль 23, 2012, 10:03:42 pm »
Не понял - пусть мы имеем массив ссылок на  существующие простые обьекты(например, записи -куда уж стандартней) - разве нельзя из него удалить элемент за  О(1)?
Нельзя. Сначала надо найти индекс элемента в этом массиве.
Обычно на руках есть итератор, если речь о стандартной библиотеке С++.
Обычно указатель на объект лежит сразу в нескольких совершенно разных контейнерах и перед удалением объекта надо удалить указатели на него из всех них.
Кроме того, в boost есть всякие интрузивные списки - там не нужен итератор.
Хм... Интересно. Надо будет посмотреть. А случай с несколькими контейнерами как-то разруливается множественным наследованием?
Стандартное. Нестандартное редко оформляется как шаблон - потому что оно специализированное и используется в конкретном месте.
Считаю это ключевым моментом. Если программисты сами свои шаблонные алгоритмы не пишут, а используют лишь стандартные, то шаблоны в языке получается что и не так уж и нужны, ведь стандартные шаблоны могут быть реализованы на уровне компилятора, ведь на то они и стандартные. Например, почти во всех языках на уровне компилятора поддерживается такой шаблонный контейнер как массив.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Как часто и каким образом используете алг
« Ответ #21 : Февраль 23, 2012, 10:27:12 pm »
Обычно на руках есть итератор, если речь о стандартной библиотеке С++.
Обычно указатель на объект лежит сразу в нескольких совершенно разных контейнерах и перед удалением объекта надо удалить указатели на него из всех них.

Это у вас в шарпах такое обычно :) А у нас, как я уже говорил - в контейнерах лежат не указатели, а полноценные объекты. Ну если нужен полиморфизм - то смартпоинтеры :) Держать одно и тоже в разных контейнерах, а потом синхронизировать - похоже на какую-то вашу специфику. Хотя иногда такое нужно. В случаях, когда явная синхронизация по удалению не очень удобна я обычно пользуюсь таким подходом: кладу в контейнер слабую ссылку, которая автоматически протухает при удалении объекта. В какой-то удобный момент дохлые ссылки вычищаются из контейнера.

Хм... Интересно. Надо будет посмотреть. А случай с несколькими контейнерами как-то разруливается множественным наследованием?

Случай с несколькими контейнерами никак не разруливается. Разруливается эффективный доступ без итераторов и меньше фрагментируется память.

Считаю это ключевым моментом. Если программисты сами свои шаблонные алгоритмы не пишут, а используют лишь стандартные, то шаблоны в языке получается что и не так уж и нужны, ведь стандартные шаблоны могут быть реализованы на уровне компилятора, ведь на то они и стандартные. Например, почти во всех языках на уровне компилятора поддерживается такой шаблонный контейнер как массив.

Я не говорил, что совсем не пишу свои алгоритмы ;) Просто они пишутся один раз и надолго. Тот же find/for_each/map у нас используются не стандартные. Это легковесная обертка над стандартными алгоритмами, которая умеет работать с диапазонами итераторов.

DIzer

  • Гость
Re: Как часто и каким образом используете алг
« Ответ #22 : Февраль 24, 2012, 04:13:35 am »
Не понял - пусть мы имеем массив ссылок на  существующие простые обьекты(например, записи -куда уж стандартней) - разве нельзя из него удалить элемент за  О(1)?
Нельзя. Сначала надо найти индекс элемента в этом массиве.
Понял, мы говорим про разные вещи - лично я  стою на позиции -  если мы говорим об ОПРЕДЕЛЕННОМ элементе массива - то он вполне задается названием массива и индексом - у вас точка зрения нестандартная (вы говорите про НЕОПРЕДЕЛЕННЫЙ элемент содержащийся в массиве и задаваемый некоторым уникальным набором значений атрибутов).

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Как часто и каким образом используете алг
« Ответ #23 : Февраль 24, 2012, 12:01:50 pm »
Это у вас в шарпах такое обычно :)
А при чём тут C#? Мы пишем телефонную станцию. Указатель на объект-звонок лежит в большой хэштаблице всех звонков, в большом списке всех звонков, в списке звонков терминала с которого он пришёл или в списке звонков терминала на который он ушёл, в списке звонков медиаконференции, а так же в списке звонков с определённого так называемого ендпоинта. Указатель на объект-телефон лежит в большом списке всех телефонов, в хэштаблице по registrationId, в хэштаблице по uri, в хэштаблице по registration cookie, в хэштаблице по ip-адресу и порту, в хэштаблице по просто ip-адресу. Чтобы удалить звонок (телефон) за О(1) в самом объекте звонка (телефона) есть указатели на другие звонки (телефоны) навроде prev, next. Получается такая большая но простая структура данных, добавление и удаление звонка (телефона) в которую осуществляется за O(1).

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Как часто и каким образом используете алг
« Ответ #24 : Февраль 24, 2012, 02:44:55 pm »
Это у вас в шарпах такое обычно :)
А при чём тут C#? Мы пишем телефонную станцию. Указатель на объект-звонок лежит в большой хэштаблице всех звонков, в большом списке всех звонков, в списке звонков терминала с которого он пришёл или в списке звонков терминала на который он ушёл, в списке звонков медиаконференции, а так же в списке звонков с определённого так называемого ендпоинта. Указатель на объект-телефон лежит в большом списке всех телефонов, в хэштаблице по registrationId, в хэштаблице по uri, в хэштаблице по registration cookie, в хэштаблице по ip-адресу и порту, в хэштаблице по просто ip-адресу. Чтобы удалить звонок (телефон) за О(1) в самом объекте звонка (телефона) есть указатели на другие звонки (телефоны) навроде prev, next. Получается такая большая но простая структура данных, добавление и удаление звонка (телефона) в которую осуществляется за O(1).

Очень похоже вот на это: http://www.boost.org/doc/libs/1_48_0/libs/multi_index/doc/tutorial/index.html

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Как часто и каким образом используете алг
« Ответ #25 : Февраль 24, 2012, 02:54:01 pm »
Борланд был приличной командой, пока там был Филип Канн (Philip Kahn)... Он был не только основателем, но и душой фирмы.

Хм... Дай угадаю когда он ушел... Сразу после релиза 1-го дебилдера? :) У меня подыхание борланда ассоциируется с тем временем. Борланд слил свой С++ и покатился :)

DIzer

  • Гость
Re: Как часто и каким образом используете алг
« Ответ #26 : Февраль 24, 2012, 03:05:24 pm »
Борланд был приличной командой, пока там был Филип Канн (Philip Kahn)... Он был не только основателем, но и душой фирмы.

Хм... Дай угадаю когда он ушел... Сразу после релиза 1-го дебилдера? :) У меня подыхание борланда ассоциируется с тем временем. Борланд слил свой С++ и покатился :)
А вот и нет - на  2 года раньше... :) :) :) (нафиг гадать - проще посмотреть).

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Как часто и каким образом используете алг
« Ответ #27 : Февраль 24, 2012, 03:13:10 pm »
Хм... Дай угадаю когда он ушел... Сразу после релиза 1-го дебилдера? :) У меня подыхание борланда ассоциируется с тем временем. Борланд слил свой С++ и покатился :)
А вот и нет - на  2 года раньше... :) :) :) (нафиг гадать - проще посмотреть).

А я хотел угадать ;) Ну что ж, значит его имя не запятнано даже 1-м дебилдером :)

DIzer

  • Гость
Re: Как часто и каким образом используете алг
« Ответ #28 : Февраль 24, 2012, 03:17:34 pm »
Хм... Дай угадаю когда он ушел... Сразу после релиза 1-го дебилдера? :) У меня подыхание борланда ассоциируется с тем временем. Борланд слил свой С++ и покатился :)
А вот и нет - на  2 года раньше... :) :) :) (нафиг гадать - проще посмотреть).

А я хотел угадать ;) Ну что ж, значит его имя не запятнано даже 1-м дебилдером :)
  :) Неплохо , хотя я бы ответил так.... "Ох ошибся , он ушел когда руководство ТОЛЬКО РЕШИЛО создавать билдер"  :)

alexus

  • Гость
Re: Как часто и каким образом используете алг
« Ответ #29 : Февраль 26, 2012, 01:40:04 pm »
Хм... Дай угадаю когда он ушел... Сразу после релиза 1-го дебилдера? :) У меня подыхание борланда ассоциируется с тем временем. Борланд слил свой С++ и покатился :)
А вот и нет - на  2 года раньше... :) :) :) (нафиг гадать - проще посмотреть).

А я хотел угадать ;) Ну что ж, значит его имя не запятнано даже 1-м дебилдером :)
  :) Неплохо , хотя я бы ответил так.... "Ох ошибся , он ушел когда руководство ТОЛЬКО РЕШИЛО создавать билдер"  :)
А какая разница... до или после?.. C++ был вторичным продуктом Borland, вышедшем после успеха TurboPascal (хороший компилятор, первая IDE, позже в BorlandPascal расширитель DOS). Я не отношусь к поклонникам C++ и на C++ Builder не писал... но во времена Delphi Филип Канн уже не работал в Borland.