На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> последовательность из N натуральных чисел, чтобы суммы не совпадали
    Всем хай! Сходу к делу!

    Задается N натуральных чисел ( на практике N не превышает 15-20, в теории может быть бесконечно большим ): { n1, n2, n3, ..., nn }. Все числа уникальные.
    Надо получить ряд этих чисел, чтобы выполнялись такие условия:
    1. ни одно из чисел последовательности нельзя получить любой суммой из других чисел последовательности ( это требование не обязательное, но желательное )
    2. ни одну сумму чисел в произвольном количестве ( хоть все суммировать ) нельзя представить такой же суммой, но другим набором чисел.
    3. числа в последовательности должны быть минимально возможными ( это тоже не обязательно, но желательно )


    Например, такой набор набор не подойдет:
    { 1, 2, 4, 7, 9, 11, 15 }, т к:
    1 + 4 + 15 = 9 + 11
    1 + 4 + 15 = 4 + 7 + 9
    2 + 9 = 11 - хотя не критично...

    ================================

    была идея оттолкнуться от простых чисел, но это провал...
    { 2, 3, 5, 7, 11, 13, 17 ... }
    7 + 13 = 3 + 17 --> 20

    в итоге, вроде можно задать 2^i, i = [ 0 .. ( n - 1 )]:
    n = 6 ---> { 1, 2, 4, 8, 16, 32 }

    вопросы:
    1. в теории чисел может как-то называется официально такая последовательность, которая удовлетворяет требованиям задачи
    2. существует ли более оптимальный набор ( меньше по значению ), чем 2^i

    спс

    зы: мне это потребовалось для хеш-функции, чтобы устранять дубликаты простых циклов в орграфе при алгоритме backtracking
    Сообщение отредактировано: FasterHarder -
      Цитата FasterHarder @
      1. в теории чисел может как-то называется официально такая последовательность, которая удовлетворяет требованиям задачи
      2. существует ли более оптимальный набор ( меньше по значению ), чем 2^i

      На первый вопрос ответить затрудняюсь. А вот на второй, чуйка подсказывает, что более оптимального не найти. Тут объяснение простое. В такой последовательности каждое число состоит из одного бита, и этот бит находится в уникальной позиции. Суммируя такие числа мы не сможем получить сдвига, соответственно не сможем из нескольких меньших чисел получить какое-то большее или сумму из больших. Даже если пробовать в суммах использовать большие и меньшие вперемешку.
        Цитата FasterHarder @
        1. ни одно из чисел последовательности нельзя получить любой суммой из других чисел последовательности ( это требование не обязательное, но желательное )
        2. ни одну сумму чисел в произвольном количестве ( хоть все суммировать ) нельзя представить такой же суммой, но другим набором чисел.

        Первое - частный случай второго. Отбросить.
        Цитата Majestio @
        2. существует ли более оптимальный набор ( меньше по значению ), чем 2^i

        Для 4 чисел существует набор (3,5,6,7), где максимальное из чисел менее такового в наборе из степеней двойки при той же длине набора. Для 5 чисел это, например, (7,10,12,13,14). И так далее... То есть, "Нет" - ответ заведомо неверный.
        Сообщение отредактировано: Akina -
          Цитата Akina @
          То есть, "Нет" - ответ заведомо неверный.

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

            насчет критерия оптимальности - моя недоработка, не указал в условии,но тут вроде напрашивается 2 критерия основных
            1. макс.число в такой последовательности
            2. сумма этих чисел
            **3 простота получения очередного числа последовательности <----- и вот этот момент, хм...

            вот этот ряд из 2^i своего рода "золотое сечение", т к он гарантированно дает то, что нужно
            вариант, предложенный Akina лучше ( "оптимальнее" ), но за это придется платить нахождением очередного числа. Тут ведь вроде сложность факториальная будет, т к нужно перебрать ВСЕ возможные суммы и их сопоставить. На какой-то итерации не хватит мощностей, чтобы получить такое число, хотя суммы, полученные на предыдущих этапах где-то можно хранить ( типа мемоизация ), но это лютые накладные расходы. А для ряда 2^i очередное значение получается за O(1).

            Еще ведь в др.рядах, отличных от 2^i все равно макс. значение будет стремиться к макс. из ряда 2^i. Т е ряды буду "примерно" одинаковые.
            И еще момент остается, а ВСЕГДА ли можно продолжать получать ряд, члены которого не подчиняются 2^i...наверное, да)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0296 ]   [ 15 queries used ]   [ Generated: 6.10.24, 09:37 GMT ]