LINUX.ORG.RU

Книга по алгоритмам

 ,


5

3

Здравствуй, ЛОР:)!

Вопрос к знатокам и не только. Посоветуйте хорошую книгу по алгоритмам для программистов (работа с массивами, потоками, парсинг файлов, реализация машини тьюринга, и т.д.), желательно чтобы были примеры на языке python.

Заранее спасибо.


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

Все, что тебе не под силу, ты считаешь ненужным. Лузерский подход.

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

Если я говорю ГЦ не нужно, а оно реально мне не нужно, то нахрен мне его пилить? Зачем мне оптимизировать поток инструкций, делая поведение непредсказуемым, а потом ещё пилить оптимизатор потока для конпелятора?

Мне прлще сразу запилить это в конпеляторе, не теряя перфоманс и не усложная архитектуру.

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

Мне не интересна кодогинерация из говн. Если я гинерирую из своего оптимально написанного кода, который не юзает стопицот переменных и для моего кода не надо дампить регистры, то мне не нужно писать охрененть какой умный регистрорапределятель.

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

А я не буду выбирать, ибо конпелятор это делает по идиотски. - это будет макроассемблер на алиасах. Начало моих идей есть в amd64 abi, но даже это выполнено по ущербански( попробуй структурку из 3х елеметов юзать из кучи - получишь тысячи фейлов) во всех конпеляторах(icc gcc).

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

На бред, аля «сишка - переносимость» - я клал. Реально вменяемых кодогинераторов для чего-то, акромя х86 у того же гцц нет. Есть там какие-то подвижки в арм"е, но реально на 99% мертвечины он ущербен и называть это это переносимостью я бы поржал.

Да и вообще в моей убийце сишки нет кодогинератора, а есть лишь оптимизатор сочленений.

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

Регистры (latches, на самом деле) находятся между стадиями пайплайна. Сигнал останавливается, уткнувшись в регистр, и продолжает идти через следующую стадию при следующем цикле. А предыдущая стадия пайплайна уже другой сигнал обрабатывает. Никаких таких «юнитов» тут нет, одно банальное умножение может быть разбито на много стадий.

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

Короче, лузер, про архитектуры, языки и компиляторы ты тоже ни хера не знаешь. Через пол года будешь жрать говно публично, когда обосрешься со своим убогим макроассемблером? Еще на аллокаторе регистров обосрешься, не доходя до instruction scheduling.

Кстати, баран, ты про gcc не знаешь вообще ни хера. Кодогенератор для того же Hexagon у него в разы лучше всех прочих. А x86 - ненужное десктопное быдловское говно.

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

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

Т.е. пайплайн - это банальный многостадийный конечный автомат. Это много путей для сигнала, а путь выбирается взависимости от комманды.

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

Где я зафейлил?

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

Короче, лузер, про архитектуры, языки и компиляторы ты тоже ни хера не знаешь. Через пол года будешь жрать говно публично, когда обосрешься со своим убогим макроассемблером? Еще на аллокаторе регистров обосрешься, не доходя до instruction scheduling.

Как я уже говорил - мне не интересны твои языки и конпеляторы. В твоём понимании конпелятор - это гинерация кода из говн. Мне это не нужно. Мне не нужны техники гинерации из говн( я не изобретаю С++).

Кстати, баран, ты про gcc не знаешь вообще ни хера. Кодогенератор для того же Hexagon у него в разы лучше всех прочих. А x86 - ненужное десктопное быдловское говно.

Давай мне линк на Hexagon.

Да, х86 ненужное десктопное быдловское говно, но от него я не уйду до момента, когда буду пилить убийцу х86.

А так возможно для какой-то экзотики возможно там есть вменяемый кодоген, но мне это не говорит, что для всего остального он такой же.

superhackkiller1997
()

Рекомендовать человеку учить алгоритмы по Кнуту это всё равно, что ребёнка, желающего научиться читать, послать в библиотеку.
Он по Кнуту алгоритмы будет лет пять учить.

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

Опиши семантику своего йоба-языка, а я поржу и покажу тебе, где там нужны register allocation и instruction scheduling.

Про гексагон тебе гугл расскажет.

anonymous
()

Ребят! пони! не портим тред, давайте лучше все вместе почитаем Кормена!

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

Ты невменяем, тебе не хватает интеллекта на понимание простейших концепций. Путь в пайплайне один, болван! Попробуй почитать хотя бы педивикию. Автоматы тут вообще не при делах.

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

Давай я тебе расскажу почему register allocation не нужен.

Я сам знаю что и как мне юзать лучше твоего конпелятора, но тебя это не устроит.

Твой байда нужна для ЯП типа плюсов и прочей ереси, которая состоит из тысяч ненужных ересей. Во вменяемом коде ничего, кроме дампа регистров не нужно, да даже стек нахрен не упал.

Я даже не могу придумать нахрена оно мне может понадобиться - объясни мне.

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

Ага. По одному пути. Смотри только, с натуги не лопни, пытаясь понять. Лучше прочитай хотя бы педивикию.

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

Ты знаешь это намного хуже компилятора, тупица. Это NP-полная задача, ее решать эффективно ни один гений не может, а ты, тупица, и подавно.

Приведи пример кода на своем йоба-языке, чиста поржать.

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

Реально? Это NP-полная задача, без контекста.

Когда я пишу int a = 100, b = 0, c; while(--a) ++b; Я знаю, что надо мне засунуть в регистр, а что нет. А ты дальше решай свою задачу.

Твоя задача бесполезна в реальном мире и ты не сможешь привести примера её применения.

Синтаксис ЯП является на 99% синтаксисом си - тебе код ничего не даст. Когда код пишут труЪ пацаны, а не неосиляторы вроде тебя - они юзают 5-6переменных, которые влезают в регистры, а если переменная не нужна - труЪ пацан поставит флаг - здампь в стек.

Налицо твоё татальное непонимание реального кода.

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

Вобщем ты сам делишь на ноль и несёшь хрень. Пока ничего, что противоречит моим словам ты не сказал.

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

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

Ты-то, тыж даже signed не осилил, так да - я поржу.

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

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

Ах да, ещё. Никогда, никакой вменяемый код не работает больше, чем 5-6переменными нуникак - это аксима для анскильных неосиляторов сишки типа тебя. Поэтому твоя байда не имеет смысла, а кто её придумал я даже не представляю, наверное неосилятор типа тебя.

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

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

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

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

Обычно АЛУ выполняет все возможные операции для исходных данных, и в конце выбирает mux-ом нужный результат. Но это не важно, баран, а важно то, что ты так и не осилил понять, что такое конвейер. А все от того, что ты очень, очень тупой и невежественный. А нет ничего более мерзкого, чем туопе ничтожество, которое смеет считать себя умным. Тупицы обязаны хнать, что их место - у параши. Осознай свое место в этой жизни, ничтожество.

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

Причина тому проста: унылый троллинг и провокации.

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

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

Вот и посчитай, тупица, сколько спиллов в твоем быдлокоде получается для x86.

Хороший способ увидеть количество виртуальных регистров, необходимых при тупой кодогенерации, это скомпилировать исходник без оптимизации в LLVM IR. Ты, тупица, сильно удивишься, много нового узнаешь.

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

Реальный человек не может быть таким тупым и невежественным абсолютно во всех темах. И с чсв явно переигрывает пациент.

anonymous
()

«Ай-яй-яй-яй, убили негра, убили

Ни за что ни про что, суки, замочили»

(ц)

Как же мы теперь узнаем о выходе «убийцы Сишки» (кстати, давно хотел спросить, кто такой Сишка)?

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

Как же мы теперь узнаем о выходе «убийцы Сишки»

Как обычно, из выпуска новостей дремучего провинциального канала.

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

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

Максимум, что надо - это на один-два регистра больше.

Для тебя объясню - тот мой код требует максимум регистра 4 - это в хедлере для самой большой структуры и то из-за принтфа.

И да, мистер неосиляторство, причем тут вообще «промежуточные переменные»?

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

Похоже слил какого-то модератора, либо 4-5звёздочную лалку, которая пошла стучать модератору.

Стандартная история - да, из новостей узнаешь.

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

Собери мой код с O0 - удивишься. Все в регистрах. Это с учётом того, что он абсалютно не умеет вменяемо обрабатывать структуры с O0.

Это не мой макроассемблер, даже близко. Балабол.

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

А как быть с диким матаном, который нужно заботать?

Математический анализ в тех алгоритмах ненужен практически вообще (бесконечный).

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

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

А как быть с диким матаном, который нужно заботать?

Дикий матан? В алгоритмах? Реквестирую пример. Да, если учишь алгоритмы — должна быть база по дискретке, комбитинаторике, теорверу. Но матан как таковой нужен там на уровни логарифмов и вычисления интеграла. Конечно есть математические алгоритмы, реализуемые с помощью ЯП для произведения сложных вычислений, но ТС не о них

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

Почитай аналитическую комбинаторику от Флажоле и Седжвика. Удивишься, сколько всего приходится делать с помощью «дикого матана».

anonymous
()

желательно чтобы были примеры на языке python.

Попалась мне недавно одна книга по алгоритмам. Её автор предложил вместо псевдокод/С/С++/джава использовать... питон, аргументируя, что читаем практически также легко как псевдокод, но при этом можно запускать и играться в распространённом интерпретаторе. Один возможный недостаток - книга Praktische Algorithmik mit Python (pdf-версия) на немецком.

gag ★★★★★
()
11 июля 2013 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.