Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Алгоритмы и теория программирования


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

solowey
Статус: Студент
Рейтинг: 363
∙ повысить рейтинг »
SAW
Статус: 6-й класс
Рейтинг: 114
∙ повысить рейтинг »
zdwork
Статус: 1-й класс
Рейтинг: 111
∙ повысить рейтинг »

∙ Алгоритмы и теория программирования

Номер выпуска:220
Дата выхода:19.02.2019, 23:15
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:26 / 11
Вопросов / ответов:3 / 5

Консультация # 92695: Здравствуйте уважаемые эксперты. Не знаю куда адресовать этот вопрос и по этому пишу вам. Столкнулся с проблемой, т.е. нужно выбрать язык и компилятор, OS не имеет значения, лиш бы код программы выполнялся максимально быстро. Программа будет много считать, т.е. циклы и математические операторы, операторы сравнения должны выполнялся макс...
Консультация # 134499: Уважаемые эксперты! Помогите пожалуйста составить алгоритм записи 5 байт в массив памяти 512 байт (), так чтобы записывались по циклу разные участки памяти (это нужно для продления ресурса памяти, т. к. число перезаписей ограничено) Наверное нужно писать еще 6й байт - адрес текущего блока или какую-то комбинацию, так чтобы при считывании массив...
Консультация # 178749: Доброго времени суток, Увожаемуы Эксперты. Пишу Вам дабы сыскать помощи в следующем задании: предмет называется Теория автоматов. Задали курсовой проэкт на тему "Управляющий автомат операционного устройства реализующего команды XCHG и AND". Но так как я учусь заочно, для меня этот предмет представляет собой темные-темные дебри непроходимы...

Консультация # 92695:

Здравствуйте уважаемые эксперты.
Не знаю куда адресовать этот вопрос и по этому пишу вам.
Столкнулся с проблемой, т.е. нужно выбрать язык и компилятор, OS не имеет значения, лиш бы код программы выполнялся максимально быстро.
Программа будет много считать, т.е. циклы и математические операторы, операторы сравнения должны выполнялся максимально быстро.
А может быть скорость выполнения одного и того же алгоритма (к примеру написанного на С++) в разных OS (например Win, *nix, *BSD) тоже отличается. Где и в какую сторону?

Заранее благодарен.

Дата отправки: 24.06.2007, 14:28
Вопрос задал: Yarking
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Gromoff Oleg:

Здравствуйте, Yarking!
Код программы будет выполняться маскимально быстро, если критичные участки кода Вы напишите на ассемблере. Правда, если у Вас много вычислений с плавающей точкой, придется писать для FPU. Неплохой вариант писать на C/C++, но нельзя сказать, что этот язык "заточен" под математику.

Насчет скорости выполнения одного и того же алгоритма под разными ОС склоняюсь в сторону того, что она если и отличается, то весьма незначительно. Если Ваш код будет максимально чистым, да еще и с ассемблерными вставками, выполняться он будет максимально приближенно по скорости в разных ОС. Более того, есть же кроссплатформенные компиляторы - GNU GCC, например, всяческие варианты ассемблеров.

Возможно, Ваши вычисления также имеет смысл разделить на несколько потоков или нитей (в терминологии Windows).

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

Консультировал: Gromoff Oleg
Дата отправки: 24.06.2007, 15:38
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует NiGHT:

Здравствуйте, Yarking!

Хотел высказать свое мнение. Ассемблер это хорошо, но далеко не всё.

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

Кроме того выбор компилятора дело интересное и ассемблер тут лидер т.к. там преобразование кода в машинный идет 1 к 1. Это максимум скорости, но это и максимум кода. Для простой счетной задачи Вы рискуете получить программу в десятки тысяч строк кода!, что не есть хорошо. Это будет быстро, но Вам это писать и отлаживать самому. Поэтому тут придется скорее отойти в пользу более высокоуровневого языка. И тут опять же будет выбор. Есть язык близкий к ассемблеру это C++ или более продвинутый в вычистлительном плане Фортран? Первый более близок к машине, например если Вам надо будет "вливаться" в ОС и взаимодействовать с железом, но в вычислительных задачах Фортран лучше и проблем будет меньше при тех же скоростях, его алгоритмы вычислений оттачивались годами, а там Вам их самому придумывать. (Пример, я недавно писал вычислителную задачу. Выбрал Visula С т.к. надо было использовать OpenGL. Но считать на нем это жуть, возникла банальная проблема: С++ не отслеживает перепо лнение типа, вот сичитаю, получаю "как бы корректный" результат, а на всамом деле там уже число на на несколько порядков выше должно быть! Заморочка, а тот же Паскаль такое отслеживает).

Кроме того, алгоритм написанный на разных языках, как правило, тоже различный. Поясню, дело в том что алгоритмы пишутся не сразу. Их так же надо проектировать и отлаживать, где то эксперементировать и исследовать (Примечание: не путайте алгоритм с кодом, кто с этим сталкивался поймет). Но в разных языках это тоже по разному. Я пока не говорю о "заточке" под конкретный компилятор. Дело в том, что отладить алгоритм на том же ассемблере очень сложно, там сотни строк кода. Ненаглядно и много переделывать. А вот в простом Паскале отладка алгоритмов идет намнооооого проще. Вобще это самый хороший для этих целей язык.

Интересный пример: Встречал одного человека, который занимался счетными задачами по физике. Он писал алгоритм на Паскале и отлаживал. Но паскаль "тормоз" в плане счета. Поэтому он перебивал готовый алгоритм на С++. Это довольно простое занятие, но опять же на выходе не самое лучшее, хоть и быстрее. Поэтому потом он компелировал и открывал программу дизасемблером и правил некоторые критичные места. Тут и получалась оптимальная программа. Может это Вам подойдет.

Я тут файлик прилагаю, это интересная статья по теме.

Кроме того если задача чисто счетная, то можно обратить внимание на теорию паралельных вычислений (сразу на нескольких ПК). Тоже большой прирост скорости можно получить. (см http://parallel.ru/)

Консультировал: NiGHT
Дата отправки: 25.06.2007, 23:11
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 134499:

Уважаемые эксперты!
Помогите пожалуйста составить алгоритм записи 5 байт в массив памяти 512 байт (), так чтобы записывались по циклу разные участки памяти (это нужно для продления ресурса памяти, т. к. число перезаписей ограничено) Наверное нужно писать еще 6й байт - адрес текущего блока или какую-то комбинацию, так чтобы при считывании массива точно определить какие 5 байт были записаны последними. Заранее спасибо.

Дата отправки: 28.04.2008, 12:25
Вопрос задал: Ляудинскайте Юлианна
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Гнедов Андрей:

Здравствуйте, Ляудинскайте Юлианна!
Насколько я понял, Вы пишете 5 байтов в микросхему, которая имеет ограничения по числу циклов стирание/запись, но практически не имеет ограничений на чтение.
Если Вам нужно хранить всего 5 байтов, а у Вас их 512, нужно всю память разделить на блоки, напрмер по 8 байт - 3 байта на номер записи и 5 байт на содержимое. Всего 64 блока, номера 0-63. Смещение блока - номер*8.

При инициализации: вся память записывается нулевыми данными с нужными номерами. Запись производится последовательно, сначала в 0-й - номер 0, потом в 1-й - номер 1, и т.д. После 63-го - опять в 0-й.

При записи ищется последовательная пара номеров, чтобы следующий был меньше предыдущего на 64 ( с учетом кольца, что после 63-его - снова 0-й, а после номера 0xFFFFFF - 0x000000). Тогда второй в этой паре - самый старый, его переписываем.

При чтении: ищется блок с максимальным номером (с учетом, что после номера 0xFFFFFF идет 0x000000) , он и есть последний.

Можно ускорить работу, если при поиске максимального номера просматривать не все 64 записи, а искать переход делением пополам.

Консультировал: Гнедов Андрей
Дата отправки: 28.04.2008, 18:09
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Errandir:

Здравствуйте, Юлианна!

Я полностью согласен с Андреем, но хочу заметить, что лучше делить на блоки по 6, так как это улучшит коэффициент использования памяти на 20.5%.

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

для 8-и байтового блока: ((64*5)/1)/512=62.5%
для 6-и байтового блока: ((85*5)/1)/512=83.0%

Приложение:

Консультировал: Errandir
Дата отправки: 28.04.2008, 20:40
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 178749:

Доброго времени суток, Увожаемуы Эксперты. Пишу Вам дабы сыскать помощи в следующем задании: предмет называется Теория автоматов. Задали курсовой проэкт на тему "Управляющий автомат операционного устройства реализующего команды XCHG и AND". Но так как я учусь заочно, для меня этот предмет представляет собой темные-темные дебри непроходимых лесов, попросту говоря не понимаю чего от меня хотят =) Просмотрел аналогичные работы и ужаснулся, курсовой включает в себя Схемы, графы и различные способы кодирования состояний. Если кто-либо представляет себе о чем предмет и что с меня хотят спросить, объясните, пожалуйста, суть задания и если можно источники с дополнительной информацией приведите, если Вас не затруднит. Спасибо за помощь.

Дата отправки: 30.05.2010, 15:01
Вопрос задал: Селеверстов Антон Юрьевич
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Verena:

Здравствуйте, Селеверстов Антон Юрьевич.
Не знаю точно, из одной ли области это понятия, но подозреваю, что да. Конечные автоматы (общее описание есть в Википедии) обычно применяются для лексического анализа. В частности, я применяла их для разбора математического выражения для калькулятора. Создание такого автомата - дело трудоёмкое, потому что надо просчитать все состояния и предусмотреть все возможные переходы между ними. Обычно в программе автомат задаётся в виде константной матрицы, для его использования нужны две функции: функция вычисления нового состояния и функция перехода в новое состояние. Не знаю, насколько это будет понятно без контекста, но в приложении отрывок из моего калькулятора, где как раз применяется конечный автомат.
С практической точки зрения неплохо написано здесь.
С теоретической - здесь.
Вот ещё пара слов о теории автоматов, и введение в теорию автоматов.
Надеюсь, это чем-то Вам поможет.
Удачи!

Приложение:

Консультировал: Verena
Дата отправки: 03.06.2010, 21:05
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное