Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: исчю алгоритм
 
 автор: kot_k_k   (22.04.2010 в 13:53)   личное сообщение
 
 

может кто видел где алгоритм для разложения целого числа на слагаемые во всех вариантах
типа 5 =1+1+1+1+1, 1+1+1+1+2, 1+1+3, 1+4, 2+3.

шукаю его на просторах инета - как-то не получается сразу.

  Ответить  
 
 автор: Lukas   (22.04.2010 в 14:24)   личное сообщение
 
 

А какое максимальное значение числа?

  Ответить  
 
 автор: Explorer   (22.04.2010 в 14:34)   личное сообщение
 
 

в принципе для алгоритма это не должно иметь значения

  Ответить  
 
 автор: Lukas   (22.04.2010 в 14:38)   личное сообщение
 
 

Конечно.
От этого будет зависеть время работы алгоритма и что-нибудь исчо . : )
+
В каком виде нужен "выхлоп"?
Для каких целей, если не секрет?

  Ответить  
 
 автор: час   (22.04.2010 в 14:38)   личное сообщение
 
 

круто....
это рекурсия - ты же с ней знаком(вроде бы)
гоняем до тех пор пока число не будет равно само себе(исходному)
=========================================================
эх када же я за ум возьмуся и выучу рекурсию - я ба тебе щас помог ба......
=====================================================================
а так ...
Сначала из 1 складываем
потом постепенно от 2-9 пробуем заменять количество единичек на эквивалент(2-9)
потом из 2 складываем
потом постепенно от 3-9 пробуем заменять количество единичек на эквивалент(3-9)
потом из 3 складываем
как дойдём до упора
пойдём в обратном направлении
чё та не соображу пока........

  Ответить  
 
 автор: Мюллер   (22.04.2010 в 15:22)   личное сообщение
 
 

Ты забыл дописать 1+2+2
Кот, ты приобрел суперкомпьютер? На не очень больших числах обычный комп уйдет в аут.

  Ответить  
 
 автор: Explorer   (22.04.2010 в 15:37)   личное сообщение
 
 

да, забыл
1+1+1+1+2 = 6
вообще-то

вообще этот алгоритм не очень понятен, должно быть как-то так ИМХО

1 1 1 1 1
1 1 1 2 0
1 1 3 0 0
1 4 0 0 0
2 1 1 1 0
2 2 1 0 0
2 3 0 0 0
3 1 1 0 0
3 2 0 0 0
4 1 0 0 0

  Ответить  
 
 автор: Мюллер   (22.04.2010 в 15:43)   личное сообщение
 
 


1 1 1 1 1
1 1 1 2 0

1 1 3 0 0

1 4 0 0 0
2 1 1 1 0
2 2 1 0 0
2 3 0 0 0

3 1 1 0 0

3 2 0 0 0
4 1 0 0 0


Это дублирование. И причем не единственное в данном алгоритме

  Ответить  
 
 автор: Explorer   (22.04.2010 в 16:07)   личное сообщение
 
 

в каком смысле дублирование? дублирование ЧЕГО ИМЕННО?

  Ответить  
 
 автор: Мюллер   (22.04.2010 в 16:50)   личное сообщение
 
 


в каком смысле дублирование? дублирование ЧЕГО ИМЕННО?



3+1+1 и 1+1+3 - это одно и тоже. Складываются одни и те же цифры.

  Ответить  
 
 автор: Explorer   (22.04.2010 в 17:20)   личное сообщение
 
 

ничего страшного :)

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

  Ответить  
 
 автор: Explorer   (22.04.2010 в 16:10)   личное сообщение
 
 

SELECT A.Enumerate, B.Enumerate, C.Enumerate, D.Enumerate, E.Enumerate, [A].[Enumerate]+[B].[Enumerate]+[C].[Enumerate]+[D].[Enumerate]+[E].[Enumerate] AS amt
FROM (SELECT 0 AS Enumerate FROM MSysObjects
UNION SELECT 1 FROM MSysObjects
UNION SELECT 2 FROM MSysObjects
UNION SELECT 3 FROM MSysObjects
UNION SELECT 4 FROM MSysObjects
UNION SELECT 5 FROM MSysObjects
UNION SELECT 6 FROM MSysObjects
UNION SELECT 7 FROM MSysObjects
UNION SELECT 8 FROM MSysObjects
UNION SELECT 9 FROM MSysObjects) AS A,
(SELECT 0 AS Enumerate FROM MSysObjects
UNION SELECT 1 FROM MSysObjects
UNION SELECT 2 FROM MSysObjects
UNION SELECT 3 FROM MSysObjects
UNION SELECT 4 FROM MSysObjects
UNION SELECT 5 FROM MSysObjects
UNION SELECT 6 FROM MSysObjects
UNION SELECT 7 FROM MSysObjects
UNION SELECT 8 FROM MSysObjects
UNION SELECT 9 FROM MSysObjects) AS B,
(SELECT 0 AS Enumerate FROM MSysObjects
UNION SELECT 1 FROM MSysObjects
UNION SELECT 2 FROM MSysObjects
UNION SELECT 3 FROM MSysObjects
UNION SELECT 4 FROM MSysObjects
UNION SELECT 5 FROM MSysObjects
UNION SELECT 6 FROM MSysObjects
UNION SELECT 7 FROM MSysObjects
UNION SELECT 8 FROM MSysObjects
UNION SELECT 9 FROM MSysObjects) AS C,
(SELECT 0 AS Enumerate FROM MSysObjects
UNION SELECT 1 FROM MSysObjects
UNION SELECT 2 FROM MSysObjects
UNION SELECT 3 FROM MSysObjects
UNION SELECT 4 FROM MSysObjects
UNION SELECT 5 FROM MSysObjects
UNION SELECT 6 FROM MSysObjects
UNION SELECT 7 FROM MSysObjects
UNION SELECT 8 FROM MSysObjects
UNION SELECT 9 FROM MSysObjects) AS D,
(SELECT 0 AS Enumerate FROM MSysObjects
UNION SELECT 1 FROM MSysObjects
UNION SELECT 2 FROM MSysObjects
UNION SELECT 3 FROM MSysObjects
UNION SELECT 4 FROM MSysObjects
UNION SELECT 5 FROM MSysObjects
UNION SELECT 6 FROM MSysObjects
UNION SELECT 7 FROM MSysObjects
UNION SELECT 8 FROM MSysObjects
UNION SELECT 9 FROM MSysObjects) AS E
WHERE ([A].[Enumerate]+[B].[Enumerate]+[C].[Enumerate]+[D].[Enumerate]+[E].[Enumerate])=5;

  Ответить  
 
 автор: Lukas   (22.04.2010 в 16:15)   личное сообщение
 
 

А спец табличку завести лень было?
На 5 табличках у меня декартово множество отрабатывает быстро, а на 10 падает в осадок, а это всего число 10 пытался разложить.

  Ответить  
 
 автор: Explorer   (22.04.2010 в 17:21)   личное сообщение
 
 


А спец табличку завести лень было?



ога

  Ответить  
 
 автор: Силblч   (22.04.2010 в 16:58)   личное сообщение
 
 

Сочетанием (combination) из n элементов по m называется множество (неупорядоченный набор) из m различных чисел, принадлежащих множеству 1:n.

Для перебора сочетаний выберем удобное стандартное представление сочетаний, например в виде монотонно возрастающего набора из m чисел, лежащих в диапазоне 1:n и будем перебирать только такие стандартные записи сочетаний.

Состояние вычислительного процесса. Массив x1,...,xm номеров, включенных в сочетание.

Начальное состояние. Принять xi = i для всех i, принадлежащих множеству 1:m.

Стандартный шаг. Просматривать компоненты вектора x, начиная с xm, и искать первую компоненту, которую можно увеличить (нельзя увеличить xm = n, xm - 1 = n-1,...). Если такой компоненты не найдется, закончить процесс. В противном случае, пусть k — наибольшее число, для которого xk < n + m - k. Увеличить xk на единицу, а для всех следующих за k-ой компонентой продолжить натуральный ряд от нового значения xk, т.е. положить xi = xk + (i - k) для i > k.
Литература

1. Романовский И.В. Дискретный Анализ. — СПб.: Невский диалект, 2000 — 2003.

http://rain.ifmo.ru/cat/view.php/vis/combinations/combinations-2003

  Ответить  
 
 автор: Силblч   (22.04.2010 в 17:02)   личное сообщение
 
 

http://www.gmmcc.com.ua/gmmcc/index.php?option=com_content&task=view&id=130&Itemid=76
При реализации процедуры декорреляции Грамма-Шмидта желательно осуществить нормировку дисперсии, дополнительно улучшающую обусловленность матрицы декоррелирующих преобразований cond(D-1).

  Ответить  
 
 автор: Силblч   (22.04.2010 в 17:05)   личное сообщение
 
 

