![]() |
|
![]() ![]() ![]() |
|
rash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Требуется сравнить два n-значных числа, где n может быть от 100 до 1000.
Подскажите, пожалуйста, алгоритм выполнения. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
если числа представлены строкой, тогда
1. сравнить по длинне строк 2. сравнить по первому символу 3. сравнить по 2 символу и т.д. переходы между пунктами если ответ сравнения , равны -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
самый обычный:
сначала сравниваем старшие разряды если они разные - они и определяют, какое число больше если одинаковые - продолжаем со следующими разрядами если оказались все равны - значит равны... -------------------- qqq |
|||
|
||||
rash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
И этой проверки достаточно, чтобы сказать, что строка string1 больше строки string2 |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
rash, уточнять надо какое именно сравнения те надо
а вообще может и сказать , все равно имхо везде так делается -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
rash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Имеется ввиду сравнение как между 5 и 2, т.е. какое из представленных длинных чисел больше. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
дык можно сравнивать равно или не равно! че ответ не подошел который дали? сравнивай поразрядно , от старшего , но больше меньше -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
но небольшое замечание: я предполагал, что длины обоих чисел одинаковые (т.е. дополнено нулями по необходимости), если разные - то, конечно, надо смотреть на длины чисел (точнее, длины их значащих частей, т.е. игнорируя нули в старших разрядах) -------------------- qqq |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
можно использовать вероятностный алгоритм
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
а поподробнее? а то интересно... -------------------- qqq |
|||
|
||||
rash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Очень интересно.
Как с помощью этого алгоритма сравнить, предположим, два 400-разрядных числа. |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Вероятностный алгоритм:
1) стороны случайно равновероятно выбирают лог(х) битов числа и передают эти биты и их индексы друг-другу если все совпало ответ да, числа идентичны, иначе ответ нет. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
Silent |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
"Вероятностный метод" - а если будут строки "11001..." и 10010..." и выберем n-3-й разряд? Никакого другого способа, кроме лобового использовать нельзя.
Пусть длинное число хранится стандартным способом. Тогда сравнение будет выглядеть так (C++): bool equal(int[] a, int[] b){ if (a[0]!=b[0]) return false; else { int i=a[0]; while ((i>0)&&(a[i]==b[i])) i--; return (i==0); } } или Pascal: Function equal(a,b:myar):boolean; var i:integer; begin if a[0]=b[0] then equal:=false else begin i:=a[0]; while (i>0)and(a[i]=b[i]) do dec(i); equal:=i=0; end; end; |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Уточню. Пусть необходимо ответить на вопрос две строки идентичны или отличаются в более чем х% мест. Тогда можно использовать вер-й алгоритм. Но это уже из области "property testing". Вероятностный алгоритм для такой задачи был бы более уместен в модели "communication complexity", когда два человека обладающие строкам и желающие их проверить, разделены гиганстким растоянием и передача инф-ии между ними очень дорогая. Тогда сущ-ет красивый вер-й алгоритм, позволяющий минимизировать переданную информацию до логарифма от длины строки. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
rash, определись на каком те это языке надо , и какой формат входных и выходных данных и тогда организуем
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
rash |
|
||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Спасибо за содействие. Реализацию сравнения пишу на C++.
Пользователю предлагается ввести два сверхдлинных числа (длину строки он выбирает сам. Предположим, что строки одинаковые и равны, пусть, 400 знаков), затем, должен последовать ответ, что-то вроде, "Из введённых чисел, число string1 больше string2". примерно так. Хотя, могут быть варианты. Функция сравнения может возвращать, скажем, число string (которое больше) и разницу этого сравнения (на сколько больше). ВВод строки, предполагаю, будет не более 500 символов. |
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
в строках только целые числа правильно, если да то завтра выложу ф_цию сравнения, если кто быстрее не сделает,
кса строки это std::string или char * ? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
rash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Совершено верно, строка (std::string) должна быть представлена целыми цифрами,
Вот, примерно так. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
Это сообщение отредактировал(а) Romikgy - 8.10.2006, 17:49 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
rash |
|
||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
За код сравнения длинных чисел большое спасибо.
есть только, два вопроса: Назначение функций
и
|
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
удаляет начиная с позиции , н колво символов (у меня в коде убирает ни чего не значащие нули) просто просит типа Press any key to continue.... некоторые заменяют getchar(); из библиотеки <conio.h> (было в падло еще одну библу подключать) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
rash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Благодарю за помощь в решении этого вопроса.
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: -1 Всего: 5 |
rash откуда тьі?
просто такая задача недавно звучала у нас. |
|||
|
||||
rash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
если это так, то я пренебрёг поиском по сайту. Сорри.
Если вас не затруднит, укажите, пожалуйста, путь к этой задаче. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |