powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка с дробями.
131 сообщений из 131, показаны все 6 страниц
Задачка с дробями.
    #38130653
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано N (натуральное). Вывести список рациональных дробей
в неубывающем порядке где числитель и знаменатель - целые от 1 до N.
И числитель не больше знаменателя (т.е. результат дроби меньше 1.0)

Вход:
5
Выход:
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130664
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл дописать "БЫСТРО!"
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130741
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дроби также должны быть несократимыми, судя по примеру? O(N 2 ) понятно как (хранить массив "следующих" числителей и на каждом шаге находить соответствующий минимальной дроби и увеличивать его), но, кажется, можно быстрее.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130744
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Дробь 2/4 выпадает из списка т.к. это суть 1/2.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130749
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЗабыл дописать "БЫСТРО!"
Это олимпиадная. Но в данном форуме мы можем медитировать над ней
достаточно долго. :)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130754
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

какие ограничения на память и скорость?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130767
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По учебнику N<=255. Но я решил снять ограничение для этого форума.
По остальному - задачки писались для учебника в TurboPascal 7.0.
Память и всё остальное - соотвественно можете выбрать исходя
из этих сведений.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130921
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, самое "сложное" - это проверка сократимости дробей. По сравнению с этим, все остальное (построение дробей, расположение их в неубывающем порядке) - требует намного меньше затрат ресурсов.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130935
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMНа самом деле, самое "сложное" - это проверка сократимости дробей. По сравнению с этим, все остальное (построение дробей, расположение их в неубывающем порядке) - требует намного меньше затрат ресурсов.
Да. Я думал об этом. Если расположить дроби
квадратной матрицей (там верхняя половина выше диагонали выходит)
то часть дробей надо будет вычеркнуть из проверки.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38130961
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я подумал так - строим матрицу разложения чисел на простые множители (даже необязательно вычислять степень сомножителя, достаточно признака того, что существует хотя бы один такой в числе), по ней легко затем находятся несократимые пары. Затем перебираем показатели числитель/знаменатель в порядке возрастания величины дроби, при этом выводя только несократимые.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131090
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже думал о разложении. Но недавно мне подсказали что для решения данной задачи
(сокращение дроби) достаточно алгоритма Евклида для расчета НОД.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131123
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если я правильно понял идею 13851216
то сокращать дроби не придется, т.к. все одинаковые по значению будут найдены последовательно, и можно указать самую простую из них (с наименьшим знаменателем).
тот алгоритм требует O(N) памяти на всё про всё и порядка O(N) времени на одну дробь (каждый раз поиск минимальной дроби по всем делителям).
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131156
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ тоже думал о разложении. Но недавно мне подсказали что для решения данной задачи
(сокращение дроби) достаточно алгоритма Евклида для расчета НОД.угу.. кмк, если для двух чисел - числителя и знаменателя, существует даже не НОД, а просто общий делитель, то эту дробь надо выкидывать из списка результатов.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.maytonЯ тоже думал о разложении. Но недавно мне подсказали что для решения данной задачи
(сокращение дроби) достаточно алгоритма Евклида для расчета НОД.угу.. кмк, если для двух чисел - числителя и знаменателя, существует даже не НОД, а просто общий делитель, то эту дробь надо выкидывать из списка результатов.
Это смотря как обходить. Я искал решение класса "конечный автомат". Чтобы обходя
матрицу дробей выводит их в неубывающем порядке. Тоесть без доп. массивов
и сорт. структур. Но пока чет не вышло.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131190
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДано N (натуральное). Вывести список рациональных дробей
в неубывающем порядке где числитель и знаменатель - целые от 1 до N.
И числитель не больше знаменателя (т.е. результат дроби меньше 1.0)

Вход:
5
Выход:
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5о. тут ленивые вычисления помогут.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131200
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТоесть без доп. массивов
и сорт. структур.где ты это написал?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131203
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonТоесть без доп. массивов
и сорт. структур.где ты это написал?
Зачем я буду ограничивать полёт чужой мысли? Я привел постановку олимпиадной задачи. Как есть.
А то что я искал это - отдельная тема. Можно искать а можно и забить. Но "ленивое решение"
мне еще интреснее будет. Жду...
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131219
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
import Data.Ratio

main = putStr (show result)

result = foldl merge [] (rows 5)

rats n k = map ((%) k) [n, n-1..k+1]

rows n = map (rats n) [1..n]

merge [] s2 = s2
merge s1 [] = s1
merge (s1:s1s) (s2:s2s) 
    | s1 < s2   = s1 : (merge s1s      (s2:s2s))
    | s1 > s2   = s2 : (merge (s1:s1s) s2s)
    | otherwise = s1 : (merge s1s      s2s)


почему на форуме нету хацкельного тега срц? (
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131223
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЖду... done.

макс необходимая использумая паять(из-за сборщика) = паять под текущий результат + память под n чисел(т.е. для каждого числителя от 1-го до n). благодаря ленивости, под все знаменатели память выделять не нужно(достаточно по одному для каждого числителя).

т.е. используемая память - 2*n*sizeof(Rational)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131225
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN, а в каком виде выводит? Просто из-за отсутствия форматирования со слешом типа "%i/%i" непонятно.
И что делает пакет Data.Ratio ?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131231
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaN, а в каком виде выводит? Просто из-за отсутствия форматирования со слешом типа "%i/%i" непонятно.
И что делает пакет Data.Ratio ?тип данных - рациональные числа. с лева от % - числитель, справа знаменатель.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131241
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про [ src=haskel ] я подниму вопрос в модераторском форуме.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131254
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПро [ src=haskel ] я подниму вопрос в модераторском форуме.я пошутил.
в хаскеле нечего подсвечивать.
там кроме ключевых слов "modul, import, let, where, do" - нечего подсвечивать.

исходник хаскеля с подсветкой синтаксиса - не отличается от обычного текста ))
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131262
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я вспомнил. Я читал эту тему у Душкина. Но меня особо поразило что
Хаскель исходник - это не исходник с каментами а текст с вкраплениями
исходников. Это конечно другим ЯП не дано.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131275
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто конечно другим ЯП не дано.Что значит "не дано"?
Литературное программирование Дональд Кнут для чего делал?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131280
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, прошу прощения. Не читал. Про литературное.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131299
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonBasil A. Sidorov, прошу прощения. Не читал. Про литературное.тех в таком стиле был написан кнутом.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131300
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton- это не исходник с каментами а текст с вкраплениями
исходников.все гораздо проще.

хаскель - сплошные дефенишины.

слева имя, справа выражение. подсвечивать просто нечего.
а Душкин, просто слишком уж превозносит этот хацкель.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131305
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы. Мне кроме Душкина было больше некого читать.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131320
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public static IEnumerable<Tuple<int, int>> M(int n)
        {
            Func<int, int, int> gcp = (a, b) => 
            {
                while (b != 0)
                    b = a % (a = b);
                return a;
            };
            Func<int, int, Tuple<int, int>> f = (s1, s2) =>
                {
                    var t = gcp(s1, s2);
                    return Tuple.Create(s1 / t, s2 / t);
                };
            
            var src = Enumerable.Range(1, n);
            var res = (from s1 in src
                       from s2 in src
                       where s2 > s1
                       select f(s1, s2))
                      .Distinct();
            return res;
        }
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131333
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonBasil A. Sidorov, прошу прощения. Не читал. Про литературное.Пишем, напускаем препроцессор и получаем в одном файле исходный текст программы на паскале :), а в другом - документацию на программу. Второй файл предполагалось скармливать TeX-у :)

P.S. Тех, кто собирается фыркать на "препроцессор", "два файла" и прочие детали реализации, сразу предупрежу, что "не на то дерево лаете".
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131390
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не собирался я фыркать.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131413
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovmaytonBasil A. Sidorov, прошу прощения. Не читал. Про литературное.Пишем, напускаем препроцессор и получаем в одном файле исходный текст программы на паскале :), а в другом - документацию на программу. Второй файл предполагалось скармливать TeX-у :)

P.S. Тех, кто собирается фыркать на "препроцессор", "два файла" и прочие детали реализации, сразу предупрежу, что "не на то дерево лаете".Это Вы сейчас с кем разговариваете?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131498
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAndreTMНа самом деле, самое "сложное" - это проверка сократимости дробей. По сравнению с этим, все остальное (построение дробей, расположение их в неубывающем порядке) - требует намного меньше затрат ресурсов.
Да. Я думал об этом. Если расположить дроби
квадратной матрицей (там верхняя половина выше диагонали выходит)
то часть дробей надо будет вычеркнуть из проверки.

Если тупо в лоб ,
то мартица, для экономии памяти битовая.
пройтись по номерам строк и столбцов, взвести в 1 пересечения
где остаток от деления не равен 0 при наступании на диагональ перейти на следующую итерацию.
Напечатать в виде дроби стороку и столбец матрицы со значением элемента равным 1.
приблизительно так.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131540
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Я только хитрее думал. Уж коли мы всё равно сортируем и выводим в консоль
неубывающую последовательность. То дубликаты такие как 1/2 и 2/4 при выводе
будут идти рядышком как

.
1/2
1/2
.

И их можно дропать непосредственно перед выводом.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131546
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Дубликаты( сокращения 2/4 3/6 4/12 ) уйдут сами при проверке остатка от деления.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131553
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР, ок. Убедил. Значит создаём треугольную матрицу единиц. Потом
в 1 проход проходим и сбрасываем в ноль все ячейки где x%y==0

А во второй проход?.....
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131568
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,


В принципе можно сразу печатать дроби во вложенном цикле без матриц
если остаток от деления не равен 0.
когда сумма счтечиков циклов( внешнего и внутреннего) равна ширине матрицы
перепрыгиваем на следующую итерацию( достигли диагонали).
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131573
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую нарисовать для N=6

Получается довольна запутано. И нет яркой последовательности внутри матрицы

Код: sql
1.
2.
3.
4.
5.
6.
7.
   1    2    3    4    5    6
1     1/2  1/3  1/4  1/5  1/6
2          2/3  2/4  2/5  2/6
3               3/4  3/5  3/6
4                    4/5  4/6
5                         5/6
6



После фильтрации дубликатов
Код: sql
1.
2.
3.
4.
5.
6.
7.
   1    2    3    4    5    6
1     1/2  1/3  1/4  1/5  1/6
2          2/3  ---  2/5  ---
3               3/4  3/5  ---
4                    4/5  ---
5                         5/6
6
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131579
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Мечесли я правильно понял идею 13851216
то сокращать дроби не придется, т.к. все одинаковые по значению будут найдены последовательно, и можно указать самую простую из них (с наименьшим знаменателем).
тот алгоритм требует O(N) памяти на всё про всё и порядка O(N) времени на одну дробь (каждый раз поиск минимальной дроби по всем делителям).Почти. Код примерно такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
int *numerators = new int[N];
for(int i=0; i<N; ++i) numerators[i] = 1;

while(true){
  int min = 0;
  for(int i=0; i<N; ++i){
    if(numerators[i]*(min+1) < numerators[min]*(i+1)) min = i;
  }
  if(numerators[min] == (min+1)) break;

  std::cout << numerators[min] << '/' << (min+1) << std::endl;

  while(GCD(numerators[min], min+1)!=1 && numerators[min]!=(min+1)) ++numerators[min];
}

delete[] numerators;

Но первый внутренний цикл - O(N), внешний - O(N 2 ) или несущественно лучше, суммарно O(N 3 ). Кроме того, решение слишком уж "лобовое".
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131581
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionЯростный Мечесли я правильно понял идею 13851216
то сокращать дроби не придется, т.к. все одинаковые по значению будут найдены последовательно, и можно указать самую простую из них (с наименьшим знаменателем).
тот алгоритм требует O(N) памяти на всё про всё и порядка O(N) времени на одну дробь (каждый раз поиск минимальной дроби по всем делителям).Почти. Код примерно такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
int *numerators = new int[N];
for(int i=0; i<N; ++i) numerators[i] = 1;

while(true){
  int min = 0;
  for(int i=0; i<N; ++i){
    if(numerators[i]*(min+1) < numerators[min]*(i+1)) min = i;
  }
  if(numerators[min] == (min+1)) break;

  std::cout << numerators[min] << '/' << (min+1) << std::endl;

  while(GCD(numerators[min], min+1)!=1 && numerators[min]!=(min+1)) ++numerators[min];
}

delete[] numerators;


Но первый внутренний цикл - O(N), внешний - O(N 2 ) или несущественно лучше, суммарно O(N 3 ). Кроме того, решение слишком уж "лобовое".можно полный код программы, хочу протестить производительность.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131586
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо полагать GCD - это greatest common divisor.

( http://en.wikipedia.org/wiki/Euclidean_algorithm)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131587
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНадо полагать GCD - это greatest common divisor.

( http://en.wikipedia.org/wiki/Euclidean_algorithm)] http://en.wikipedia.org/wiki/Euclidean_algorithm) та я понял. просто предположил что существует полный исходник. не хотелось время тратить.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131594
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиск сокращаемых дробей в матрице не дает мне покоя. Для случая с N=256
она будет выглядеть примерно так если считать ее черно-белой биткартой.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131601
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоиск сокращаемых дробей в матрице не дает мне покоя. Для случая с N=256
она будет выглядеть примерно так если считать ее черно-белой биткартой.

ничего не понял. можешь пояснить картинку?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131602
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПопробую нарисовать для N=6

Получается довольна запутано. И нет яркой последовательности внутри матрицы

Код: sql
1.
2.
3.
4.
5.
6.
7.
   1    2    3    4    5    6
1     1/2  1/3  1/4  1/5  1/6
2          2/3  2/4  2/5  2/6
3               3/4  3/5  3/6
4                    4/5  4/6
5                         5/6
6



После фильтрации дубликатов
Код: sql
1.
2.
3.
4.
5.
6.
7.
   1    2    3    4    5    6
1     1/2  1/3  1/4  1/5  1/6
2          2/3  ---  2/5  ---
3               3/4  3/5  ---
4                    4/5  ---
5                         5/6
6



Лохонолся я с остатком от деления , не покрывает все варианты решения.
Но но намек на GCD , натолкнул на мысть сделать наоброт.
2/3 = 2*2/3*2 =4/6
Тоже самое для
3/4=3*3/3*4=9/12
4/5=16/25

проходя по циклу от меньшего к большему путем умножения числителя и знаменателя
на числитель в матрице отмечать фейковые дроби наперед.
вирианты которые в последствии выводит не нужно.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131605
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот самая плотная штрих-пунктирная прямая под углом 30 градусов
к горизонту это пикселы с координатами (1,2),(2,4),(3,6)...(n,2*n).
Я просто сделал матрицу более визуально наглядной.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131612
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу вот самая плотная штрих-пунктирная прямая под углом 30 градусов
к горизонту это пикселы с координатами (1,2),(2,4),(3,6)...(n,2*n).
Я просто сделал матрицу более визуально наглядной.

Они то как раз тебе и не нужны.
Потому что это скращаемые дроби.
Остаток от деления == 0 тебе покажет что это сокращаемая дробь.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38131614
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это и ежу понятно что не нужны.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132712
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN, maytonЭто Вы сейчас с кем разговариваете?Есть люди, которые неровно дышат на мои утверждения.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132727
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп! Брейк. Не надо ругаться. Давайте только по задаче.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132742
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда не понимаю :)
Тупо построил n^2/2 (треугольную) матрицу и получил все возможные варианты, проредил сократимое и отсортировал на месте.
Условие "быстро" не выполняется, но в исходной задаче его не было :)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132808
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, давай. Для себя я пытаюсь решить задачу где не будет
хранения полу-матрицы.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132880
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тестовые данные для n=256 приаттачу на всякий.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132902
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой код - некрасив. 70 сек для генерации n=2048.
Только для тестов. Поэтому хвастаться особо нечем.

Но есть мысль что функция z=x/y непрерывна на каком-то
множестве. И можно найти подъём или спуск по ней.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132919
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДля себя я пытаюсь решить задачу где не будет хранения полу-матрицы.Спускаемся от заданного значения к единице, если остаток по модулю текущего значения равен нулю - идём на следующий шаг, иначе - добавляем очередного кандидата в столбец числителей. Так мы получаем "несократимое при данном знаменателе". Уменьшаем знаменатель на единицу и переходим к следующему столбцу.
Начиная со второго столбца требуется дополнительная проверка, что (a/b) / (c/d) <> 1 "по всем предыдущим столбикам". Тривиально переписывается в a*d <> b*c.
Остаётся сортировка, которая будет основана на этом же сравнении. Не исключено, что эффективнее (по времени) будет "сортировать" во время проверки на сократимость.
Индексация, конечно, э-э-э ... Для педантов, в общем, но, вроде, сам алгоритм рабочий.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132922
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, пожалуй, с индексацией и сортировкой особых проблем не будет
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132925
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonBasil A. Sidorov, давай. Для себя я пытаюсь решить задачу где не будет
хранения полу-матрицы.а толку.
вот мое решение, в котором память расходуется линейно, не дает особых преимуществ, так как временная сложность растет квадратично, и даже при не большем n(для которого легко и матрицу построить), время на выполнение становится неприемлемым.

хотя, если стоит задача найти первую сотню элементов, для n = 1000000, то мое решение норм себя чувствует. так как памяти расходуется не много.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132932
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovХотя, пожалуй, с индексацией и сортировкой особых проблем не будет
Я не профилировал свой код но думаю что у меня просадка из-за использования
java.lang.BigInteger длинной арифметики. И компаратор также тормозит
из-за перерасчётов. Формула a*d <> b*c прекрасна. Но символьные расчёты
всё скушали. Так что эти 70 сек - фейк который надо списать на ненужный тип
данных. Тем более что знаменатель еще не вышел за диапазаон int64.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132954
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМой код - некрасив. 70 сек для генерации n=2048.
где твой код?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132961
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНо символьные расчёты всё скушали.Изначально ясно, что в этой задаче должна быть целая арифметика.
Вспоминаем школу и "переворот дробей" :)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132965
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonМой код - некрасив. 70 сек для генерации n=2048.
где твой код?
Да мне стыдно его показывать. Да и вообще он только для тестов. Чтобы
сгенерить тесткейсы. Или картинку эту нарисовать.

Ну вот пока за эталон возму код с хаскелем.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132974
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу вот пока за эталон возму код с хаскелем.не потепуй )
maytonДа мне стыдно его показывать
я же не постыдился.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132983
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

просто хотел сравнить. на моем компе, хаскельный код посчитал элементы для н = 2048 за 65 сек.

поэтому я выше и писал, что для 2048 экономить память смысла нет. а больше в моем коде приемуществ и нет.

нужно попробовать другой эксперимент. посчитать 1-ю сотню для н = 1000000.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132986
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNнужно попробовать другой эксперимент. посчитать 1-ю сотню для н = 1000000.за 30 сек посчитало.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38132990
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNZyK_BotaNнужно попробовать другой эксперимент. посчитать 1-ю сотню для н = 1000000.за 30 сек посчитало.но такая постановка задачи не интересна. все равно в числителе будут одни 1-ци.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133008
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNZyK_BotaNпропущено...
за 30 сек посчитало.но такая постановка задачи не интересна. все равно в числителе будут одни 1-ци.хотя, если поставить задачу первые 20000 элементов для н = 10000, то находит их за 10 сек.
но для современных компов построить матрицу размером 100 000 000, не такая уж и проблема, но все же решение требующее только 10000 элементов одновременно - гораздо лучше, а именно в 10000 раз
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133082
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно Rational - не мой а заимствованый из другой библиотечки.
Я допилил символьную арифметику. Логики здесь особой нету.
Компаратор, сорт-множество, и internal GCD делают 70% работы.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    
public static void main(String[] args) throws IOException {
        long begin = System.currentTimeMillis();
        int N=Integer.valueOf(args[0]);
        TreeSet<Rational> ts=new TreeSet<Rational>();
        for(int i=1;i<=N;i++){
            for(int j=1;j<=N;j++){
                if (i<j){
                    ts.add(new Rational(i,j));
                }
            }
        }
        String fullPath = ""+N+".txt";
        Writer w = new FileWriter(fullPath);
        for(Rational r : ts){
            w.write(r.toString());
            w.write("\n");
        }
        w.close();
        System.out.println("Wrote "+fullPath+", elapsed (sec) "+(System.currentTimeMillis()-begin)/1000);
    }
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133083
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133089
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСобственно Rational - не мой а заимствованый из другой библиотечки.
Я допилил символьную арифметику. Логики здесь особой нету.
Компаратор, сорт-множество, и internal GCD делают 70% работы.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    
public static void main(String[] args) throws IOException {
        long begin = System.currentTimeMillis();
        int N=Integer.valueOf(args[0]);
        TreeSet<Rational> ts=new TreeSet<Rational>();
        for(int i=1;i<=N;i++){
            for(int j=1;j<=N;j++){
                if (i<j){
                    ts.add(new Rational(i,j));
                }
            }
        }
        String fullPath = ""+N+".txt";
        Writer w = new FileWriter(fullPath);
        for(Rational r : ts){
            w.write(r.toString());
            w.write("\n");
        }
        w.close();
        System.out.println("Wrote "+fullPath+", elapsed (sec) "+(System.currentTimeMillis()-begin)/1000);
    }


