Re[7]: чем заменить задачу по развороту списка
От: B0FEE664  
Дата: 06.10.20 14:48
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>>>>>Это задачка из К и Р

S>>>>>И человек знающий про обратную польскую Наталию решит ее за недолго
BFE>>>>Сколько дней? С учётом входных данных, например таких: длина числа не более 1024 знака. Длина выражения не более 10 гигабайт. Ну, а что? В условиях про формат ничего не сказано.
S>>>А какие операции доступны и можно ли использовать скобки в выражениях
BFE>>Числа только в десятичной системе исчисления?
S>В восьмеричной шестначтиричной или двоичной
Двоичные числа записывать в прямом, обратном или дополнительном коде?
Почему нет поддержки троичной системы?
И каждый день — без права на ошибку...
Re[5]: чем заменить задачу по развороту списка
От: Skorodum Россия  
Дата: 06.10.20 14:49
Оценка:
Здравствуйте, xarcass, Вы писали:

X>лет 20 назад это было исключительно для скорости.

Это никогда не было искючительно для скорости, т.к. доступ к битам требовался всегда.
Re[8]: чем заменить задачу по развороту списка
От: sergey2b ЮАР  
Дата: 06.10.20 15:03
Оценка:
Здравствуйте, B0FEE664, Вы писали:


BFE>>>Числа только в десятичной системе исчисления?

S>>В восьмеричной шестначтиричной или двоичной
BFE>Двоичные числа записывать в прямом, обратном или дополнительном коде?

наверное более универсально с дополнением до двух

BFE>Почему нет поддержки троичной системы?


потому что я ее не знаю
Re[15]: чем заменить задачу по развороту списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 06.10.20 15:14
Оценка:
Здравствуйте, Skorodum, Вы писали:

I>>А если микроконтроллер?

S>Тогда надо добавить в исходные условия: "есть микроконтроллеи и JIT где операция умножения дорогая и не оптимизируется...".
S>Иначе такие вопросы больше говорят о квалификации того, кто их задает.

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

I>>Цитирую себя "не все ведь к С++ сводится"

S>Gnu Compiler Collection...

Я все время думал, что gcc это gnu c++
Re[16]: чем заменить задачу по развороту списка
От: AleksandrN Россия  
Дата: 06.10.20 15:21
Оценка: 10 (1)
Здравствуйте, Ikemefula, Вы писали:

I>>>Цитирую себя "не все ведь к С++ сводится"

S>>Gnu Compiler Collection...

I>Я все время думал, что gcc это gnu c++


C, C++, Objective-C, Fortran, Ada, Go, and D.
Re[6]: чем заменить задачу по развороту списка
От: Тёмчик Австралия жж
Дата: 06.10.20 15:24
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>>>Сколько дней? С учётом входных данных, например таких: длина числа не более 1024 знака. Длина выражения не более 10 гигабайт. Ну, а что? В условиях про формат ничего не сказано.

Тё>>Стек ведь необязательно держать в памяти. Можно завести в файле, и читать произвольный инпут. Сложность линейная.

BFE>Ага. И всё это расписать прямо на доске.


Тё>>Вот что делать с арифметической операцией над двумя числами в 1024 знака, это отдельная тема, к задаче не относящаяся.

BFE>Интересные новости про условия задачи!


Так ты сам усложнил задачу! В исходном сообщении было 2+2 и 2+2*3. Для этого достаточно встроенных операций и памяти под стек.
Re[9]: чем заменить задачу по развороту списка
От: B0FEE664  
Дата: 06.10.20 15:26
Оценка:
Здравствуйте, sergey2b, Вы писали:

BFE>>>>Числа только в десятичной системе исчисления?

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

Без поддержки деления и чисел с плавающей точкой?
Нужна поддержка экспоненциальной формы для целых чисел?

BFE>>Почему нет поддержки троичной системы?

S>потому что я ее не знаю

А чего там знать-то: 0,1,2,10,11,12,20,21,22,100,101,... ?
И каждый день — без права на ошибку...
Re[9]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 15:34
Оценка: 5 (1)
Здравствуйте, Skorodum, Вы писали:

S>Замена умножения на сдвиг это разве оптимизация для стандартных CPU, компиляторов и С/С++? Я еще лет 10 назад пробовал разные варианты just for fun и выходило примерно шило на мыло


Помнится, во времена MS-DOS и 16-битных 80x86, был такой Watcom C Compiler, который считался очень крутым в плане кодогенерации. Так вот, он любил умножение на константу в виде последовательности сдвигов и сложений расписивать. Бывало, на полстраницы ассемблерного текста развернется. У древних x86 действительно был медленный умножатор, не то, что теперь.
Re[7]: чем заменить задачу по развороту списка
От: B0FEE664  
Дата: 06.10.20 15:36
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

BFE>>Ага. И всё это расписать прямо на доске.


Тё>>>Вот что делать с арифметической операцией над двумя числами в 1024 знака, это отдельная тема, к задаче не относящаяся.

BFE>>Интересные новости про условия задачи!
Тё>Так ты сам усложнил задачу!
Я? А вы предполагаете, что числа в выражении могут состоять только из одной цифры?

Тё>В исходном сообщении было 2+2 и 2+2*3. Для этого достаточно встроенных операций и памяти под стек.

В исходном сообщении было "2+2", "2*2", "2+3*2". Для этого вообще не нужно никаких операций кроме сравнения:

if ( expression == "2+2" ) printf("4");
if ( expression == "2*2" ) printf("4");
if ( expression == "2+3*2" ) printf("8");

В этот раз я ничего не усложнил?
И каждый день — без права на ошибку...
Re[8]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 15:38
Оценка:
Здравствуйте, alzt, Вы писали:

A>Мозг у людей вообще очень часто выключается. Это обычная эволюционная адаптация — глюкозу надо экономить.

A>Но человек, который не напрягает свой мозг, мне на работе не нужен. Человек, который не может это сделать даже на собеседовании — биомусор. Можно нагрузить его какой-то несложной работой, чтобы не повышать преступность, но мне кажется, сразу в биореактор.

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

Только тут важно учитывать тот момент, что иные кандидаты иные конфеты ни за что жрать не станут.
Re[9]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 15:40
Оценка:
Здравствуйте, a7d3, Вы писали:

A>Это не работает. Потому что хороший специалист не станет тренироваться решать задачки на собеседованиях, а тот человек, который работать не умеет и ничего из себя не представляет — будет смотреться замечательно на фоне всех остальных. Поскольку у него выбора иного нету.


Ну с другой стороны, я вот список, напремер, разверну и даже отсортирую. Потому, что я и в боевом коде так иногда делаю.
Re[5]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 15:45
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Интересно, почему мониторы были 80*25, а не 64*32 или 128*32.... Сдвиг вроде быстрее.


Потому, что в перфокарте было 80 символов, а 24 было разумным компромисом между удобством использование и ценой изделия. Почему на PC 24 превратилось в 25, я не знаю, но предполагаю потому, что 25 — это почти 24, и при этом хорошо согласуется с телевизионным стандартом по числу строк.
Re[5]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 15:49
Оценка:
Здравствуйте, xarcass, Вы писали:

X>Кто в своей повседневной работе использовал разворот односвязного списка — пусть первый бросит в меня камень.


Я использовал. Подставляй голову.

P.S. Я даже умудрился в повседневной работе использовать функцию, которая переставляет местами две "половины" массива разного размера, используя O(1) дополнительной памяти и за время O(n):

[AAAAA][BBBBBBBBBBBBBB] -> [BBBBBBBBBBBBBB][AAAAA]
Re[6]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 15:51
Оценка: +1
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>При объединении пары списков один из них нужно развернуть.


Да вообще, если читаешь откуда-нибудь односвязанный список, то проще построить его задом наперед, а потом развернуть.
Re[10]: чем заменить задачу по развороту списка
От: sergey2b ЮАР  
Дата: 06.10.20 15:55
Оценка:
Здравствуйте, B0FEE664, Вы писали:

это же тест на один час а не курсовая работа
Re[7]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 15:58
Оценка: +1
Здравствуйте, Gradiens, Вы писали:

G>неплохо, если задача сразу принадлежит обеим категориям. Пример: найти все вхождения подстроки в строке.


А тебе как больше понравится, strstr в цикле, или алгоритм Морисса-Пратта на пальцах объяснить?

P.S. Того, кто применил бы алгоритм Морисса-Пратта в маловажных по скорости задачах в боевом коде, я бы убил на месте
Re[5]: чем заменить задачу по развороту списка
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.20 16:00
Оценка:
Здравствуйте, Gradiens, Вы писали:

G>Ну, конечно, сдвиг много эффективнее. Если не ошибаюсь, он вообще за один такт выполняется.


А за сколько тактов выполняется умножение на современном Пентиуме?
Re[6]: чем заменить задачу по развороту списка
От: Gradiens  
Дата: 06.10.20 17:17
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Gradiens, Вы писали:


G>>Ну, конечно, сдвиг много эффективнее. Если не ошибаюсь, он вообще за один такт выполняется.


Pzz>А за сколько тактов выполняется умножение на современном Пентиуме?


Вот тут https://www.agner.org/optimize/instruction_tables.pdf пишут, что 1-7 в зависимости от процессора.
Re: чем заменить задачу по развороту списка
От: PM  
Дата: 06.10.20 17:52
Оценка:
Здравствуйте, sergey2b, Вы писали:

Адептам разворота списка пора переходить в следующее измерение — задавать повернуть квадратную матрицу на угол кратный 90° inplace, без использования дополнительной памяти.

Или оставаться в 1D, но двигаться дальше — циклический сдвиг массива на k N позиций влево или вправо, само собой, тоже inplace.
Re[7]: чем заменить задачу по развороту списка
От: PM  
Дата: 06.10.20 17:59
Оценка:
Здравствуйте, Pzz, Вы писали:


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


В таком случае, где у дождевого червяка списка голова, а где хвост — это всего лишь условность, зависящая от направления движения.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.