Java-алгоритм для поиска минимального веса самой тяжелой сумки [дубликат]

Вы можете использовать конфигурационную электронную почту с помощью codeigniter, например, используя smtp (простой способ):

$config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'mail.domain.com', //your smtp host
        'smtp_port' => 26, //default port smtp
        'smtp_user' => 'name@domain.com',
        'smtp_pass' => 'password',
        'mailtype' => 'html',
        'charset' => 'iso-8859-1',
        'wordwrap' => TRUE
);
$message = 'Your msg';
$this->load->library('email', $config);
$this->email->from('name@domain.com', 'Title');
$this->email->to('emaildestination@domain.com');
$this->email->subject('Header');
$this->email->message($message);

if($this->email->send()) 
{
   //conditional true
}

Это работает для меня!

3
задан Robinhopok 18 March 2016 в 04:36
поделиться

1 ответ

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

Итак, предположим, что максимальное значение для всех подматриц - x, поэтому мы можем с жадностью выбирать каждый подассемблер в O ( n), так что сумма каждого подмашины максимальна и меньше или равна x. После создания всего подмассива, если количество подматрицы меньше или равно k, поэтому x является одним из возможных решений, или мы увеличиваем x.

Псевдокод:

int start = Max_Value_In_Array;
int end = Max_Number;

while(start <= end)
   int mid = (start + end)/2;
   int subSum = 0;
   int numberOfSubArray = 1;
   for(int i = 0; i < n; i++){
      if(subSum + data[i] > mid){
          subSum = data[i];
          numberOfSubArray++;
      }else{
          subSum += data[i];
      }
   }
   if(numberOfSubArray <= k)
       end = mid - 1;
   else
       start = mid + 1;

Сложность времени O (n log k) с k - максимально возможная сумма.

6
ответ дан Pham Trung 22 August 2018 в 07:38
поделиться
  • 1
    Простой & amp; блестящий! – shole 18 March 2016 в 04:54
  • 2
    Как это даст мне результирующие вспомогательные массивы? – Robinhopok 18 March 2016 в 05:24
  • 3
    @Robinhopok после того, как вы нашли минимальное значение x, вам просто нужно восстановить его так же, как при подсчете количества вспомогательных массивов – Pham Trung 18 March 2016 в 06:05
  • 4
    @PhamTrung А я вижу, спасибо. Я попытался реализовать алгоритм в C # link , но я попал в бесконечный цикл. Что-нибудь мне не хватает? – Robinhopok 19 March 2016 в 06:42
  • 5
    @Robinhopok Итак, для этого вопроса бинарный поиск не ищет какой-либо элемент в массиве, а ищет минимальное число x, которое мы можем разделить на сегмент k, сумма которого меньше или равна к x. И почему бинарный поиск может быть использован в этом случае? из-за свойства, которое со значением x, если мы можем разделить массив на сегмент k, поэтому со значением greater than x мы также можем разделить массив на сегменты k. Таким образом, требование бинарного поиска выполняется. – Pham Trung 21 March 2016 в 07:00
Другие вопросы по тегам:

Похожие вопросы: