Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 5

Задачка на динамическое программирование

09.03.2023, 14:36. Показов 791. Ответов 9

Студворк — интернет-сервис помощи студентам
Привет всем,

прошу помочь решить следующую задачу.
Частично похожа на рюкзак, но не то.

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

Входные данные такие

Есть комбинации тикетов (файл во вложении), число тест кейсов которые конкретная комбинация затрагивает и сколько это в процентах от общего числа кейсов, так же известно и общее число кейсов, число усешно пройденных кейсов
Есть запланированный pass rate и актуальный pass rate.

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

т.е. например у нас общее число тест кейсов = 86871
успешно пройдено - 52488 (60,42%)
Должно быть успешно пройдено 75%

есть список комбинаций тикетов, ниже во вложении.
получается надо получить список тех тикетов, исправив которые можно получить дополнительно 14,58% (75 - 60,42)

Кликните здесь для просмотра всего текста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2023, 14:36
Ответы с готовыми решениями:

Динамическое программирование
Здравствуйте! ''' Вам дан список цен одной акции prices, в котором i-ый элемент означает цену одной акции в день i. Также вам дана...

Динамическое программирование, python
Без двух нулей подряд Требуется посчитать количество последовательностей длины n, состоящих из цифр от 0 до k−1 таких, что никакие два...

Динамическое программирование
Написать программу на динамическом программировании. К вам обратились за помощью от службы ремонта дорог. Вам необходимо написать...

9
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2023, 19:03
bondyashev, время имеет значение? (~ 2 мин)
Получилась комбинация:
{'ADTLUPG-5297', 'ADTLUPG-4947', 'ADTLUPG-4946', 'ADTLUPG-6200', 'ADTLUPG-4934', 'ADTLUPG-6182'}
15.11
1
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 5
09.03.2023, 20:34  [ТС]
Нет. Время исполнения не важно.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2023, 21:50
bondyashev,
Python
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
28
29
30
31
32
33
34
35
36
37
38
# -*- coding: utf-8 -*-
"""ADTLUPG.ipynb
 
Automatically generated by Colaboratory.
 
Original file is located at
    https://colab.research.google.com/drive/1AyNIrrOe2liMYQY1bAs8V0wEQNh8jmMt
"""
 
import pandas as pd
import numpy as np
 
control = 0.1458
df = pd.read_excel('/content/drive/MyDrive/Book_example.xls', header=3).iloc[:-1,:]
 
df['tmp'] = df.iloc[:, 0].str.split(',')
df['tmp'] = df['tmp'].map(set)
 
df['cnt'] = df.iloc[:, -3].cumsum()
ind = np.where(df['cnt'].values>control)[0][0]
adtlupg = set().union(*df.iloc[:ind, -2].to_list())
 
from itertools import combinations
 
res = []
flag = False
for i in range(1, len(adtlupgs)+1):
  for elem in combinations(adtlupgs, i):
    cnt = np.where((df['tmp'] - set(elem)).map(len) == 0, df.iloc[:, 2], 0).sum()
    if cnt >= control:
      res.append((set(elem), cnt))
      flag = True
      #print(set(elem, cnt))
      #break
  if flag:
    break
[print(*elem) for elem in res]
print(*max(res, key=lambda x: x[1]))
1
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 5
09.03.2023, 21:52  [ТС]
Хотя глазами если смотреть то ADTLUPG-6183, ADTLUPG-6184 по идее тоже могли бы попасть в список
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2023, 21:54
bondyashev, - на первый взгляд - да
А упоминание про 2 мин - полный перебор всех вариантов
0
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 5
09.03.2023, 21:57  [ТС]
Спасибо. Завтра уже поизучаю детально!)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2023, 22:39
bondyashev, исправил:
Python
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
28
29
30
31
32
33
34
35
36
37
38
39
40
# -*- coding: utf-8 -*-
"""ADTLUPG.ipynb
 
Automatically generated by Colaboratory.
 
Original file is located at
    https://colab.research.google.com/drive/1AyNIrrOe2liMYQY1bAs8V0wEQNh8jmMt
"""
 
import pandas as pd
import numpy as np
 
control = 0.1458
df = pd.read_excel('/content/drive/MyDrive/Book_example.xls', header=3).iloc[:-1,:]
 
df['tmp'] = df.iloc[:, 0].str.split(',')
df['tmp'] = df['tmp'].map(set)
 
# отбираем комплекты с долей > 2% от control
ind = len(np.where(df.iloc[:,-2].values>control/50)[0])
adtlupgs = set().union(*df.iloc[:ind, -1])
# полный перебор
# adtlupgs = set().union(*df.iloc[:, -1])
 
from itertools import combinations
 
res = []
flag = False
for i in range(1, len(adtlupgs)+1):
  for elem in combinations(adtlupgs, i):
    cnt = np.where((df['tmp'] - set(elem)).map(len) == 0, df.iloc[:, 2], 0).sum()
    if cnt >= control:
      res.append((set(elem), cnt))
      flag = True
      #print(set(elem, cnt))
      #break
  if flag:
    break
[print(*elem) for elem in res]
print(*max(res, key=lambda x: x[1]))
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
10.03.2023, 08:12
bondyashev, а динамическое программирование здесь причем?
0
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 5
10.03.2023, 09:05  [ТС]
eaa, Ну я видел решение задачи о рюкзаке и думал что очень похожим образом решается и текущая задача.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2023, 09:05
Помогаю со студенческими работами здесь

Динамическое программирование
Посчитать количество последовательностей нулей и единиц длины N, в которых не встречаются три подряд единицы. Длина последовательностей...

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

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

Динамическое программирование
Две команды проводят серию игр до 10 побед одной из команд. Первая команда побеждает вторую с вероятностью 3/5. Возможна ничья с...

Динамическое программирование
Всем добрый день! Нужно решить многомерную задачу о рюкзаке, когда известны стоимость, вес и объем предметов. В данном решении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru