Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Задачка   Найти похожие ветки 

 
default ©   (2005-11-13 19:34) [0]

За семь сравнений отсортировать пять разных чисел


 
Zeqfreed ©   (2005-11-13 19:47) [1]

А за нуль сравнений считается?


 
default ©   (2005-11-13 19:48) [2]

допустимая операция над числами тут одна: попарное сравнение(ответ: больше, меньше)


 
Zeqfreed ©   (2005-11-13 19:59) [3]

default ©   (13.11.05 19:48) [2]
Не, ну просто за нуль сравнений можно, зачем нам 7 лишних?


 
DrPass ©   (2005-11-13 20:01) [4]


> default ©   (13.11.05 19:34)  

А с напрягалкой мозгов проблема?


 
default ©   (2005-11-13 20:02) [5]

Zeqfreed ©   (13.11.05 19:59) [3]
покажи что ты там придумал


 
default ©   (2005-11-13 20:03) [6]

DrPass ©   (13.11.05 20:01) [4]
это не призыв о помощи, кому интересно решают кому нет гуляют в сторонке


 
MBo ©   (2005-11-13 20:05) [7]

Хорошая задачка - очень трудная.


 
Zeqfreed ©   (2005-11-13 20:11) [8]

default ©   (13.11.05 20:02) [5]
Это не я придумал, это называется сортировка подсчетом.

function Sort(const Source : TWordArray) : TWordArray;
var
i, j, idx : Integer;
cntarr : array[0..High(Word)] of Word;
begin
for i := 0 to High(Word) do begin
 cntarr[i] := 0;
end;

for i := Low(Source) to High(Source) do begin
 cntarr[Source[i]] := cntarr[Source[i]] + 1;
end;

idx := 0;
for i := 0 to High(Word) do
 for j := 1 to cntarr[i] do begin
  Result[idx] := i;
  Inc(idx);
 end;
end;


 
Zeqfreed ©   (2005-11-13 20:12) [9]

Zeqfreed ©   (13.11.05 20:11) [8]
type
 TWordArray = array[0..4] of Word;


 
default ©   (2005-11-13 20:20) [10]

MBo ©   (13.11.05 20:05) [7]
кстати, Борис, хотел спросить: вторая задачка в Ваших пятничных решается на компе или есть короткий перебор
я вижу моменты на которых можно прилично сократить перебор, но есть ли какая тонкость которая даёт возможность быстро дать ответ на вопрос задачи?


 
default ©   (2005-11-13 20:23) [11]

Zeqfreed ©   (13.11.05 20:11) [8]
в условии не сказано что только целые сравниваются


 
MBo ©   (2005-11-13 20:30) [12]

>default ©   (13.11.05 20:20) [10]
>вторая задачка в Ваших пятничных решается на компе или есть короткий перебор

Если не найти правильный путь, то на компе нереально или очень долго, а если найти - то утверждается, что можно и на бумаге. Мне не удалось с наскока.


 
default ©   (2005-11-13 20:38) [13]

MBo ©   (13.11.05 20:30) [12]
вот что пока есть
можно сугубо аналитически показать что в сотом подъезде дома любой этажности нет престижных квартир
перебирать этажи домов разной этажности можно за разумное время
на второй этаж уйдёт где-то 4*30=120c
на третий 6*30=180c
на четвертыё 8*30=240с
и тд
уже не так мало времени уйдёт


 
Иван Шихалев ©   (2005-11-14 01:30) [14]


> default ©   (13.11.05 19:34)


Сортировать обязательно на месте?


 
Fenik ©   (2005-11-14 01:49) [15]

Пока только за 8 сравнений получается...


 
Fenik ©   (2005-11-14 01:51) [16]

> Иван Шихалев ©  (14.11.05 01:30) [14]
> Сортировать обязательно на месте?


А где ещё можно??


 
default ©   (2005-11-14 19:21) [17]

так никто и не догадался?;)


 
Sandman29 ©   (2005-11-15 12:21) [18]

default ©   (14.11.05 19:21) [17]

Давай уже ответ, не томи душу :)


 
MBo ©   (2005-11-15 12:50) [19]

>Sandman29 ©   (15.11.05 12:21) [18]
>Давай уже ответ, не томи душу :)

Задача трудная, но интересная ;)
7 сравнений дают 7 бит информации, т.е. 128 возможных исходов, а перестановок 5 чисел - 5!=120, т.е. видно, что в принципе возможно составить сеть принятия решения. Обозначим числа a,b,c,d,e.
Вначале сравним и переставим при необходимости пары
A<B
C<D
теперь меньшие из этих пар:
A<C
Получили:
b>a<c<d
Теперь оставшееся e сравниваем с С и в зависимости от результата выполняем еще три сравнения - заранее неопределенные.
Дальше писать?


 
Sandman29 ©   (2005-11-15 13:03) [20]

MBo ©   (15.11.05 12:50) [19]

Ну до этого шага я тоже дошел :)
Вот как раз дальше самое интересное и начинается. Особенно с учетом того, что иногда теряется часть информации - например, при сравнении E с C мы используем методику деления пополам, но середины в последовательности с четным количеством элементов нет.


 
MBo ©   (2005-11-15 13:13) [21]

>иногда теряется часть информации
Да, это так, варианты не точно пополам делятся, но у нас есть запас в несколько долей бита ;)

После трех сравнений я уже выписывал возможные варианты на бумаге и строил дерево снизу вверх (от листьев).


 
MBo ©   (2005-11-15 13:41) [22]

Если не запутался, то что-то в этом роде:
1   E<C
1.1  B<C
1.1.1 E<A   EABCD
1.1.2  E>A  
1.1.2.1    E<B   AEBCD
1.1.2.2    E>B   ABECD
1.2  B>C
1.2.1   A<>E   B<>D    

2. E>C
 D<>E
(B<>E или B<>C) или (B<>D или еще что там осталось)


 
Sandman29 ©   (2005-11-15 14:18) [23]

MBo ©   (15.11.05 13:41) [22]

Согласен, получается. Спасибо.


 
default ©   (2005-11-16 18:53) [24]

MBo ©   (15.11.05 13:41) [22]
рано ответ дали! ну да ладно
а задача в принципе не сильно долгим перебором решается
(ставлю под сомнение пост [7])
можно было так:
пойдём с конца, то есть сколько должно быть вариантов перед 7 сравнением чтобы гарантировано оно дало ответ на вопрос задачи
это 2 или 1
перед шестым сравнением должен иметь место один из вариантов
4(2:2),3,2,1
a:b означает, что должно существовать сравнение дающее разбиение набора вариантов(размера a+b) в отношении a к b
перед пятым сравнением должен быть один из вариантов
8(4:4),7(3:4),6(2:4,3:3),5,4,3,2,1
и тд до 2 сравнения(назовём эту последовательность - фильтром)
до второго сравнения потому что нам пофиг какое число с каким сравнивать на первом сравнении, обозначим меньшее из них a, а большее b(по результатам первого сравнения)
остальные c,d,e
итак второе сравнение мы можем провести по следующим вариантам:
c,d;c,e;d,e;a,c;b,c;a,d;b,d;a,e;b,e
для каждого варианта беглым взором подсчитываем разбиентие k1:k2
и смотрим подходит ли данный вариант по фильтру
фильтр оставит только сравнения
c,d;c,e;d,e и тд
фильтр даёт нам возможность заметно сократить перебор


 
Marser ©   (2005-11-16 19:59) [25]

Не бейте только ногами, но я, кажется на алголисте, читал, что меньше чем за n-1 простых сравнений n чисел не отсортировать никак.


 
default ©   (2005-11-16 20:13) [26]

Marser ©   (16.11.05 19:59) [25]
это задачу сабжа не делает неразрешимой


 
Marser ©   (2005-11-16 20:18) [27]

default ©   (16.11.05 20:13) [26]
Да я понял :-)


 
Igorek ©   (2005-11-17 09:39) [28]


> Marser ©   (16.11.05 19:59) [25]
> Не бейте только ногами, но я, кажется на алголисте, читал,
>  что меньше чем за n-1 простых сравнений n чисел не отсортировать
> никак.

Конечно. Как минимум каждое надо сравнить. :)


 
Igorek ©   (2005-11-17 10:25) [29]

Раз решение уже написали, то приведу две ссылки:
http://www.rsdn.ru/Forum/?mid=110745 - здесь решалась
http://www.rsdn.ru/Forum/?mid=486107 - здесь безуспешно пытались обобщить


 
Fenik ©   (2005-11-17 21:45) [30]

А вот другая задача: для массива N разных чисел найти наименьшее число сравнений, с помощью которых этот масив можно отсортировать. :)


 
default ©   (2005-11-17 21:50) [31]

Fenik ©   (17.11.05 21:45) [30]
это нерешенная в науке доселе задача, насколько мне известно



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.037 c
4-1129004207
Zert
2005-10-11 08:16
2005.12.11
например в чужое окно можно записать значение, а как прочесть из


14-1132564096
stone
2005-11-21 12:08
2005.12.11
Долой кактусы, даешь пирамиды :))


14-1132641929
Layner
2005-11-22 09:45
2005.12.11
Oracle бесплатно


1-1131652868
Layner
2005-11-10 23:01
2005.12.11
Узнать название родителя у родителя виз. комп.


2-1132664750
JTAG
2005-11-22 16:05
2005.12.11
Народ еще вопрос по командной строке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский