Вниз  Java-программирование (1-ые посты)
- 23.02.2015 / 02:35
Addlient_Shaym
  Пользователь

Addlient_Shaym 
Сейчас: Offline
Kalter, Так?
  1. int[] firstArray = {2, 3, 5, 7, 13};
  2. int[] secondArray = {1, 1, 2, 3, 5, 8, 13, 21};
  3. for (int i = 0; i < firstArray.length; i++) {
  4. for (int s = 0; s<secondArray.length; s++){
  5. if(firstArray[i]==secondArray[s])System.out.println(secondArray[s]);
  6. }
  7. }
Компилятора под рукой нет, так что потестить не могу, но вроде ошибок нет. Только меня несколько напрягает цикл в цикле - не лучшее решение с точки зрения оптимизации, не так ли?
- 23.02.2015 / 02:58
Kalter
  Пользователь

Kalter 
Сейчас: Offline
Addlient_Shaym, да, теперь верно. А с точки зрения оптимизации - зависит от конкретной задачи. Оптимизировать можно по-разному: как по скорости, так и по потреблению памяти (и зачастую весьма трудно находить баланс). Данное решение можно считать правильным.

Так же стоит учесть, что сложность алгоритма O(m * n). В условии задачи сказано, что размер массива не превышает 100. Так как сложность алгоритма квадратичная (при m == n), нетрудно вычислить максимальное количество итераций: 100^2 = 10^4. Относительно не много, машина должна справится с этим менее чем за секунду.

Но если увеличить размер массива до 10^10, то количество итераций увеличится до 10^20 (если m == n) - уже не выгодно. Данный способ решения можно оптимизировать, предварительно отсортировав один из массивов, и после уже искать бинарным поиском. Тогда сложность алгоритма будет следующей: O(mlogm + nlogm). Если учесть, что m == n, тогда O(2mlogm).
__________________
 Homo homini penis est.

Изменено Kalter (23.02 / 03:00) (всего 3 раза)
- 23.02.2015 / 16:17
Addlient_Shaym
  Пользователь

Addlient_Shaym 
Сейчас: Offline
Kalter, А если есть два массива, в первом 10 значений, во втором - неизвестно (массив строк загруженных из файла, например), ну т.е. во втором может быть любое кол-во значений.
Нужно записать в отдельный массив(или вектор) все строки из второго массива, которые совпадают со строками из первого массива, причем в той последовательности, в какой они были во втором массиве.
Будет ли разница в скорости если сортировать первый или второй массив?
- 23.02.2015 / 17:56
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Addlient_Shaym, сортировки можно применить и к файлам собсно.
- 23.02.2015 / 23:04
Fantastik
  Пользователь

Fantastik 
Сейчас: Offline
Создал читалку, но не отображает кириллицу. Что делать?
- 23.02.2015 / 23:13
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
__________________
 let live
- 23.02.2015 / 23:24
Fantastik
  Пользователь

Fantastik 
Сейчас: Offline
aNNiMON, А какую кодировку использует нокиа, и как использовать тот класс?
- 23.02.2015 / 23:28
Addlient_Shaym
  Пользователь

Addlient_Shaym 
Сейчас: Offline
Ксакеп, не-не-не, есть допустим массив из 10 строк в которых хранятся теги ("[green]", "[red]", "[blue]", "[yellow]" и т.д.) и есть большой массив строк, начинающихся с этих тегов (неважно из файла или нет). В зависимости от тега, с которого начинается строка, нужно вывести его на экран определенным цветом. Что делать если строк много, а сортировку массива строк использовать нельзя (чтобы текст не перемешался)?
Сортировать массив тегов, и при этом скорость выполнения будет такая же, как была бы при сортировке массива строк?
- 23.02.2015 / 23:56
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Addlient_Shaym, а при чем здесь получение разности двух массивов? Другая задача же, разве нет?

И как ты собрался определять непосредственно цвет текста? Ну, определил, что в массиве есть тег, а что дальше?

Сортировка нужна, чтобы можно было быстрее что-то найти. В java есть Arrays.sort(..,) и Arrays.binarySearch(...); пользуйся ими для массива тегов, если хочешь.

Изменено Ксакеп (23.02 / 23:57) (всего 1 раз)
- 24.02.2015 / 00:20
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Fantastik, обычно UTF-8 или CP1251 (она же win1251), ещё реже CP866 (она же DOS) или KOI-8R.
__________________
 let live
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)