Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/37: Рейтинг темы: голосов - 37, средняя оценка - 4.65
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297

Определить, являются ли два слова анаграммами

26.09.2010, 15:24. Показов 7942. Ответов 27

Задание: написать программу, которая опеределяет, являются ли два слова анаграммами (т. е. слова, которые содержат только одинаковые буквы в одинаковом колличестве, например, "апельсин" и "спаниель")
Алгоритм:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var s1, s2: string;
 
function is_anagram(s1, s2: string): boolean;
var a1, a2: array [0..255] of byte; i: word; res: boolean;
begin
for i := 0 to 255 do begin
     a1[i] := 0;
     a2[i] := 0;
end;
 
for i := 1 to length(s1) do
     a1[ord(s1[i])] := a1[ord(s1[i])] + 1;
 
for i := 1 to length(s2) do
    a2[ord(s2[i])] := a2[ord(s2[i])] + 1;
 
res := true;
 
for i := 0 to 255 do
    if a1[i] <> a2[i] then begin
        res := false;
        break;
    end;
 
is_anagram := res;
end;
 
begin
readln(s1);
readln(s2);
if is_anagram(s1, s2) then write('they are')
else write('they aren''t');
readln;
end.
Нужно сравнять его с грязью. Ну, или нужна обьективная критика, кому как нравится. 100 000 выполнений этой функции должны происходить меньше, чем за 3 секунды.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.09.2010, 15:24
Ответы с готовыми решениями:

Проверить, являются ли введенные слова анаграммами друг друга
Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв. Во входном файле два слова в отдельных...

Определить, являются ли два заданных слова анаграммами
Не требую полного кода. Я просто хочу понять, как ее решить. Просто алгоритм. * Слова, составленные из одних и тех же букв, называются...

Являются ли два слова анаграммами
являются ли два слова анаграммами??

27
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
26.09.2010, 20:24  [ТС]
и ещё раз, спасибо
Вложения
Тип файла: rar optimize-it.rar (42.6 Кб, 19 просмотров)
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
26.09.2010, 20:40
Не,а. Как я и предполагал, тот цикл вообще ни играет роли никакой. Я вот просто заменил тело циклов основных на такое:
Pascal
1
2
3
4
5
6
7
8
9
10
for i := 1 to n - 1 do
        for j := i + 1 to n do
        if length(s[i]) = length(s[j]) then
                if is_anagram(s[i], s[j]) then begin
                        r[l] := s[i];
                        r[l+1] := s[j];
                        Inc(l,2);
                        {add_word(r, l, s[i]);
                        add_word(r, l, s[j]);}
                end;
Тоесть без вызова add_word, а просто тупо сразу в массив выходной заношу. И сравнил разницу выполнения. Разница состовляет ~50 ms, что ничто вообщем-то. Смысла нет.
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
26.09.2010, 20:44  [ТС]
Tronix, там есть такой кусок:
Pascal
1
for i := 1 to l do if a[i] = s then goto no_need;
нужно проверить, есть ли уже в массиве такое слово, т. к. анаграмм одного слова может быть много, например, "мама", "аамм", "маам".
А что тогда за слабое место? а то в стандартном паскале нет GetTickCount
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
26.09.2010, 20:49
Хочется сильно пооптимизировать - пользуйтесь профилировщиком.
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
26.09.2010, 20:51
Ну видимо слабое место - это два цикла этих главных:
Pascal
1
2
for i := 1 to n - 1 do
        for j := i + 1 to n do
Я знаю, что в паскале нет gettickcount, но так ты же вроде под FreePascal пишешь? Процедура ассемблерная то под него написана. А если стандартной процедурой паскалевской твоей - то она и тормозит...
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
26.09.2010, 20:56  [ТС]
Tronix, и там тоже его нет. с процедурой не компилируется, если не сложно, выложи fp.ini, под которым у тебя запустилось
Миниатюры
Определить, являются ли два слова анаграммами  
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
26.09.2010, 21:00
А я компилирую прям из командной строки, без IDE.
fpc proga.pas -Mtp

Вот это у меня без проблем так компилируется:
Pascal
1
2
3
4
Uses Windows;
begin
    writeln(gettickcount);
end.
1
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
26.09.2010, 21:02  [ТС]
Tronix, таки опять туплю, приписал досовский модуль и удивляюсь, почему не пашет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2010, 21:02

Ввести с клавиатуры два слова. Проверить, являются ли они анаграммами
Ввести с клавиатуры два слова. Проверить, являются ли они анаграммами, то есть возможно ли из всех букв одного слова составить другое....

Проверить, являются ли слова анаграммами
Привет всем. Помогите, пожалуйста, написать программу на языке Си. Задание: Пользователь вводит два слова (или две строки)....

Составить метод, определяющий, являются ли слова анаграммами
Пожалуйста помогите решить: Объявить метод Anagr(w1, w2), который получает два слова и возвращает true, если слова являются анаграммами...

Вывести слова, которые являются анаграммами, палиндромами
Помогите пожалуйста с анаграммами и палиндромами, полное задание: Пользователь вводит предложение Создайте меню и методы для...

Найти слова, которые являются анаграммами друг для друга
Анагра́мма (от греч. ανα- — «пере» и γράμμα — «буква») — литературный приём, состоящий в перестановке букв или звуков определённого слова...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru