LINUX.ORG.RU

Повышение квалификации: посоветуйте литературу

 ,


14

6

Добрый день. Умею говнокодить на C++, хочу развиваться и получать больше денег. Иду смотреть вакансии яндекса и вижу вопрос:

Какие из следующих стандартных контейнеров позволяют найти в них элемент (по его значению) за O(ln(n))?

std::vector

std::list

std::deque

std::set

std::multiset

std::hash_set

сортированный std::vector

сортированный std::list

сортированный std::deque

сортированный std::set

сортированный std::multiset

сортированный std::hash_set

Аргументируйте ответ, прокомментируйте правильность постановки вопроса

И понимаю, насколько я еще ничтожен. Что такое O(ln(n)) я еще понимаю, но какие алгоритмы используются в стандартной библиотеке - могу только догадываться. Хотя, возможно, вопрос на самом деле не сложный и я даже знаю как на него ответить, не углубляясь в детали реализации. Но всё равно хочется поднять свой уровень. В связи с этим посоветуйте литературу, чтобы углубить знания стандартной библиотеки C++ и вообще знания алгоритмов и с этими знаниями смочь устроиться в нормальное место.

Пожалуйста, не предлагайте перейти на другой язык, это слишком долго.

Ну и заодно пусть развернется дискуссия по поводу решения задач от яндекса:

Перемещено mono из talks



Последнее исправление: Hrenomoto (всего исправлений: 1)

Ответ на: комментарий от anonymous

Доступное железо: FPGA.

Machine Learning == метод наименьших квадратов.

Нафига тут что-то кроме Verilog-а, непонятно.

anonymous
()
Ответ на: комментарий от TrueTsarC

Для больших случаев не реализуемо, ибо имеет адский оверхед по памяти

ну, я в курсе. Тут все в курсе, кроме тебя. Реальные реализации, которые имеют нулевой оверхед, естественно не O(1). Есть реализации, которые имеют _почти_ O(1) и небольшой оверхед.

Раз там лог3 - это не двоичное бревно

дебилка, 23-дерево имеет бинарные и тернарные узлы. Это дерево _всегда_ _идеально_ сбалансировано.

①Худший случай, это когда 23-дерево вырождается в идеально сбалансированное бинарное дерево, т.е. все узлы имеют 2 потомка. Высота такого дерева

②Лучший случай, это когда все узлы имеют три потомка.

① хуже ②, например если у тебя 1М узлов, то для ① высота log₂(1M)=20, а для ②, log₃(1M)~12.618595 (т.е. на практике 13, но некоторые узлы таки бинарные).

Собственно в твоём бревне и нет логарифма - в нём есть 2логарифма.

нет, там один логарифм, в котором основание 2≤a≤3. Потому что дерево всегда идеально сбалансировано, а узлы имеют двух или трёх потомков(или это листья).

Плюс больше константа

больше чего?

Давай мы сделем так - ты мне пишешь хештаблицу

давай. Только у меня тут нетбук под рукой, там всего гиг мозгов, потому для таблицы я не больше 100Мб выделю, ОК?

emulek
()
Ответ на: комментарий от TrueTsarC

ты мне либо объясняешь почему ложно

Там у тебя тривиальные логические ошибки, однако я сюда пришёл не тебя учить, а себя. Т.ч, пока тебе объяснение не интересно, нет смысла тратить моё время.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Т.е. ты съехал? А как кукарекал, как кукарекал. Почему-то учить меня 4поста назад ты хотел и писал мне портянки на 2экрана, а сейчас уже не хочешь. Это всё так странно.

Скорее всего, судя по тому как уменьшаются твои ответы и игнорятся вопросы - ты решил вякнуть и подосрать, но не фортануло, после чего слился.

TrueTsarC
()
Ответ на: комментарий от emulek

ну, я в курсе. Тут все в курсе, кроме тебя. Реальные реализации, которые имеют нулевой оверхед, естественно не O(1).

Реальные обобщённые реализации не имеют O(1). И нулевой/не нулевой оверхед тут непричём.

Как же ты сливаешься, как же ты юлишь. Причём тут нулевой оверхед? Решил не сильно обосраться? Дак вот O(1) нет с приемлемым оверхедом для общего случая.

Есть реализации, которые имеют _почти_ O(1) и небольшой оверхед.

Небольшой это <2раз. С таким оверхедом O(1) не запилишь, даже почти.

дебилка, 23-дерево имеет бинарные и тернарные узлы. Это дерево _всегда_ _идеально_ сбалансировано.

У тебя нода может иметь 3ноги - идеальная балансировка для него - это log3.

У тебя же оно вырождается в log2, при возможных 3-х ногах. Это не идеальная балансировка до log2 засчет кастыля - 3-й ноги.

больше чего?

Цена реализации вставки.

давай.

Дак выкатывай.

Только у меня тут нетбук под рукой

Ну я не сомневался.

потому для таблицы я не больше 100Мб выделю

Мне не интересно сколько ты там выделишь под таблицу - ты мне говори кол-во/вес кв.

Выделяй сколько угодно.

TrueTsarC
()
Ответ на: комментарий от anonymous

FPGA, сертифицированные род использование в automotive, стоят до сраки. А так же сертифицированные NEC-и идут за копейки, и намного меньше ватт жрут.

anonymous
()
Ответ на: комментарий от TrueTsarC

Реальные обобщённые реализации не имеют O(1).

у тебя совсем с головой плохо: какие «реальные обобщённые реализации»? Совсем упоролся?

Небольшой это <2раз.

Царь сказал? А мужики-то не знали…

Это не идеальная балансировка до log2 засчет кастыля - 3-й ноги.

ну возьми эквивалентное красно-чёрное, там нет «третей ноги».

Мне не интересно сколько ты там выделишь под таблицу - ты мне говори кол-во/вес кв.

чего тебе сказать?

emulek
()
Ответ на: комментарий от anonymous

Где контейнер?

«реальный обобщённый»? А может тебе и на ноль бесплатно поделить?

emulek
()
Последнее исправление: emulek (всего исправлений: 1)
Ответ на: комментарий от anonymous

убогие уеб-странички для Васек Пупкиных - ненужная мразота

Не нужны они упоротым си макакам. Которые голодные сидят на лоре. Поэтому и голодные, что им ничего не нужно, они ж макаки.

menangen ★★★★★
()
Ответ на: комментарий от emulek

у тебя совсем с головой плохо: какие «реальные обобщённые реализации»? Совсем упоролся?

Обычные, аля стловская, о которой тут в теме кукарекали, собственно ты сам кукарекал про кнута и стл, а я задал вопрос, что «у кнута для дефолтной хешбалице тоже O(1)».

Естественно какбэ меня не интересуют абстрактные кони. У меня нет бесконечной памяти.

Царь сказал? А мужики-то не знали…

Ты дальше читай. Зачем этот игнор, выдирание из контекста и «мужики-то не знали»?

Мне не интересно что ты знал, а что не знал - мне интересно почти O(1) с небольшим оверхедом. Где?

ну возьми эквивалентное красно-чёрное, там нет «третей ноги».

Понимаешь, я ещё могу поверить высоту ограниченную логарифмом2 с 3-й ногой - я не буду спорить, ибо я не знаю, а разбираться мне лень, но без третий - нет. Я в этом не верю.

Пруфец пожалуйста, который доказывает высоту дерева ограниченную лог2 для любых данных.

чего тебе сказать?

Кол-во в единицах key+value, либо их суммарный вес в байтах. Т.е. сколько я могу туда записать. Но это не важно - ты мне выкати.

Ты можешь не ограничиваться 100метрами. Я напишу норм бенчи и побенчу у себя. Посмотрим про O(1), посмотрим потом про брёвна, посмотрим про вставку. Пацанам будет интересно. Посмотрим stl.

TrueTsarC
()
Ответ на: комментарий от anonymous

Отличная задача. Элементарно решается на java. Наверное поэтому Элон Маск и использует в своих машинах java мозги.

menangen ★★★★★
()
Ответ на: комментарий от menangen

Ты мне ТЗ выкатишь? Либо свою реализацию - я напишу функциональную копию. За 3дня которая.

Либо ты просто так балаболил?

TrueTsarC
()
Ответ на: комментарий от emulek

Да, повсюду кучи говна, но это разве проблема, с нынешними ценами на RAM?!

Вот смотри. Есть сервер внутриигровых покупок на node.js. Приложение написано на чистом javascript. Не надо убирать за собой мусор, все счастливы. Ты говоришь, что мусором забьётся память. Но.... Теперь смотрим на потребление node.js. Полностью запущенный экземпляр сервера потребляет 70 Мб рамы. Через месяц он потребляет 75-85 Мб. Через полгода он будет потреблять 100 Мб. Сервер приносит с продажи игровой валюты и вещей около $2.500 за 30 дней. Это только один этот сервер. Мы на эти деньги можем купить таких серверов ещё 1000, если это потребуется.

menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от TrueTsarC

Тз: написать клон slack.com. Чтобы весь html рендерился из jade шаблонов, ага.

menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от menangen

Реалтайм + гц + одно ведро. Да ты я смотрю эксперт.

Наверное поэтому в жабе запили jni и без неё никуда, а любой топовый жаба-вебсервер это обёртка над сишным api, причём скорее всего сама обёртка работает мимо гц, а в гц уже идёт только пабликметоды для обезьян. А чистожабавебсервер - это 100рпс.

Наверное поэтому Элон Маск и использует в своих машинах java мозги.

Пруфец.

TrueTsarC
()
Ответ на: комментарий от menangen

Наверное поэтому Элон Маск и использует в своих машинах java мозги.

Чозахерьтынесешь? Там используется «Java for mobile application», да и та только в гуйне.

а вообще «Code primarily in C++ on custom hardware running Linux» (с)

BTW, шобтызнал, в SpaceX так же искользуются кресы и сишечка.

anonymous
()
Ответ на: комментарий от menangen

Что конкретно мне посмотреть. Выкатывай свою реализацию бенча своего говна с описанием. Говори как запускать, аля какая jvm + если надо тюнить - пиши пасту. Чтобы ты не ныл, что я неправильно заюзал.

Конфиг у меня топовый i7-4770K@4.5GHz + 2400рама. Т.е. нытьё о том, что я бенчу на говне без памяти/с медленной памятью, а на сервере будет летать - тоже не работает. Я уже видал таких жабистов.

Я реализую её на сишке. Ты обсираешься - мы расходимся. Заодно мб перестанешь жить в иллюзиях.

Насколько я понял про 3к твоих рпс - это бенч на хттп-хелворде? Опиши бенчмарк вменяемо и выкатывай. Какбэ у тебя там 2строчки написать - у меня 20к. Поэтому ты превый.

Не хочешь писать - я возьму хелворд бенчмарк из интернетов, но тогда твоё нытьё не принимается.

Ты сам то с java работал?

Я не работаю с говном. Мне не нужно это, ибо в отличии от тебя - я понимаю как работает твоя жава и что она реально может из себя представлять, ибо моё понимание от реализации и мне не интересно какая прокладка торчит наружу к тебе, через которую ты работаешь..

TrueTsarC
()
Ответ на: комментарий от TrueTsarC

Обычные, аля стловская, о которой тут в теме кукарекали, собственно ты сам кукарекал про кнута и стл

мудила, так Кнут или STL? Определись.

Естественно какбэ меня не интересуют абстрактные кони. У меня нет бесконечной памяти.

мудила, O-нотация как раз «в бесконечности» только и работает. Это не магия, это просто поведение некой функции(математической) в окрестности «бесконечность». И никакие коллизии на это поведение не влияют, по той простой причине, что эта функция никаких коллизий не описывает. Коллизии в хеше — проблема реализации.

Мне не интересно что ты знал, а что не знал - мне интересно почти O(1) с небольшим оверхедом. Где?

я уже тебе говорил несколько раз: для O(1) число коллизий должно быть пренебрежимо мало. И не из-за «волшебства емулека», а просто тупо по определению.

Твоя проблема в том, что ты тупо не понимаешь, что такое O(1).

Понимаешь, я ещё могу поверить высоту ограниченную логарифмом2 с 3-й ногой - я не буду спорить, ибо я не знаю, а разбираться мне лень, но без третий - нет. Я в этом не верю.

мне собственно насрать, во что ты веришь. В данном случае, я просто беру и считаю. Полное тернарное дерево имеет ровно n=3^h узлов, где h это высота дерева. Если высота ==3, то узлов 27. Что тут сложного? Что-бы найти узел, тебе нужно пройти от корня, через 3 узла. Потому сложность равна 3 шага. Если узлов 2187, то высота (и число шагов) равна 7. Что тут непонятного? Сложность равна C*log₃(n), где C — какая-то константа, которая зависит исключительно от скиллов быдлокодера и мощности железа. Если дерево полное и бинарное, то t = C*log₂(n).

А в нашем случае, часть узлов бинарные, а остальные тернарные. Потому время получается где-то между. Где именно не имеет значения, т.к. это в любом случае логарифм, а основание можно любое взять, хоть натуральные бери.

Важно то, что дерево _полное_, т.е. в нём нет «дыр» и нет «хвостов». Любой узел имеет 2 или 3 потомка, за исключением листьев на последнем уровне. Т.е. если высота равна h, то для доступа _всегда_ нужно пройти _ровно_ h узлов. Не больше и не меньше.

Пруфец пожалуйста, который доказывает высоту дерева ограниченную лог2 для любых данных.

по определению. Определение выше.

Кол-во в единицах key+value, либо их суммарный вес в байтах. Т.е. сколько я могу туда записать. Но это не важно - ты мне выкати.

ладно, попробую…

emulek
()
Ответ на: комментарий от menangen

Теперь смотрим на потребление node.js. Полностью запущенный экземпляр сервера потребляет 70 Мб рамы. Через месяц он потребляет 75-85 Мб. Через полгода он будет потреблять 100 Мб. Сервер приносит с продажи игровой валюты и вещей около $2.500 за 30 дней. Это только один этот сервер. Мы на эти деньги можем купить таких серверов ещё 1000, если это потребуется.

а тебе программист C/C++ не требуется, который сможет снизить твои затраты на железо вдвое? Уверен — не требуется. Потому что это всё твои жалкие красноглазые фантазии.

А сервера и доллары у того, кто нанял этих C/C++ программистов.

Потому что один раз написать годный и поддерживаемый код на C/C++ конечно намного дороже, чем на пхп, но всяко дешевле, чем закупать сервера тысячами.

Вырастешь — поймёшь.

emulek
()
Ответ на: комментарий от TrueTsarC

Ну вот. Ты не работал. А я работаю. И с java, и с си и с обжектив си, и с go, и с javascript. А твой опыт на уровне студента самоучки, т.ч. втирай кому-нить более тупому свои какашки. Вот тебе минусы си:

1. Компилируемость. Это долго.
2. Платформозависимость и зависимость от железа.
3. Крайне долгое написание кода. В сравненнии с java: 3 кратное преимущество жабки; в сравнении с питоном: 50-ти кратное.
4. Сложность писанины элементарных вещей и работы с ними.
5. Дублируемость реализаций стандартных вещей, которые уже давно есть во всех других языках. Решают это тупо юзанием буста и прочего.

menangen ★★★★★
()
Ответ на: комментарий от menangen

Вот тебе минусы си

Решают это тупо юзанием буста и прочего

А я работаю

А ну ясно.

anonymous
()
Ответ на: комментарий от emulek

Какие затраты? У нас сервер в амазоне, там дают 800 Мб рам, ноджс жрёт 100Мб в месяц. Загрузка проца в пике 7% от силы. У нас простаивает 80% ресурсов на вскидку. Нода стартует за 2 секунды со всеми прибамбасами. Что тут улучшать? Если мы во что-то уткнёмся - мы просто купим за 10 баксов ещё такой сервак и всё. Расходы копеечные.

menangen ★★★★★
()
Ответ на: комментарий от emulek

один раз написать годный и поддерживаемый код на C/C++ конечно ... всяко дешевле, чем закупать сервера тысячами.

Почему ты так решил? Нет :) Работа программистов стоит для нас около 30 баксов в час в среднем. Один сервер за 10 баксов нам приносит 2.5 штуки баксов в месяц. Игровой сервер на javascript писали 2.5 месяца со всеми юнит-тестами и т.п. На си его писать придётся год, и зарплату платить год сишникам около 50 в час, нафига?

menangen ★★★★★
()
Ответ на: комментарий от emulek

Ну например обезьяна не может понять, что коллекция типа сишного массива позволяет доступ за O(1)

По идексу.

Список — наоборот.

Нет. В списке нет эквалентной вставки. Только в текущую ноду, до которой ещё надо дойти. O(1) в общем случае там только в начало + в конец, если есть 2указателя, либо кольцевой список.

Эквивалентная вставка по индексу требует доступа, который O(n). Т.е. список имеет и вставку O(n) и доступ O(n). Откуда ты высрал O(1) я не знаю и какого хрена ты приравниваешь вставку между текущей и соседней нодой ко вставке по индексу тоже.

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

TrueTsarC
()
Ответ на: комментарий от TrueTsarC

Чем сраться тут в темах - лучше бы организовали какой-нить ресурс для обучения челов сишке по типу кодескула. Раз они учат говну, то учите Вы не говну, раз вы считаете, что шарите в си/+. Или вон - гитхаб, куча идей - пили не хочу код, но нет, проще говно в вентилятор бросать.

menangen ★★★★★
()
Ответ на: комментарий от TrueTsarC

ты решил вякнуть и подосрать

Не обижайся, но ты тут далеко не пуп земли(:IMHO, конечно, YMMV:), а «неуловимому джо» козни не строят. Наивно полагать, что тут кто-то что-то пишет ради тебя, кроме тебя самого. Я пытался что-то узнать; не удалось, ушёл. А убеждать тебя? Увольте, мне это зачем(*)? Я тебе показал, где ты неправ - ты можешь разобраться со своими заблуждениями, или спросить, или оставаться идиотом - это твой выбор. Или можешь, наконец, сказать что-то, чего собеседник не знал, поможешь ему разобраться с его багами. Так работает «в споре рождается истина».

(*)Да, этот офтопик тоже не ради тебя. Сможешь уже догадаться ради чего?

DonkeyHot ★★★★★
()
Ответ на: комментарий от menangen

1. Компилируемость. Это долго.

зато результат в разы быстрее.

2. Платформозависимость и зависимость от железа.

лечи своё рукожопие

3. Крайне долгое написание кода. В сравненнии с java: 3 кратное преимущество жабки; в сравнении с питоном: 50-ти кратное.

лечи своё рукожопие

4. Сложность писанины элементарных вещей и работы с ними.

лечи рукожопие и/или открой для себя стандартные библиотеки

5. Дублируемость реализаций стандартных вещей, которые уже давно есть во всех других языках. Решают это тупо юзанием буста и прочего.

это не «дублируемость», а свобода выбора. Например я не люблю юзать boost.

emulek
()
Ответ на: комментарий от menangen

У нас простаивает 80% ресурсов на вскидку.

вопросов более не имею.

emulek
()
Ответ на: комментарий от TrueTsarC

Откуда ты высрал O(1)

push/append

Кроме того, если ты как-то получил доступ(не важно, пусть за O(n)), то вставка туда же будет уже O(1).

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

детка, LIFO и FIFO встречаются чуть более, чем везде.

emulek
()
Ответ на: комментарий от emulek

детка, LIFO и FIFO

лолd именно поэтому в твоей stl для std::queue (FIFO) и std::stack (LIFO) юзается дека (std::deque)

anonymous
()
Ответ на: комментарий от menangen

Яба? В реалтайме? На паре килобайт памяти? Ты совсем упоролся, проституткин сын.

anonymous
()
Ответ на: комментарий от menangen

Ты не работал.

Что из этого следует?

и с си

В мечтах.

1. Компилируемость. Это долго.

Да тут на меня полились очередные студентомифы. Долго - это в мечтах твоих. Ты даже настолько туп, что не знаешь с чего в твоей «голове» эти мифы, да и вообще с чего они пошли.

Я ради тебя пошел наговнякал на коленке враппер для гцц, который считает кол-во строк в файлах и время конпеляции, а далее отправляет это на демон, который считает кол-во строк в секунду и среднее за всё время и запустил это на линукс ведре. Собственно для всего остального результаты не меняются.

Ты не поверишь:

2116lps(cputime 1.680543) avg(2116lps(cputime 1.680543))
13991lps(cputime 6.185228) avg(8053lps(cputime 3.932885))
43119lps(cputime 8.714951) avg(19742lps(cputime 5.526907))
36343lps(cputime 9.063057) avg(23892lps(cputime 6.410945))
21801lps(cputime 8.060846) avg(23474lps(cputime 6.740925))
14364lps(cputime 7.249465) avg(21955lps(cputime 6.825682))
22002lps(cputime 7.477171) avg(21962lps(cputime 6.918752))
26424lps(cputime 9.494285) avg(22520lps(cputime 7.240693))
17343lps(cputime 7.537813) avg(21944lps(cputime 7.273706))
25069lps(cputime 9.324297) avg(22257lps(cputime 7.478766))
32667lps(cputime 8.553423) avg(23203lps(cputime 7.576462))
20391lps(cputime 7.043772) avg(22969lps(cputime 7.532071))
37233lps(cputime 9.111783) avg(24066lps(cputime 7.653587))
2663lps(cputime 0.614445) avg(22537lps(cputime 7.150791))

22килостроки на тачку. Ты столько за 2года не осилишь написать.

Далее, проверяем мое результаты - берёшь sqlite

$ wc -l sqlite3.c
153363 sqlite3.c
$ time gcc sqlite3.c -O2 -E > sqlite3_nc.c

real    0m0.067s
user    0m0.064s
sys     0m0.000s

$ wc -l sqlite3_nc.c
82598 sqlite3_nc.c

$ time gcc -O2 -c sqlite3_nc.c 

real    0m8.640s
user    0m8.544s
sys     0m0.088s

//Зачем далеко ходить - твоя жаба и этого не осилит. Для уровня жабы хватит и:
$ time gcc -O1 -c sqlite3_nc.c

real    0m4.610s
user    0m4.564s
sys     0m0.044s

//даже этого много, обоссыт жабу в говно - лучше это:

$ time tcc sqlite3_nc_tcc.c -c -bench
7642 idents, 86964 lines, 1789504 bytes, 0.035 s, 2515591 lines/s, 51.8 MB/s

real    0m0.036s
user    0m0.032s
sys     0m0.000s


//И тут насцену выходит сланг, ахриненной быстро копилящий шланг, который обоссывает гцц в говно. Ну по рассказам пацанов:

$ time clang -O2 sqlite3_nc_clang.c -c -w

real    0m10.365s
user    0m9.448s
sys     0m0.020s
//собственно реально обоссал.

Т.е. 10-20-2515килострок на ведро, либо овер 40-80-10060к на тачку. Т.е. одним файлом ещё быстрее.

Но конечно же - по мнению нулёвой обезьяны - это долго.

Платформозависимость и зависимость от железа.

Я тебя удивлю, но твоя жаба и жабаскрипт написаны на этой самой сишки и жаба/жабаскрипт имеет эту самую переносимость сишки.

Ну и да, куллстори. Ты же мне расскажешь чем именно оно зависит от железа?

Крайне долгое написание кода.

В твоих мечтах. Есть какие-то объективные причины, либо это очердной мифец, о котором ты где-то слышал.

В сравненнии с java: 3 кратное преимущество жабки

Датычё, датычё, а 2дня назад было 10кратное. Уже обделался?

в сравнении с питоном: 50-ти кратное.

Как считал - расскажи. Я посчитаю сам.

Сложность писанины элементарных вещей и работы с ними.

Сложность понятие субъективное. Для тебя, нулёвой обезьяны - да. Для норм пацана нет.

Юзай готовое говно.

Дублируемость реализаций стандартных вещей

Они не стандартные объективно, а лишь в твоей пустой голове. Очередной пункт основанный на студенческих мифах.

которые уже давно есть во всех других языках.

Угу, как биндинг к сишной либе. Куллстори.

Решают это тупо юзанием буста и прочего.

А, кажется теперь я понимаю откуда ты высрался. Когда-то обезьяна хреначила на псевдокрестах, а потом неосилала и свалила на жабу. И какой-то жопой приписала себе сишку за счёт крестов.

Никому не надо это решать. Я напишу ту же хештаблицу под мою задачу в 10-100раз быстрее твоего жабо/с++ говна. Потратив на это 5минут времени.

Где бенчи твоего жабаговна? Где код, где ТЗ? О5 обделался?

TrueTsarC
()
Ответ на: комментарий от emulek

push/append

В массиве тоже. Ты вообще думаешь перед тем как кукарекнуть, либо лижбы нести херню? Ну высрал ты этот пуш, к чему? Если на массиве это быстрее.

Кроме того, если ты как-то получил доступ(не важно, пусть за O(n)), то вставка туда же будет уже O(1).

Я рад, что ты пересказал описанный мною основной юзкейс для говносписка. Зачем?

Это не еквивалент доступа по индексу в массиве, поэтому какого хрена ты кукарекнул, что наоборот? О5 в башке говно, обосрался и будешь юлить?

Список кусок говна, O(1) которого работает только в одном юзкейсе. Я его описал. Этот юзкейс крайне редок.

детка, LIFO и FIFO встречаются чуть более, чем везде.
LIFO

Это обычный стек - это O(1) на массиве, притом быстрее чем на говносписке.

Причем тут список?

FIFO

Обычный стек, только снизу. Реализуется на массиве за O(1). Быстрее говносписка.

К чему ты высрал список? В твоей говнокниженке о нём написали - я рад, правда я не понимаю как можно нести такую херню.

TrueTsarC
()
Ответ на: комментарий от TrueTsarC

Далее, проверяем мое результаты - берёшь sqlite

А ты чё-нить по-серьёзней возьми. GCC скомпилируй. Или openssl с питоном. Там твои 8 секунд окажутся раем школьника.

menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от emulek

3. Крайне долгое написание кода. В сравненнии с java: 3 кратное преимущество жабки; в сравнении с питоном: 50-ти кратное.

лечи своё рукожопие

Чё мне лечить? Не я же пишу на сях. Те, кто пишет - пишут в 50 раз медленнее меня на питоне. Пока сишники раздуплятся, подцепят хэдеры - у меня уже будут работающие наброски restful-api и мне капает $90 за это :)

menangen ★★★★★
()
Ответ на: комментарий от menangen

И о5 обосрался.

А ты чё-нить по-серьёзней возьми.

Что значит по-серьёзней, нулёвая балаболка. КРитерии.

GCC

Если в твоих мифцах записано, что гцц долго собирается - я тебя удивлю а) там кресты б) он собирается 3раза. в) там говяный автотулз, который тормазит в говно и убогая мразь на говнобашике. Собственно тормазит он во всем, о чем ты кукарекал - юзай норм систему сборки. г) на мультилибе он собирается почти все 5раз.

У меня он собирается 10минут. кресты+фортран+все фиичи.

openssl

Да ты эксперт. И что я должен там увидеть?

41758lps(cputime 4.741124) avg(41758lps(cputime 4.741124))
29926lps(cputime 4.805093) avg(35842lps(cputime 4.773109))
30251lps(cputime 3.803119) avg(33978lps(cputime 4.449779))
36038lps(cputime 4.023139) avg(34493lps(cputime 4.343119))
5837lps(cputime 0.547059) avg(28762lps(cputime 3.583907))
26390lps(cputime 6.336816) avg(28366lps(cputime 4.042725))
23137lps(cputime 2.618938) avg(27619lps(cputime 3.839327))
38888lps(cputime 1.959509) avg(29028lps(cputime 3.604350))
14728lps(cputime 1.997845) avg(27439lps(cputime 3.425849))
5973lps(cputime 1.966087) avg(25292lps(cputime 3.279873))
15712lps(cputime 1.798835) avg(24421lps(cputime 3.145233))
13449lps(cputime 1.983228) avg(23507lps(cputime 3.048399))
21932lps(cputime 1.801789) avg(23386lps(cputime 2.952506))
8529lps(cputime 0.810586) avg(22324lps(cputime 2.799512))

real    0m35.004s
user    0m55.876s
sys     0m3.480s

Что мы тут видим - код ещё проще, чем у ведра. Ну и ублюдскую систему сборки. С нормальной системой сборки - было бы в 3раза быстре - т.е. 12секунд.

11106lps(cputime 4.239155) avg(11106lps(cputime 4.239155))
32061lps(cputime 10.367373) avg(21583lps(cputime 7.303264))
13659lps(cputime 4.945198) avg(18942lps(cputime 6.517242))
26043lps(cputime 7.718815) avg(20717lps(cputime 6.817635))
27507lps(cputime 8.380717) avg(22075lps(cputime 7.130252))
24111lps(cputime 8.403023) avg(22414lps(cputime 7.342380))
26851lps(cputime 5.457984) avg(23048lps(cputime 7.073181))
21079lps(cputime 9.524726) avg(22802lps(cputime 7.379624))
//Пошел компилять модули в один поток
6853lps(cputime 0.955859) avg(21030lps(cputime 6.665872))
2153lps(cputime 0.685381) avg(19142lps(cputime 6.067823))
4640lps(cputime 1.271167) avg(17823lps(cputime 5.631763))
8286lps(cputime 0.958728) avg(17029lps(cputime 5.242344))
7884lps(cputime 0.879065) avg(16325lps(cputime 4.906707))
9525lps(cputime 1.293901) avg(15839lps(cputime 4.648649))
7174lps(cputime 1.012568) avg(15262lps(cputime 4.406244))
2683lps(cputime 0.156434) avg(14475lps(cputime 4.140631))
10180lps(cputime 1.652385) avg(14223lps(cputime 3.994264))
10653lps(cputime 0.962068) avg(14024lps(cputime 3.825808))
7673lps(cputime 1.109293) avg(13690lps(cputime 3.682834))
7176lps(cputime 1.035621) avg(13364lps(cputime 3.550473))
3800lps(cputime 0.431084) avg(12909lps(cputime 3.401931))
10865lps(cputime 1.575683) avg(12816lps(cputime 3.318919))
2059lps(cputime 0.467160) avg(12348lps(cputime 3.194930))
7739lps(cputime 0.893288) avg(12156lps(cputime 3.099028))
3309lps(cputime 1.187259) avg(11802lps(cputime 3.022557))
8015lps(cputime 1.353590) avg(11657lps(cputime 2.958366))
2675lps(cputime 0.751340) avg(11324lps(cputime 2.876625))
7709lps(cputime 2.106744) avg(11195lps(cputime 2.849129))
1870lps(cputime 0.387386) avg(10873lps(cputime 2.764241))
13084lps(cputime 1.755538) avg(10947lps(cputime 2.730618))
6647lps(cputime 0.835085) avg(10808lps(cputime 2.669472))
1019lps(cputime 0.711582) avg(10502lps(cputime 2.608288))
1286lps(cputime 0.284205) avg(10223lps(cputime 2.537861))
10455lps(cputime 1.189240) avg(10230lps(cputime 2.498195))
4027lps(cputime 0.370845) avg(10053lps(cputime 2.437414))

real    0m36.041s
user    1m10.264s
sys     0m1.860s

Собственно очередная проблема говносистемы сборки. Только первые 8секунд паралелялся - остальные в говне. Т.е. с норм системой сборки - это бы собиралось в овер 2раза быстре - т.е. 15секунд. Собственно очередной обсёр.

Там твои 8 секунд окажутся раем школьника.

Не оказались. Отсилы 35секунд собирается твоё говно, при этом, если я запущу его одновременно:

real    0m45.600s
user    0m57.928s
sys     0m3.472s

real    0m48.454s
user    1m10.664s
sys     0m1.852s

Т.е. по 24секунды, но даже шедулер это не может раскидать по вёдрам, ибо 2 однопоточных говна.

Собственно emrge --jobs=4 решает эту проблему, добавляя оверхед на шедулинг.

Собственно как всегда обосрался.

TrueTsarC
()
Ответ на: комментарий от TrueTsarC

push/append

В массиве тоже.

на массиве нужен realloc(3).

O(1) которого работает только в одном юзкейсе.

O-большое подбирают под юзкейс, а не наоборот.

FIFO

Обычный стек, только снизу.

покажи реализацию без realloc(3) и memmove(3).

emulek
()
Ответ на: комментарий от menangen

Не я же пишу на сях. Те, кто пишет - пишут в 50 раз медленнее меня на питоне.

за то получают в Over9000 раз больше.

emulek
()
Ответ на: комментарий от TrueTsarC

Ну и ублюдскую систему сборки.

ВНЕЗАПНО: система сборки нужна для того, что-бы ВСЁ НЕ СОБИРАТЬ. Т.е. поправил я один из Over9000 файлов в проекте, нажал F9, запустилась gnu-make, и собрала ОДИН файл.

Как долго оно будет ВСЁ собирать — не важно. Это вообще не забота разработчика.

emulek
()
Ответ на: комментарий от emulek

Важно, сколько все собирается. Тебе в приличном заведении никто и закоммитить не даст, пока Jenkins несколько clean builds род все платформы не родит.

anonymous
()
Ответ на: комментарий от menangen

Те, кто пишет - пишут в 50 раз медленнее меня на питоне.

Ну ты уже написал риалтаймовый контроллер для дизельного двигателя, да ?

Ну и это, HotSpot напиши на педоне, да?

anonymous
()
Ответ на: комментарий от menangen

Есть же D, Objective-C, и Go

На которых никто не пишет, особенно кроссплатформу. А обжективц - только проги прибитые гвоздями к макоси

slackwarrior ★★★★★
()
Ответ на: комментарий от menangen

1. Компилируемость. Это долго.

лалка, ты знаешь, что facebook тоже компелируется из с++? Да, кстати, это еще и твой любимый уэб + работает под такими нагрузками, до которых твоим поделкам как до луны рачком. Давай расскажи всем, что там сидят сплошь мудаки и нищеброды, которые не могут позволить себе «купить еще один сервер за 10$»

anonymous
()
Ответ на: комментарий от slackwarrior

справедливости ради, Go только 5 лет отроду. И крассплатформа сейчас на нем пишется и еще как. По крайней мере на одном ноуте легко собралось то, что запустилось и на распбери и на венде. для домашних поделок уже вполне годится.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.