Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сформировать массив,содержащий подмножество эл, В C# (framework 2.0) 
V
    Опции темы
Optimus
Дата 23.3.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 1
Всего: 14



Цитата(marcusmae @  19.3.2008,  22:42 Найти цитируемый пост)
как методом деления отрезка пополам ищется существующее решение f(x) = 0 на отрезке. Это возможно, поскольку массив по условию отсортирован.

Как я понял, это бинарный поиск, тогда можно использовать List<int>, у него есть метод BinarySearch().
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
marcusmae
Дата 23.3.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата(Optimus @  23.3.2008,  19:53 Найти цитируемый пост)
Как я понял, это бинарный поиск, тогда можно использовать List<int>, у него есть метод BinarySearch().


Да, но не совсем. Во-первых, массив, а не список, а во-вторых поиск не во всём массиве, а в постоянно сужающемся подмножестве его элементов.

Это сообщение отредактировал(а) marcusmae - 23.3.2008, 20:41


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Optimus
Дата 23.3.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 1
Всего: 14



Цитата(marcusmae @  23.3.2008,  20:40 Найти цитируемый пост)
поиск не во всём массиве

Код

public int BinarySearch (
    int index,
    int count,
    T item,
    IComparer<T> comparer)


Двоичный (бинарный) поиск элемента в массиве

Это сообщение отредактировал(а) Optimus - 23.3.2008, 21:09
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
marcusmae
Дата 23.3.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Optimus, Вы правы - Array.BinarySearch (не List<int>)

Это сообщение отредактировал(а) marcusmae - 23.3.2008, 21:22


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Optimus
Дата 23.3.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 1
Всего: 14



Да, так долго работал с List<> что забыл про Array  smile 
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
sedoy
Дата 24.3.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Если я правильно понял, то так должна соблюдаться идея marcusmae (изложенная в представленной им ранее реаализации):
Код

static int[] retC(int[] source, int[] filter, out int count)
        {   count=0;
            int[] result = new int[source.Length - filter.Length];
            int indBeg = Array.BinarySearch(source, filter[0]); count++;
            int indEnd = Array.BinarySearch(source, filter[filter.Length - 1]); count++;
            if (indBeg > 0) for (int i = 0; i < indBeg; i++) {result[i] = source[i]; }
            int ifrom = indBeg; int to; int fi = 1; int ri = indBeg;
            while ( indEnd-(ifrom+1) > filter.Length-1-fi ) {
                to = Array.BinarySearch(source, filter[fi]); count++;
                for (int i = (ifrom + 1); i < to; i++) { result[ri] = source[i]; ri++; }
                fi++; ifrom = to;
            }
            for (int i = (indEnd + 1); i < source.Length; i++) { result[ri] = source[i]; ri++; }
            return result;
        }

 если это так, то может кому тоже пригодиться  smile 
PM MAIL   Вверх
marcusmae
Дата 24.3.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



я извиняюсь за занудство, но НЕТ, не соблюдается smile Читайте внимательнее предыдущие посты.

Это сообщение отредактировал(а) marcusmae - 24.3.2008, 13:37


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.