а ты не пробовал адаптировать данное решение, под мной переделанную постановку задачи:

авторхотя, если поставить задачу первые 20000 элементов для н = 10000

я ее спецом под свое решение подогнал )
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133098
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNа ты не пробовал адаптировать данное решение, под мной переделанную постановку задачи:

я ее спецом под свое решение подогнал )
Я оценил. Я еще не занимался скоростной оптимизацией этой задачи на своей
библиотеке. Она слишком концептуальна. И прелесть рациональных чисел
в том что постановка в общем случае не дает тебе возможности подменить
их на double или привести к общему знаменателю в целых числах всё.

А для того чтоб понять твой исходник - мне надо или сломать себе мозг или заставить
тебя прокомментировать все строки. Хаскель штука хитрая и не на обывателя.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133108
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА для того чтоб понять твой исходник - мне надо или сломать себе мозг или заставить
тебя прокомментировать все строки.

ок

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
import Data.Ratio

main = putStr (show last10OfFirst20000)


--берем первых 20000 элементов, и отбрасываем первые 19990
last10OfFirst20000 = drop 19990 $ take 20000 _10000SortedRationals

-- строим отсортированную последовательность рациональных чисел, 
--с числителем к, и знаменателем от к+1 до н
rats n k = map ((%) k) [n, n-1..k+1]

-- строим н последовательностей, для каждого числителя от 1 до н
rows n = map (rats n) [1..n]

--берем 10000 отсортированных последовательностей,
--и мержим их в одну отсортированную последовательность без дубликатов.
_10000SortedRationals = foldl merge [] (rows 10000)

--функция принимает две отсортированных последовательности без дубликатов
--и возвращает смерженную отсортированную последовательность без дубликатов.
merge [] s2 = s2
merge s1 [] = s1
merge (s1:s1s) (s2:s2s) 
    | s1 < s2   = s1 : (merge s1s      (s2:s2s))
    | s1 > s2   = s2 : (merge (s1:s1s) s2s)
    | otherwise = s1 : (merge s1s      s2s)



если есть вопросы по конкретным строчкам или функциям - спрашивай.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133110
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

могу сделать такое же решение, только на си или джаве.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133114
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN, в отбрасывании 19990 есть какая-то хитрость?

Вообще весь код работает быстрее с отбрасыванием или нет?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133115
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNмогу сделать такое же решение, только на си или джаве.
Нет. Не надо.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133121
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaN, в отбрасывании 19990 есть какая-то хитрость?

Вообще весь код работает быстрее с отбрасыванием или нет?нет. не быстрее. меня просто интересуют последние числа.

первая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133122
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaNмогу сделать такое же решение, только на си или джаве.
Нет. Не надо.а я уже было начал. ну ладно
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133125
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonпропущено...

Нет. Не надо.а я уже было начал. ну ладно но не забываем про экономию памяти.

при отбрасывании, нам нужно не 20000 единиц под результат, а только 10.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133193
ZyK_BotaNтех в таком стиле был написан кнутомИ пряником?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133195
Это называется рядами... эээ... имени Склероза. Не помню, в общем, кого.
И строить можно примерно так:
начинаем с . Потом промеж любой пары, у которой сумма знаменателей не больше нашего максимума, вставляем дробь сумма числителей/сумма знаменателей:


.
При этом не надо проверять на несократимость. Может получиться быстрее.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133197
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смоляное ЧучелкоЭто называется рядами... эээ... имени Склероза. http://ru.wikipedia.org/wiki/Ряд_Фарея
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133229
tanglir,

Спасибо большое. Постараюсь запомнить.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133237
ZyK_BotaNпервая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается
Положим, всё это симметрично относительно 1/2, так что если первые 1/n, то и хвост будет состоять из ровно стольки ж (n-1)/n.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133348
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смоляное ЧучелкоZyK_BotaNпервая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается
Положим, всё это симметрично относительно 1/2, так что если первые 1/n, то и хвост будет состоять из ровно стольки ж (n-1)/n. я не правильно сказал. не половина дробей, а первые к чисел, где к - половина от н.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133356
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNСмоляное ЧучелкоZyK_BotaNпервая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается
Положим, всё это симметрично относительно 1/2, так что если первые 1/n, то и хвост будет состоять из ровно стольки ж (n-1)/n. я не правильно сказал. не половина дробей, а первые к чисел, где к - половина от н.
и заметь, для примера н = 5.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5


первые элементы действительно имеют числитель 1.
а вот последние два - уже разнятся знаменателями.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133401
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смоляное ЧучелкоЭто называется рядами... эээ... имени Склероза. Не помню, в общем, кого.
И строить можно примерно так:
начинаем с . Потом промеж любой пары, у которой сумма знаменателей не больше нашего максимума, вставляем дробь сумма числителей/сумма знаменателей:


.
При этом не надо проверять на несократимость. Может получиться быстрее.

классный метод.

вроде рулит не хило.

считает элементы для н = 2024 - мгновенно.

вот код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
main = putStr $ show result

result = insert (0, 1) (1, 1)

n = 2024

insert (a1,b1) (a2,b2) | b1 + b2 > n = []
                       | otherwise = (insert (a1,b1) (a3, b3)) ++ [(a3, b3)] ++ (insert (a3,b3) (a2, b2))
                        where a3 = a1 + a2
                              b3 = b1 + b2



правда сам вывод занимает время, поэтому для бенчмарка, первую строку можно поменять на:
Код: sql
1.
main = putStr $ show $ length result
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133421
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот мне интересно, как в ghc реализована операция конкатенации(есть ли какие-то оптимизации в зависимости от контекста вычислений).

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

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

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

Код: sql
1.
(insert (a1,b1) (a3, b3)) ++ (a3, b3) : (insert (a3,b3) (a2, b2))



а вот что делать с первой канкатенацией - не знаю.

но есть не нулевая вероятность, что оптимизатор компилятора ghc понимает что от него хотят, и делает список мутабельным, так как тот виден только локально.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133571
Если не лень, попробуй такой ещё вариант:
Код: sql
1.
2.
3.
4.
5.
insert (a1,b1) (a2,b2) | b1 + b2 > n = []
                       | b1 + b2 = n = [(a3, b3)]
                       | otherwise = (insert (a1,b1) (a3, b3)) ++ [(a3, b3)] ++ (insert (a3,b3) (a2, b2))
                        where a3 = a1 + a2
                              b3 = b1 + b2


Интересно, сильно ли повлияет.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133599
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNа вот мне интересно, как в ghc реализована операция конкатенации(есть ли какие-то оптимизации в зависимости от контекста вычислений).
вот что встретил на рсдн по данному вопросу:

автор
Ладно, тогда разберемся "аналитически". Ну, короче, как в принципе устроен ++? Ну, например, так. Я на Эрланге напишу, мне так проще, и в принципе один хрен.


%% Вот это - достаточно понятно.
concat( [], X ) -> X;

%% Как, собственно, и вот это
concat( [ H | T ], X ) ->
[ H | concat( T, X ) ].



Как у нас будет выполняться concat( A, B) в ленивом языке? Для простоты, пусть у нас ленивые только конструкторы списка, остальное неважно.

C = concat( A, B ) имеет сложность O(1)

Пробежка по результату приведет к дополнительному ленивому вызову concat, который будет возвращать копию элемента списка H для каждого элемента А, и будет стоить столько же для элементов B. То есть, пробежка по С будет чуть дороже, чем пробежка по А или Б. Однако, налицо неплохой потенциал для оптимизации в ghc — компилятор может избежать задействования хипа, если выведет last use для элементов C. Это уже кое-что, не так ли?

D = concat( concat( A, B ), B1 ) — само по себе тоже O(1), разумеется, это не интересно.

А пробежка по D... Два накладных вызова на len( A ), один — на len( A + B ) — len( A ), и ноль на len( B1 ). Та же картина по last use для ghc.

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

Смотрим второй вариант:
D = concat( B1, concat( A, B ) )

Имеем один накладной вызов при любой вложенности подобных операций конкатенации. То есть, квадратичности нет. Прикольно, не так ли?

Будем проверять теорию экспериментом?

взято отсюда. там на тему конкатенации идет дискусс
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133678
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смоляное ЧучелкоЕсли не лень, попробуй такой ещё вариант:
Код: plaintext
1.
2.
3.
4.
5.
insert (a1,b1) (a2,b2) | b1 + b2 > n = []
                       | b1 + b2 = n = [(a3, b3)]
                       | otherwise = (insert (a1,b1) (a3, b3)) ++ [(a3, b3)] ++ (insert (a3,b3) (a2, b2))
                        where a3 = a1 + a2
                              b3 = b1 + b2

Интересно, сильно ли повлияет.
вечером погоняю с профайлером для разных случаев.

например сколько потребляется памяти, если нужно найти последних 10 из 20000. а сколько для всех 20000
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133723
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общий порядок - неубывающая последовательность. Есть ли второй порядок сортировки? (судя по примеру, возрастающий числитель, если он не противоречит основному порядку)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133724
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNвзято отсюда. там на тему конкатенации идет дискусс сказать то сказал, а ссылку дать забыл:
http://www.rsdn.ru/forum/decl/3389338.flat.2
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133739
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДано N (натуральное). Вывести список рациональных дробей
в неубывающем порядке где числитель и знаменатель - целые от 1 до N.
И числитель не больше знаменателя (т.е. результат дроби меньше 1.0)

Вход:
5
Выход:
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5

Меня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим.
Если порядок НЕубывающий -это равно сильно тому, что он может как расти, так идти "ровно" ;) Ошибаюсь?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133760
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

Меня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим. Третье и четвёртое сообщения темы.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133764
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionОзверин,

Меня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим. Третье и четвёртое сообщения темы.

Я их прочел, но суть слова "Неубывающая последовательность" для меня осталась загадкой.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133797
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

Неубывающая последовательность, все члены которой различны - в чём проблема?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133808
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинМеня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим.
Если порядок НЕубывающий -это равно сильно тому, что он может как расти, так идти "ровно" ;) Ошибаюсь?
Это задача из книги Федор Меньшиков - Олимпиадные задачи по программированию.
Но я с тобой согласен что такая постановка где надо сокращать дроби и убирать
дубли - чем-то ограничнивает скорость генерации.

Давай, сделай так как будто-бы сокращение не обязательно. Поскольку я - топик
стартер - то имею право взять и поменять постановку.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133960
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно сказать, давно не решал олимпиданых..и совершенно забыл всю математику, но расскажу ход своих мыслей и то, к чему я пришел:

1) Максимальное значение для множества рациональных дробей , где N-числитель, M<N - знаментель = n-1/n
2) Минимальное значение для этого же множества: 1/n

Дальше, я решил построить дерево, с убывающими вершнами и убывающими ветвями:
где вершины: n-1/n -> n-2/n-1 -> n-3/n-2 ->...-> 1/2
и само собой листики веток:
где вершина n-1/n : n-2/n > n-3/n > ... > 1/n

Посмотрел на дерево, вершины всегда убывают, листики в отдельно взятой ветви всегда убывают. Как обойти дерево, чтобы выбрать с наименьшего (1/n) до наибольшего n-1/n?

В итоге(для 5, допустим)

Код: plaintext
1.
2.
3.
4.
1/2	2/3	3/4	4/5
	1/3	2/4	3/5
		1/4	2/5
			1/5

Движемся со двигом: 1/n -> 1/n-1 -> 1/n-? до значения ветви с числителем вершины целое от деления (n/2) и(соответственно) знаменателем = (целое отделения(n/2)) +1
Следующий этап 1/n -> 1+1/n такое же движение

Я видимо повторил чей нибудь велосипед или просто попал в логическую ловушку, но эмпирически вывел следующее правило обхода:



Код: java
1.
2.
3.
4.
5.
for (int i=1; i<=n; i++) {
			for (int j=n; j>=((n/2)+1); j--) {
				System.out.println(i + "/" + j);
			}
		}



Все...ничего не сохраняю, вроде.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38133993
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин, покажи вывод скажем для N=16
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134003
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

1/16
1/15
1/14
1/13
1/12
1/11
1/10
1/9
2/16
2/15
2/14
2/13
2/12
2/11
2/10
2/9
3/16
3/15
3/14
3/13
3/12
3/11
3/10
3/9
4/16
4/15
4/14
4/13
4/12
4/11
4/10
4/9
5/16
5/15
5/14
5/13
5/12
5/11
5/10
5/9
6/16
6/15
6/14
6/13
6/12
6/11
6/10
6/9
7/16
7/15
7/14
7/13
7/12
7/11
7/10
7/9
8/16
8/15
8/14
8/13
8/12
8/11
8/10
8/9
9/16
9/15
9/14
9/13
9/12
9/11
9/10
10/16
10/15
10/14
10/13
10/12
10/11
11/16
11/15
11/14
11/13
11/12
12/16
12/15
12/14
12/13
13/16
13/15
13/14
14/16
14/15
15/16
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134028
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void PrintInterval(int p1, int q1, int p2, int q2, int N){
  if(q1+q2 > N){
    if(p1>0) std::cout << p1 << '/' << q1 << std::endl;
    return;
  }
  PrintInterval(p1, q1, p1+p2, q1+q2, N);
  PrintInterval(p1+p2, q1+q2, p2, q2, N);
}

void PrintRationals(int N){
  PrintInterval(0, 1, 1, 1, N);
}
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134034
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

3/16 < 2/10
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134051
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинmayton,

9/10
10/16


очевидно же, что 9/10 - больше чем 10/16
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134075
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNОзверинmayton,

9/10
10/16


очевидно же, что 9/10 - больше чем 10/16
Да вижу.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134079
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaNпропущено...


очевидно же, что 9/10 - больше чем 10/16
Да вижу.

а как тебе алгоритм предложенный мембером Смоляное Чучелко?

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

для н = 2048 - посчитало мгновенно, и глазом не моргнул.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134108
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNа как тебе алгоритм предложенный мембером Смоляное Чучелко?

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

для н = 2048 - посчитало мгновенно, и глазом не моргнул.
Я не разбирался. Это реализация ряда Фарея?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134131
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaNа как тебе алгоритм предложенный мембером Смоляное Чучелко?

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

для н = 2048 - посчитало мгновенно, и глазом не моргнул.
Я не разбирался. Это реализация ряда Фарея?я не шарю кто такой Фарей.
но алгоритм работает правильно и очень быстро
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134154
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonпропущено...

Я не разбирался. Это реализация ряда Фарея?я не шарю кто такой Фарей.
но алгоритм работает правильно и очень быстро
Тыже в Хаскелях знаток?

Проверь. Это оно?

http://ru.wikipedia.org/wiki/%D0%A0%D1%8F%D0%B4_%D0%A4%D0%B0%D1%80%D0%B5%D1%8F
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134160
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaNпропущено...
я не шарю кто такой Фарей.
но алгоритм работает правильно и очень быстро
Тыже в Хаскелях знаток?

Проверь. Это оно?

http://ru.wikipedia.org/wiki/%D0%A0%D1%8F%D0%B4_%D0%A4%D0%B0%D1%80%D0%B5%D1%8F] http://ru.wikipedia.org/wiki/%D0%A0%D1%8F%D0%B4_%D0%A4%D0%B0%D1%80%D0%B5%D1%8F

ну да, если отбросить первый и последний элемент ряда, то разве это не будет результатом нашей задачи?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134174
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Математик всех нагнул. Ну ладно. Интересно расчитывал ли на это Федор Меньшиков?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134185
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. Математик всех нагнул. Ну ладно. Интересно расчитывал ли на это Федор Меньшиков?это они умею )
всё. бросаю я хаскель, и пойду на джаве писать. не достоин я звания хаскелиста )
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134208
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonДа. Математик всех нагнул. Ну ладно. Интересно расчитывал ли на это Федор Меньшиков?это они умею )
всё. бросаю я хаскель, и пойду на джаве писать. не достоин я звания хаскелиста )
Достоин-достоин . Расскажи лучше где в Киеве востребован Хаскелист? Или это так... хобби?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134253
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaNпропущено...
это они умею )
всё. бросаю я хаскель, и пойду на джаве писать. не достоин я звания хаскелиста )
Достоин-достоин . Расскажи лучше где в Киеве востребован Хаскелист? Или это так... хобби?

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

на собеседку не пригласили. сказали что не достаточно оптимизированный алгоритм(а вторую задачу вообще не правильно понял)

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

разрабатывали товарищи финансовый фреймворк для какого-то крупного банка.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134256
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИли это так... хобби?а так да - хобби.

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

но когда пишу на хаскеле, то мне не хватает нормальных либ, и тут я уже понимаю, что на джаве не то что-бы проще писать, но благодаря либам - возможно. а на хаскеле - не возможно.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134295
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. Математик всех нагнул. Ну ладно. Интересно расчитывал ли на это Федор Меньшиков?Осталось вернуться к условию, когда нужно пропускать и сократимые дроби...
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134298
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

А вру... Ряд и так уже состоит из несократимых дробей
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134308
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда... старина Фарей выбил из под меня табуретку. Ну ладно. Пожалуй топик можно закрыть.
Если у кого чего интересно - пишите. Если хотите помочь мне допилить math.* то могу добавить
в со-разработчики.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134310
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМда... старина Фарей выбил из под меня табуретку. Ну ладно. Пожалуй топик можно закрыть.
Если у кого чего интересно - пишите. Если хотите помочь мне допилить math.* то могу добавить
в со-разработчики.я отпишусь по поводу бенчей по расходу памяти, для случая когда нам нужны не все элементы, а например последние 10 из 20000
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134311
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли хотите помочь мне допилить math.* то могу добавить
в со-разработчики.можешь подробней описать что и зачем? можно в личку..
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134312
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я когда писал Rational хотел добавить туда кеширование факторизации числителя и знаменателя.
Думал что будет актуально для сложения и вычитания Rationals.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134315
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ничего секретного. Лет 5 назад начал писать java-библиотечку для работы
с математикой. Матрицы, комплексные числа (кватернионы, октавы). Генераторы
последовательностей. Простые числа, фибоначчи, e.t.c. Писал несистемно. Урывками.
Сейчас после нескольких лет перерыва выложил это всё в code-google под SVN.
Оно и сейчас всё недописано и нетестировано. Кругом одни "todo"-шки. Я и выложил
в паблик в надежде что кто-то подхватит знамя из моих ослабевших рук.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134320
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ когда писал Rational хотел добавить туда кеширование факторизации числителя и знаменателя.
Думал что будет актуально для сложения и вычитания Rationals.Мне было бы интересно. Можешь со мной делится по почте задачами. Я время найду над ними поработать.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134324
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134390
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionОзверин,

3/16 < 2/10

Вот черт, надо больше 20 минут и вспомнить хоть что-то ;)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38134570
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОКне вижу письма на мыле ))
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38138185
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можете в итоге топика ссылку на решение?)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38138205
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин, тебя интересует решение из учебника Меньшикова?
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38138426
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинА можете в итоге топика ссылку на решение?) 13860942
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38138461
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNОзверинА можете в итоге топика ссылку на решение?) 13860942

так вот.что я попытался вывести ;)
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38138463
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОзверин, тебя интересует решение из учебника Меньшикова?

если не сложно и оно не совпадает с местным решением..то конечно.
...
Рейтинг: 0 / 0
Задачка с дробями.
    #38138545
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Меньшиков предлагает 2 варианта.

1) Тема: алг. Евклида и быстрая сортировка
2) Тема: рекурсия.
Идяе решения найдена в книге [Грехем] стр 141

По 2 варианту - суть ряд Фарея.

Вобщем самые интересные идеи и реализации мы уже рассмотрели.
Знатокам Хаскеля - респект.
...
Рейтинг: 0 / 0
131 сообщений из 131, показаны все 6 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка с дробями.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]