Не могу найти оптимальный алгоритм

12
VHS
На сайте с 28.09.2007
Offline
142
VHS
#11
Joker-jar:
Такой перебор не всегда даст оптимальный результат (минимальные обрезки), есть определенные частные случаи (когда с очередным элементом надо группировать не максимальный возможный, чтобы потом все красиво сгруппировалось). Если элементов не так много (вы говориле о числе 40), то не вижу смысла не использовать полный перебор.

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

[Удален]
#12

Если я правильно понял, вот данные на которых предыдущее решение ошибется на 100% :)


$unit[0] = 96;
$unit[1] = 95;
$unit[2] = 94;

$unit[3] = 1;
$unit[4] = 2;
$unit[5] = 3;

$unit[6] = 1;
$unit[7] = 1;
$unit[8] = 1;

$unit[9] = 2;
$unit[10] = 2;
$unit[11] = 2;
VHS
На сайте с 28.09.2007
Offline
142
VHS
#13
imagine:
Если я правильно понял, вот данные на которых предыдущее решение ошибется на 100% :)

$unit[0] = 96;
$unit[1] = 95;
$unit[2] = 94;

$unit[3] = 1;
$unit[4] = 2;
$unit[5] = 3;

$unit[6] = 1;
$unit[7] = 1;
$unit[8] = 1;

$unit[9] = 2;
$unit[10] = 2;
$unit[11] = 2;

Не ошиблось... Занес массив в скрипт, результат там же можно посмотреть

Использованные изделия (% использования):
96,95,94,1,2,3,1,1,1,2,2,2
Всего 12
96 + 3 = 99
95 + 2 = 97
94 + 2 = 96
2 + 2 = 4
1 + 1 = 2
1 + 1 = 2
Потребуется : 6 целых единиц
[Удален]
#14

так требуется 3 единицы ? или нет? кажется понял, ну ок тогда так (11 вместо 9):


$unit[0] = 96;
$unit[1] = 95;
$unit[2] = 94;

$unit[3] = 96;
$unit[4] = 95;
$unit[5] = 94;

$unit[6] = 96;
$unit[7] = 95;
$unit[8] = 94;

$unit[9] = 12;
$unit[10] = 15;
$unit[11] = 18;
VHS
На сайте с 28.09.2007
Offline
142
VHS
#15
Использованные изделия (% использования):
96,95,94,96,95,94,96,95,94,12,15,18
Всего 12
96
96
96
95
95
95
94
94
94
18 + 15 = 33
12
Потребуется : 11 целых единиц

Почему 9?

Суть в том, что из одного изделия технологически можно сделать только два куска, употребимых для отделки. Например, при наличии замка на торце. Поэтому меньше 1/2 количество целых единиц точно не будет.

[Удален]
#16
VHS:
Суть в том, что из одного изделия технологически можно сделать только два куска, употребимых для отделки. Например, при наличии замка на торце. Поэтому меньше 1/2 количество целых единиц точно не будет.

Так ... ? я к тому, что алгоритм будет давать ошибку. Если вас такое решение устраивает то, пожалуйста. Но он будет давать ошибку тем больше чем больше элементов задействовано.

не понял фразы, поясните пожалуйста:


Поэтому меньше 1/2 количество целых единиц точно не будет.
VHS
На сайте с 28.09.2007
Offline
142
VHS
#17

imagine, где ошибка то? То, что 15+16+18 не считает за единое изделие?

Еще раз. Представьте, образно, доску ламината. Распилите ее пополам. Сколько кусков можно употребить? Правильно, оба. Распилите один из обрезков пополам. Из этих двух кусков сколько можно употребить? Правильно, 1.

На 40 кусков потребуется не менее 20 целых изделий.

[Удален]
#18

Т.е. это тоже нормально? (9 вместо 6):


$unit[0] = 56; // 44
$unit[1] = 57; // 43
$unit[2] = 58; // 42

$unit[3] = 53; // 47
$unit[4] = 54; // 46
$unit[5] = 55; // 45

$unit[6] = 91; // 44 + 47
$unit[7] = 89; // 46 + 43
$unit[8] = 87 // 42 + 45

ок..

VHS
На сайте с 28.09.2007
Offline
142
VHS
#19
imagine:
Т.е. это тоже нормально? (9 вместо 6):
ок..

Да, абсолютно нормально. У изделия с трех сторон должна сохраняться технологическая кромка, поэтому разделить его можно только один раз (часть без кромки размещается на краю плоскости). Это описано в самом начале.

да, комментарии видимо излишне скопированы

12

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