Я опубликовал немного здесь, связанный с проектом, над которым я пытался работать, и я продолжаю сталкиваться с проблемами дизайна, и мне приходится проектировать с нуля. Поэтому мне интересно, могу ли я опубликовать то, что я пытаюсь сделать, и кто-нибудь может помочь мне понять, как я могу получить желаемый результат.
Общие сведения:
Я новичок в программировании и пытаюсь учиться. Поэтому я взялся за интересующий меня проект, который включает в себя получение списка и разбивку каждого числа, используя только числа из списка. Я знаю, что мог бы легко переборщить это (что я и сделал), но я также хотел изучить Hbase, Hadoop и параллельную обработку, поэтому я хотел сделать это таким образом, чтобы я мог разбить процесс на разных машинах. Я думал, что способ сделать это — использовать динамическое программирование и рекурсии для создания таблицы возможностей, которую можно было бы разбить еще дальше.
Пример:
Если я отправлю список: [1,2, 4]
я должен получить {1: [[1]], 2: [[1, 1]], 4: [[2, 2]]}
. В основном это говорит о том, что 2 + 2 = 4, 1 + 1 = 2 и 1 = 1 ... поэтому, пытаясь увидеть все способы сделать 4, я могу просто просмотреть этот список (который будет в базе данных) и см. 2 + 2 = 4, затем разбить 2 ... и так далее .. У меня работает поиск, но с разбивкой у меня проблемы. Использование грубой силы не позволит мне использовать большие числа (скажем, миллион с тысячей чисел в списке) таким образом, чтобы я мог использовать Hadoop или какой-либо другой инструмент для их масштабирования. Вот еще несколько примеров возможных результатов:
[1,2, 3, 4] = {1: [[1]], 2: [[1, 1]], 3: [[1, 2]], 4: [[1, 3], [2, 2]]}
[1,2, 3, 4, 6, 10] = {1: [[1]], 2: [[1, 1]], 3: [[1, 2]], 4: [[1, 3], [2, 2]], 6: [[2, 4], [3, 3]], 10: [[4, 6], [2, 2, 2, 2, 2]]}
[10, 30, 50] = 50: [[10, 10, 30]], 30: [[10, 10, 10]]}
Логика этого подхода заключается в том, что для вычисления следующих возможных данных в списке не потребуется время, поэтому, если я отправлю список с миллионом чисел, он может сделать это быстро и даже масштабироваться до кластера хаупов.
Код, который я создал, чтобы заставить это работать, находится здесь Но этот вопрос был о том, как исправить проблему дизайна. Я получил совет, что это проблема с разделами, и осмотрелся и нашел гораздо более простые версии того, что я пытался сделать ( activestate ), но это не совсем то, что я пытаюсь сделать, потому что он разбивает число и не использует для этого определенный набор данных.
Вопрос:
Итак, надеюсь, я ясно описал, что я пытаюсь сделать. Что мне нужно прочитать/изучить/узнать, чтобы создать таблицу раздела списка в python с использованием динамического программирования, чтобы он мог масштабироваться? Это просто хобби и не зависит от времени, но я чувствую, что работаю над этим более 3 месяцев, и каждый раз я сталкиваюсь с проблемами дизайна, которые заставляют меня начинать с нуля. Как я могу построить это правильно (чтобы увидеть мой неправильный способ, см. мою ссылку выше)? Я погуглил и нашел решения проблемы с рюкзаком и проблем с разделами, но они, похоже, больше подходят для школьной работы и на самом деле не предназначены для масштабирования с большими наборами данных.
Надеюсь, кто-то может дать мне представление, но, тем не менее, спасибо за чтение этого.