Напомню, что число битов экспоненциально. Это означает, что затраты на перебор каждых n битов пропорциональны 2^n. Чтобы это было легче представить, напомним, что:

* 64 бита: 18446744073709551616 возможных ключей
* 128 бит: 34028236692093846346337460743176821 1456 возможных ключей
* 256 бит: 11579208923731619542357098500868790 78532699846656405640394575840079131 29639936 возможных ключей

  Ответить  
 
 автор: Lukas   (22.04.2010 в 17:29)   личное сообщение
 
 

Ха, биты.
Тут гораздо веселее:
(Число+1)^Число

  Ответить  
 
 автор: Силblч   (22.04.2010 в 17:06)   личное сообщение
 
 

http://www.cyberforum.ru/post662474.html
счастливый билет

  Ответить  
 
 автор: kot_k_k   (22.04.2010 в 17:32)   личное сообщение
 
 

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

Типа нужно на одном станке:
Работа_1 - 20 ед., время 2
Работа_2 - 10 ед. время 1,7 (задержка 0,5 от Работы_1)
Работа_3 - 7 ед. время 3 (задержка 0,5 от Работы_2)
Работа_4 - 1 ед. время 2,5 - станок другой

Такую последовательность работ нужно сделать 100 раз.
Задача найти наименьшее время выполенния.
Ежу понятно что минимальные задержки если делать весь объем Работа_1, потом всё Работа_2 и затем Работа_3, но каждая порция запускает дальше работы (работа_4) - так что в таком случае Работа_4 начнется фиг знает когда.
Если делать строго по одной порции - максимальное время задержки (простой).

Где-то должно быть так -

работа_1 - по 20 ед. в объеме 30 исполнений
работа_2 - по 10 ед. в объеме 30 исполнений (задержка 0,5 от Работы_1)
работа_3 - по 7 ед. в объеме 30 исполнений (задержка 0,5 от Работы_2)

работа_1 - по 20 ед. в объеме 70 исполнений (задержка 0,5 от Работы_3)
работа_2 - по 10 ед. в объеме 70 исполнений (задержка 0,5 от Работы_1)
работа_3 - по 7 ед. в объеме 70 исполнений (задержка 0,5 от Работы_2)

или какими-то другими порциями
вот для этого и хотел получить все возможные варианты т.е. слагаемые числа 100.

думаю алгоритм должен быть.

п.с. цифры брал с головы.

п.с.с. вот красиво назвал - оптимальное запараллеливание заготовительных работ и конвейера сборки для минимизации временных затрат.

  Ответить  
 
 автор: kot_k_k   (22.04.2010 в 17:42)   личное сообщение
 
 

а может есть другой алгоритм - который анализирует время работа_1+работа_2+работа_3 и время четвертой работы.

  Ответить  
 
 автор: Explorer   (22.04.2010 в 18:03)   личное сообщение
 
 

вообще-то это целое направление исследований :)

т.н. исследование операций - вот в этой книжке много и хорошо написано

http://www.williamspublishing.com/Books/5-8459-0740-3.html

еще можно погуглить "теория расписаний"

  Ответить  
 
 автор: Lukas   (22.04.2010 в 17:55)   личное сообщение
 
 

Как-то пытался изобрести нечто подобное, но:
Количество факторов, влияющих на выполнение процесса по расчету, и неопределенность величины вносимой ими погрешности такая, что фактически, перерасчет пришлось-бы проводить ежечасно.
Например:
1. Сломался погрузчик - пипец, другого такой грузоподъемности нет.
2. Сломался кран балка - пипец, слесари хз где, электриков фиг найдешь...
3. Кладовщица: то на больничном, то на обеде, то топливо принимает, то баллоны выдает - пипец.
4. Брак в заготовке - пока актирование, пока то да се...
5. Инструмент попался говно - производительность упала.
6. , 7., 8 ....
В общем попа это (в наших местных условиях).

  Ответить  
 
 автор: Силblч   (22.04.2010 в 18:25)   личное сообщение
 
 


Public Sub xvariant(num&, k&, l&)
Dim n&, i&
Static c$

If num = 0 Then
    Debug.Print c
    c = ""
Else
    For i = 1 To k
       If num - i >= 0 Then
           c = c & " " & i
           xvariant num - i, i, l + 1
       End If
    Next i
End If
End Sub




xvariant 5,5,1
 1 1 1 1 1
 2 1 1 1
 2 1
 3 1 1
 2
 4 1
 5

  Ответить  
 
 автор: Силblч   (22.04.2010 в 18:26)   личное сообщение
 
 

ээээ 2+3 нету чёта
хтя он я вно должен был быть там где щяс просто 2 стоит :)

не, поторопился, гдето недоработал

  Ответить  
 
 автор: Explorer   (22.04.2010 в 18:30)   личное сообщение
 
 

теперь понелЪ

  Ответить  
 
 автор: Силblч   (22.04.2010 в 18:41)   личное сообщение
 
 

но направление верное :)) блбуду

  Ответить  
 
 автор: Explorer   (22.04.2010 в 19:08)   личное сообщение
 
 

1+2+2 тоже нет

  Ответить  
 
 автор: Explorer   (22.04.2010 в 18:29)   личное сообщение
 
 

йа непонелЪ

  Ответить  
 
 автор: час   (22.04.2010 в 20:21)   личное сообщение
11 Кб.
 
 

у мну вот так

  Ответить  
 
 автор: Explorer   (22.04.2010 в 21:02)   личное сообщение
 
 

что-то не того :)

  Ответить  
 
 автор: Lukas   (22.04.2010 в 21:08)   личное сообщение
 
 

: )

  Ответить  
 
 автор: час   (22.04.2010 в 21:08)   личное сообщение
10 Кб.
 
 

а вот получше
тока чёта задвояица

  Ответить  
 
 автор: час   (22.04.2010 в 21:15)   личное сообщение
10 Кб.
 
 

а вот нормалёк
готова алгоритма для кота
конечно код не блещет, но вроде всё как он просил.....
Жаль я слаб в рекурсии - я б ему эстетичное решение подал бы, ну да он сам поправит, если чё.
более 39 уже ему в лом разложить список не вмещает.......
а в Debug - 100 штук запросто.......

  Ответить  
 
 автор: час   (22.04.2010 в 22:11)   личное сообщение
12 Кб.
 
 

и в таблицу пихает полно записей .....

  Ответить  
 
 автор: kot_k_k   (23.04.2010 в 08:51)   личное сообщение
 
 

спасибо, за соучатие всем!!!!!

час он доходит до предпоследненего уровня 10=8+1+1 а 10=8+2 не хочет, все равно спасибочки буду разбираться.

Лукас - за ссылку спасибо, но тут нужно просто минимизировать процес, без отвлечения на то что крановщица беремена, а мастер с утра в запое.

С Тяпницей всех -

  Ответить  
 
 автор: час   (23.04.2010 в 08:54)   личное сообщение
14 Кб.
 
 

8+2 = 2+8 -да интересно
и пополам нету

  Ответить  
 
 автор: kot_k_k   (23.04.2010 в 09:18)   личное сообщение
13 Кб.
 
 

Вот - работат - 100 разложил на 4950 вариантов

осталось фигня - умножить, сложить и найти минимум

  Ответить  
 
 автор: Силblч   (23.04.2010 в 10:58)   личное сообщение
 
 

у меня архив не открываецца
а ты можешь код пульнуть сюда? чобы сразу глянуть?

  Ответить  
 
 автор: Силblч   (23.04.2010 в 10:54)   личное сообщение
 
 

чиста поржать

Public Sub xvariant(num&, k&, l&, Optional c$ = "")
Dim i&, a&
If num = 0 Then
    c = IIf(l - Eval(c) > 0, c & "+" & (l - Eval(c)), c)
    Debug.Print Replace(c, "+", " ")
    c = ""
Else
    For i = 1 To k
        a = num - i
        If a >= 0 Then
            c = c & "+" & i
            xvariant a, i, l, c
        End If
    Next i
End If
End Sub


но есть повторы

xvariant 7,7,7
 1 1 1 1 1 1 1
 2 1 1 1 1 1
 2 1 1 1 2
 2 1 4
 3 1 1 1 1
 2 1 1 3
 2 5
 3 1 3
 4 1 1 1
 2 1 4
 3 4
 5 1 1
 2 5
 6 1
 7


ну и дальше 10ти не тестировал

зю! на 100 нельзя

  Ответить  
 
 автор: час   (23.04.2010 в 11:50)   личное сообщение
13 Кб.
 
 

у мну вот так
осталось фигня - умножить, сложить и найти минимум
это как ?

  Ответить  
 
 автор: kot_k_k   (23.04.2010 в 11:55)   личное сообщение
 
 

наткнулся на опу - при большом числе типа 150 - выдает

Dim B, C, D, E, F As Long
Dim Strr As String

If Eval(Strr) > C Then

- выдает Run-time erroe 10025 - Вданной операции будут проверены условия на значения записей и полей таблицы, а тажк свойства "Обязательное поле" (Required) и "Пустые строки" (AllowZeroLength) для всех данных таблицы.

, где Strr=' 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1.....'
Len (Strr)=302

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

п.с. пример сброшен мной ранее - переделанный Часа.

работает "не правильно" с числа 101

  Ответить  
 
 автор: час   (23.04.2010 в 11:57)   личное сообщение
 
 

поле =255 символов
надо мемо попробовать
хотя нет - больше 100 Eval отказывается суммировать
===============================================
а без плюсиков - разрешается разлагать?

  Ответить  
 
 автор: Силblч   (23.04.2010 в 12:05)   личное сообщение
 
 

да :) только наверное там лучше(?) с коллекцией или массивчегом поиграться :)
но это так, именно поиграться...

  Ответить  
 
 автор: час   (23.04.2010 в 12:08)   личное сообщение
 
 

точно я тоже хотел сначала массивчик - но до каких размеров котт собирается догнать расклад -вот в чём у мну вопрос........
я думал ему сотни хватит с головой, а он 101 бабахает
интересно - какие цели он преследует....
побаловаться? чи шо?

  Ответить  
 
 автор: kot_k_k   (23.04.2010 в 17:39)   личное сообщение
 
 

все алгоритм более сложен - потом.
нужно сравнить всремя цикла с временем последующей операцией, ее объемом, и найти минимум исходя из этих данных.
типа время цикла в 2 раза меньше времени операции - за время операции Цикл производит объем на 2 последующие операции. и т.д. но как оптимизировать чтобы сказать после запуска 15 циклов (объем на 30 операций) можно запускать циклы с объемом 20х или вообще делать объем первой операции, потом для второй, потом для третьей операции и заготовительные работы могут начинаться на что-то еще.

короче - шо тут думать - прыгать надо!!!

  Ответить  
 
 автор: Explorer   (23.04.2010 в 12:27)   личное сообщение
 
 


хотя нет - больше 100 Eval отказывается суммировать



http://www.home.versatel.nl/vspickelen/Largefiles/LargeInt.htm

  Ответить  
 
 автор: Силblч   (23.04.2010 в 12:34)   личное сообщение
 
 

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


Public Sub xvar(num&, k&, l&, Optional c = Null)
Dim i&, a&, s$
Static j&
If num = 0 Then
    a = 0: For i = 0 To l: a = a + Nz(c(i), 0): Next i
    c(j) = IIf(l - a > 0, l - a, c(j))
    s = ""
    For i = 0 To l: s = s & " " & c(i): Next i
    Debug.Print s
    j = 0: ReDim c(0 To l)
Else
    If j = 0 Then ReDim c(0 To l)
    For i = 1 To k
        a = num - i
        If a >= 0 Then
            c(j) = i: j = j + 1
            xvar a, i, l, c
        End If
    Next i
End If
End Sub

  Ответить  
 
 автор: час   (23.04.2010 в 13:29)   личное сообщение
 
 

Интересные картинки, вот тока надписи - на иноязыке.......
http://www.home.versatel.nl/vspickelen/Largefiles/LargeInt.htm

  Ответить  
 
 автор: kot_k_k   (26.04.2010 в 11:17)   личное сообщение
 
 

по одной из ссылок напоролся вот на что


http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B_%D0%93%D0%B8%D0%BB%D1%8C%D0%B1%D0%B5%D1%80%D1%82%D0%B0



мозк закипает по тихоньку

  Ответить  
 
 автор: kot_k_k   (26.04.2010 в 11:24)   личное сообщение
 
 

и понесло меня дальше

http://ru.vlab.wikia.com/wiki/Упаковка_шаров

все хватит лучше буду грузить чугуний

  Ответить  
 
 автор: час   (26.04.2010 в 13:03)   личное сообщение
 
 

Даааааа
Я свои шары - уже давно упаковал...
И особо не заморачивался про 3D пространство.... само собой всё получилось.
и про многочлен тоже не заморачивался - нафига оно мне я же не многожёнец.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList