Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 09:37   #1
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию Delphi. Оптимизация алгоритма.

Значит так. Думаю, это тема для товарища Utkin, любителя скоростной работы программы))))

Я написала прогу-игру, которая случайным образом выбирает слово из базы данных и выбрасывает на форму по 1 букве, а пользователь это слово собирает. База упорядочена по алфавиту, на каждую букву алфавита своя таблица.
Имеется 3 уровня сложности по длине слова. Вот алгоритм:
1) Выкидывается случайное число от 1 до 2000
2) Находится данная запись в БД
3) Проверяется длина слова
4) Если длина не удовлетворяет установленной сложности, то повторяется с п.1.

На сложном уровне слова из 8+ букв, а поскольку их не так много, то появляется заметная задержка около 0.2-0.4 сек.

Как бы модифицировать этот алгоритм?
Риндера вне форума Ответить с цитированием
Старый 11.11.2010, 09:53   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Может завести таблицы по длинам слова, а не по буквам алфавита? Насколько я понял, алфавит в игре роли не играет?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.11.2010, 09:55   #3
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Вручную перелопатить 2000 слов - нудно) Можно это кодом сделать?
Риндера вне форума Ответить с цитированием
Старый 11.11.2010, 10:09   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Риндера Посмотреть сообщение
Вручную перелопатить 2000 слов - нудно) Можно это кодом сделать?
Засунуть в Экзель сможешь? Там составь формулу по сортировке слов Длина текста кажись определяется по ДЛСТР Можно на каждую длину свою формулу и по колонкам получить нужные слова. Далее закинуть по столбацм в ворд, преобразовать в текст и повыкидывать лишние Энтеры (если будут). А там можно сохранить в голый txt (или CSV, смотря что нужней)
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.11.2010, 10:14   #5
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Я просто кроме БД в делфи ни с чем не работала...
Но редактировать в экселе - хорошая мысль.
Риндера вне форума Ответить с цитированием
Старый 11.11.2010, 10:18   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Риндера Посмотреть сообщение
Но редактировать в экселе - хорошая мысль.
Там не сложно. Перекиньте слова по ячейкам в один столбик (можно и в строку, но не удобно). Слева внесите формулу состоящее из условия ЕСЛИ, где в качестве условия проверяете длину слова, а возвращайте либо пустую строку либо само слово. В следующем столбце уже на один символ больше и т.д. Работа чисто механическая. Опять же с Экзеля в БД засунть удобно (ну в некоторые), есть вроде даже напрямую сохранить как файл БД...
Вот образец формулы:
Цитата:
=ЕСЛИ(ДЛСТР(A1)=2;A1;"")
При условии, что столбик со словами находится в А...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 11.11.2010 в 10:30.
Utkin вне форума Ответить с цитированием
Старый 11.11.2010, 10:36   #7
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Ы, база с тремя таблицами для 3 уровней сложности весит в 7 раз меньше прошлой))) Крутяк.
Риндера вне форума Ответить с цитированием
Старый 11.11.2010, 10:39   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Риндера Посмотреть сообщение
Ы, база с тремя таблицами для 3 уровней сложности весит в 7 раз меньше прошлой))) Крутяк.
Нам интересна скорость работы... Изменяй алгоритм в соответствии с новыми условиями.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.11.2010, 10:43   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
База упорядочена по алфавиту, на каждую букву алфавита своя таблица.
В Оракле (это я к примеру) есть неплохая особенность создавать индекс по функции.
Если твоя БД поддерживает такое создай индексы по функциям длин слов - 8 индексов всего.
Если не поддерживают сделай дополнительное поле, куда пихай длину слова - поиск по числу будет быстрее чем по строке - отсюда задержка уменьшится значительно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2010, 10:54   #10
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

У меня для каждой записи - свой номер, по которому и идет поиск.
Теперь видимой задержки нет, спасибо за помощь. Обоим =)
Риндера вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оптимизация алгоритма выделения слов furstenberg Общие вопросы Delphi 12 02.02.2010 07:44
Разработка алгоритма сортировки методом простых вставок Delphi Hetsil Помощь студентам 0 12.12.2009 21:51
доработка алгоритма... Sota Помощь студентам 2 13.06.2008 15:45
Изменения алгоритма delphi_beginner Общие вопросы Delphi 2 13.05.2007 21:27