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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Чемпионы рейтинга экспертов в этой рассылке

Асмик Александровна
Статус: Академик
Рейтинг: 7924
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2634
∙ повысить рейтинг »
Роман Селиверстов
Статус: Академик
Рейтинг: 2385
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Алгоритмы и теория программирования

Номер выпуска:136
Дата выхода:07.05.2011, 19:00
Администратор рассылки:lamed (Академик)
Подписчиков / экспертов:361 / 164
Вопросов / ответов:3 / 4

Вопрос № 22496: здрасьти! мне тут задали контрольную и там значит такое задание: заданны два числа (n != 0, m != 0), надо найти все их общие делители используя структуру данныу "очередь". как это сделать я чего-то ума не приложу чего от меня хотят...


Вопрос № 167279: Добрый день уважаемые эксперты. Стоит задача оптимизации алгоритма умножения матриц по времени на однопроцесорном компьютере. Подскажите пожалуйста как оптимизировать ниже приведённый алгоритм что бы он выполнялся быстрее. Заранее благодарен. Вопрос № 48563: Здравствуйте ув. эксперты. Помогите разобраться в таком вопросе. У нас с соседом возник спор по поводу языка Бейсик. Он говорит, старый Бейсик и новый Визуал Бейсик это два разных языка, а я говорю, что это только компиляторы разные, а язык один ...

Вопрос № 22496:

здрасьти!

мне тут задали контрольную и там значит такое задание: заданны два числа (n != 0, m != 0), надо найти все их общие делители используя структуру данныу "очередь". как это сделать я чего-то ума не приложу чего от меня хотят?

заранее спасибо

Отправлен: 22.06.2005, 07:43
Вопрос задал: ОчХочуНаучиться
Всего ответов: 1
Страница вопроса »


Отвечает Ayl :
Здравствуйте, ОчХочуНаучиться!

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

{ n <= m }
for i := 1 to round (sqrt (n)) do
if (n mod i) = 0 then AddInQueue (i);
AddInQueue (n);

while not QueueEmpty do
begin
i := GetFromQueue;
if (m mod i) = 0 then writeln (\'Общий делитель: \', i);
end;

Соответственно, процедура AddInQueue добавляет заданный элемент в очередь, функция QueueEmpty возвращает TRUE если очередь пуста и FALSE в противном случае, функция GetFromQueue выбирает первый элемент из очереди (удаляя его из очереди, естесственно).

Ответ отправил: Ayl
Ответ отправлен: 22.06.2005, 11:32

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 54282 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 167279:

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

    Стандартный метод умножения двух матриц:

    int a[n][n],b[n][n],c[n][n]
    for ( int i=0; i<n; i++)
    for ( int j=0; j<n; j++)
    {
    c[i][j]=0;
    for ( int k=0; k<n; k++)
    c[i][j]=a[i][k]*b[k][j];
    }

    Отправлен: 14.05.2009, 11:32
    Вопрос задал: Макс Коваленко Юрьевич
    Всего ответов: 1
    Страница вопроса »


    Отвечает Лангваген Сергей Евгеньевич (Профессор) :
    Здравствуйте, Макс Коваленко Юрьевич!

    При умножении квадратных матриц обычным способом для каждого из N^2 элементов результирующей матрицы нужно выполнить N умножений и N операций сложения.
    Таким образом, время растет как N^3, что соответствует трем вложенным циклам в программе. Как известно, матрицы можно также умножать поблочно.
    Это использует рекурсивный алгоритм Штрассена быстрого умножения, для которго время растет как N^2.81.
    Выигрыш здеесь возможен только для больших матриц.

    При обычном умножении матриц заметную роль играет порядок, в котором элементы матриц-сомножителей выбираются из памяти.
    Если для суммы Cij = ∑k Aik*Bkj элементы массивов Aik и Bkj, k=0..N-1, расположены в памяти подряд,
    как утверждают , произведение матриц вычисляется быстрее в разы.
    Поэтому перед вычислением второй сомножитель выгодно транспонировать.

    Сократить время и требуемый объем памяти можно также, если использовать свойства перемножаемых матриц. Существуют специалные способы представления данных и
    и алгоритмы для умножения разреженных, симметричных, ленточных матриц. Но проще всего воспользоваться готовой библиотекой для матричных и векторных вычислений, например BLAS.
    Россия, Московская обл.
    Адрес сайта: http://mhyst.narod.ru
    ICQ # 474225299

    Ответ отправил: Лангваген Сергей Евгеньевич (Профессор)
    Ответ отправлен: 14.05.2009, 16:48

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 249182 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 48563:

    Здравствуйте ув. эксперты.
    Помогите разобраться в таком вопросе. У нас с соседом возник спор по поводу языка Бейсик. Он говорит, старый Бейсик и новый Визуал Бейсик это два разных языка, а я говорю, что это только компиляторы разные, а язык один – Бейсик. Рассудите, кто из нас прав.
    Спасибо.

    Отправлен: 08.07.2006, 20:05
    Вопрос задал: Кохан Владимир Иванович
    Всего ответов: 2
    Страница вопроса »


    Отвечает Ерёмин А.А. (Мастер-Эксперт) :
    Здравствуйте, Кохан Владимир Иванович!
    Язык один и тот же, просто среды разные - QBasic (или простой Basic) - это текстовый (DOS) режим, а Visual Basic - это среда объектно-ориентированного программирования (ООП). Язык по синтаксису один и тот же. Аналогично, Delphi и Pascal работают на одном и том же языке - Pascal, хотя в Delphi это Object Pascal, т.е. есть небольшое отличие. В Basic и VB тоже есть небольшие различия, но они несущественны. Россия, Тула
    Адрес сайта: Портал программистов Delphi.int.ru

    -----
    Нет правила без исключений. Правило без исключений - исключение из правил.

    Ответ отправил: Ерёмин А.А. (Мастер-Эксперт)
    Ответ отправлен: 08.07.2006, 21:08

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 106089 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Ayl :
    Здравствуйте, Кохан Владимир Иванович!

    А я не согласен с Андреем. Исходный Бейсик и его ранние разновидности очень сильно отличаются от современного. Например, полностью изменен принцип работы с подпрограммами - попробуйте в ранних версиях передать параметры в подпрограмму, не было там этого механизма. Про работу с объектами я уже и не говорю. Современный Бейсик даже по своему стилю стал ближе к алголоподобным языкам: отказ от номеров строк, использование конструкций для ветвления, циклов, выборки и т.п. Они стали абсолютно другими.
    Но я согласен в том, что язык все еще остается Бейсиком. Просто гораздо более развитым. Так же, как человек Древнего мира, и современный - это генетически один и тот же вид, просто на разных уровнях своего развития.

    Ответ отправил: Ayl
    Ответ отправлен: 10.07.2006, 11:45

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 106274 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    подать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное