|
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 38
|
||||||
Слияние файлов05.11.2022, 10:49. Показов 765. Ответов 17
Метки нет (Все метки)
У меня есть 4 файла с отсортированными сериями. Мне нужно первые числа из кажого файла сравнивать между собой и наименьший записать в 5 файл. Затем нужно поставить указатель в том файле где нашли наименьший и взять следуещее число и сравнивать с прошлыми числами из других фалов и также сравнивать и наименьший записать в 5 файл. И так пока все числа из всех файлов не будут записаны по данноому аллгоритму в 5 файл.
Например имеем 4 файла: {89,40,62,75,51,68,18,69,90} {12,99,88,77,94,21} {50,68,4,85,25,29,5} {54,80,2,14} мы сравниваем первые числа из всех файлов. Тобишь: 89, 12, 50, 54. Меньший это 12. Его и вписываем в 5 файл. Затем указатель смещается на следующее число в том файле где стоял прошлый наименьший элемент. То есть бы берем сл.числа: 89, 99,50,54. Меньший это 50. Его и вписываем в 5 файл. Указатель теперь в 3 файле. След.цифры которые мы будем сравнивать это: 89, 99, 68,54. И так далее. Я тут что пробовоал начертить и пока получается выводить только первые числа файлов и найти минимальный элемент среди этих чисел. Ну а дальше я в недоумение. Нужно как то обозначить метку что бы знать из какого файла взять слудующее число. Я думал сделать это при помощи сегмента кода где я нахожу минимальное число. Я запоминаю на каком месте находится это минимальное число. Это и будет номером нашего файла. Помогите пожалуйста Вот мой код:
0
|
||||||
| 05.11.2022, 10:49 | |
|
Ответы с готовыми решениями:
17
Слияние двух отсортированных по убыванию значений элементов файлов F1 и F2 Слияние строк Слияние массивов |
|
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
|
|||||||
| 05.11.2022, 12:13 | |||||||
|
Nolic12, Можно попробовать загрузить все данные с файлов, обработать их и записать вывод в результирующий файл.
Пример ниже загружает каждый файл, вытаскивает из него только числа и помещает эти числа в очередь (Queue). Затем все такие очереди помещаются в один массив. Потом ищем минимальное число на первых позициях для каждой очереди. Добавляем это число в результат и удаляем из той очереди, где оно было. Делаем это всё до тех пор, пока все очереди не окажутся пустыми.
1
|
|||||||
|
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
|
|
| 05.11.2022, 12:48 | |
|
А это некая визуализация происходящего. Где берётся минимальный элемент с начала очереди и мигает, после чего добавляется в результат и удаляется из очереди.
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2021
Сообщений: 38
|
|
| 06.11.2022, 14:33 [ТС] | |
|
samana, немножко не то. в смысле что мне нужно что бы когда какой то файл заканчивался то его последний элемент оставался и сравнивался со всеми остольными пока все файлы не дойдут до конца.
Добавлено через 31 минуту samana, можно ли как то создать условие что если какой то файл дошел до конца то он не должен удалять число, а оставлять для последующего сравнения?
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 06.11.2022, 19:00 | ||
|
Судя по описанию, вы реализуете внешнюю сортировку, а такое условие пустит ее под откос. Например, если последний элемент в файле — на данный момент наименьший, то такой алгоритм уйдет в бесконечный цикл и будет писать одно и то же значение в выходной файл пока не закончится место на диске.
0
|
||
|
|
||
| 06.11.2022, 19:25 | ||
|
1. просматриваем все [0]-е элементы этих массивов и выбираем наименьшее. 2. в том массиве, где найдено наименьшее - инкрементируем индекс, при условии, что не достигли конца этого массива. 3. запоминаем в каком массиве найден минимальный элемент. При следующем просмотре сравниваем уже с [i+1] элементом этого массива. 4. повторяем с п.1. ... И так до того момента, пока все индексы массивов не смогут инкрементироваться, т.к. достигли их длин. Те массивы, что "остановились" раньше выбьют сами себя, т.к. только в одном из них окажется минимальное значение. Или не окажется, по сравнению, например, с самым длинным... Т.е. пока никакого бесконечного цикла не прослеживается... Добавлено через 1 минуту Для удобства, можно представить эти 4 массива в виде одного int[][].
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 06.11.2022, 21:33 | ||||
|
А что если этот последний элемент — минимальный из 4-х? По-хорошему он должен записываться на выход, а массив/файл исключаться из дальнейших сравнений как пустой/завершенный — как это делается во внешней сортировке и как вы предложили. Но автору, похоже, не так надо.
0
|
||||
|
|
|||
| 06.11.2022, 21:51 | |||
|
Если в процессе поиска минимального эл-та такой окажется в массиве более коротком, чем другой, то он там и остается для дальнейших сравнений. Автор, действительно, не до конца понимает сути необходимого алгоритма, и всех, в добавок, путает какими-то "удалениями", хотя это вовсе не требуется. Добавлено через 3 минуты Добавлено через 42 секунды А этот нет, т.к. индекс уже стоит на его последнем элементе.
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 06.11.2022, 22:05 | |
|
0
|
|
|
|
||||||||||||
| 06.11.2022, 22:22 | ||||||||||||
|
Это значение мы берем и пишем в некий 5-й массив, затем это число (элемент) уже выбывает из сравнения. Следовательно, индекс этого массива увеличивается, дабы сравнивать уже число i+1. Далее, обнаружилось, что минимальный элемент оказался в массиве jn[0], теперь индекс минимального значения по 'j' смещается к n-ному массиву. Его число так же выбывает и уже индекс следующего поиска в этом массиве так же увеличивается на единицу. И так до тех пор, пока индекс в самом длинном массиве не достигнет конца. Добавлено через 10 минут Образно: возьмем исходные данные из файлов автора и вольем их в зубчатый.
Увеличивая j мы каждый раз будем проверять, не достиг ли source[i] конца своей длины... Если нет, то j++ Далее, следующие проверки...
0
|
||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 06.11.2022, 22:42 | |
|
wizard41, да я знаю как работает внешняя сортировка.
Мне непонятно желание автора продолжать использовать последний элемент каждого массива в сравнении с элементами других массивов и ваше с этим согласие. Какой в этом смысл? Массив закончился - все, его можно игнорировать.
0
|
|
|
|
||||
| 06.11.2022, 22:49 | ||||
![]() Добавлено через 1 минуту Добавлено через 5 минут
0
|
||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 06.11.2022, 23:14 | |||
|
Зачем продолжать этот элемент сравнивать с элементами других массивов на дальнейших итерациях, если он уже обработан и выведен? Добавлено через 2 минуты wizard41, на всякий случай, а то может между нами непонимание из-за противоречий в условии и в приведенных для примера данных:
0
|
|||
|
|
|||
| 06.11.2022, 23:21 | |||
|
Я немного отошел от предмета дискуссии: первоначально я, собственно, подверг сомнению ваше высказывание про бесконечный цикл. Который парировал ограниченностью длины самого длинного массива, по достижению которого, все дальнейшие обработки вполне себе прекратятся. Добавлено через 2 минуты
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||
| 06.11.2022, 23:32 | ||||||||||||
|
Если этот последний элемент — минимальный из текущих, то при такой постановке задачи индексы остальных массивов не будут увеличиваться. Ну например: a = { 1, 1 } b = { 2, 3, 4 } c = { 5, 6, 7 } 1. Сравниваются a[0], b[0] и c[0]. 2. a[0] — минимальный и передается на вывод 3. Индекс a увеличивается с 0 на 1. 4. Сравниваются a[1], b[0] и c[0]. 5. a[1] — минимальный и передается на вывод 6. a[1] — последний, но все равно остается в массиве для дальнейшего сравнения с остальными. 7. Сравниваются a[1], b[0] и c[0]. 8. a[1] — минимальный и передается на вывод 9. a[1] — последний, но все равно остается в массиве для дальнейшего сравнения с остальными. 10. Сравниваются a[1], b[0] и c[0]. 11. a[1] — минимальный и передается на вывод 12. a[1] — последний, но все равно остается в массиве для дальнейшего сравнения с остальными. 13. И так далее. Вот нормальная реализация такой сортировки:
0
|
||||||||||||
|
|
|||
| 07.11.2022, 00:00 | |||
![]() Ну ладно. Добавлено через 9 минут Дискуссия пока остается открытой )
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 07.11.2022, 10:03 | ||
|
Попробуйте написать код, реализующий такую сортировку и учитывающий условие автора — костыль же получится, придется дополнительно отслеживать "вот этот массив закончился, но мы все равно его используем, но чтобы не уйти в бесконечку, держим флаги" или что-то вроде этого. Лишние телодвижения.
0
|
||
|
|
|
| 07.11.2022, 15:10 | |
|
0
|
|
| 07.11.2022, 15:10 | |
|
Помогаю со студенческими работами здесь
18
Слияние Word и Excel Слияние двух массивов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|