purebasic.info

PureBasic forum
Текущее время: Ср янв 17, 2018 4:18 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: Пт авг 25, 2017 2:37 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб авг 05, 2017 8:34 pm
Сообщений: 41
Откуда: Россия, Брянск
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Здравствуйте!
Передо мной встала задачка, на первый взгляд кажущаяся элементарной...
Есть цифры(или символы) A,B,C,D,E их надо сравнить с множеством а1,b1,c1,d1,e1.....аn,bn,cn,dn,en ну и соответственно при равенстве выдать результат - мол совпадение найдено.
Казалось бы проще не придумаешь, если только не учитывать то, что n - огромное число, а сравнить надо очень быстро - фактически мгновенно.
Подобные задачи, если я не ошибаюсь, выполняющийся в том же WORD-e (или даже в любом браузере) при проверки орфографии. Есть слово в базе - хорошо, нет - ошибка.
Но КАК это делается????
Сочетание A,B,C,D,E(или а1,b1,c1,d1,e1) вполне можно считать "словом". Сравнить "слово" A,B,C,D,E со "словом" а1,b1,c1,d1,e1 труда не составляет, НО если таких "слов" миллиона 2-3???
Подскажите, пожалуйста, в каком направлении думать - несколько дней уже голову ломаю.
Если выражать A,B,C,D,E числами, то они обладают следующими свойствами:
Диапазон значений:
А от 0 до 1000
В от 0 до А
C,D,E от 0 до 100
т.е. сочетание C,D,E вполне можно представить в виде строки в 3 байта, а сочетание А,В в виде строки в 4 байта.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 25, 2017 5:01 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 284
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
Селекин Сергей писал(а):
Подскажите, пожалуйста, в каком направлении думать - несколько дней уже голову ломаю.


На ваши вопросы очень сложно отвечать. Вам бы обычный учебник информатики в руки взять с азами обработки информации. Работа с большими (всё в мире относительно) объёмами информации в оперативной памяти доступна не так давно. Изначально, да и сейчас в зависимости от объёмов данных и цены решения, прежде всего алгоритмы строятся на сканировании внешних носителей и при необходимости сохранения на них же результатов. И способов автоматизации этих действий придумано масса, включая такое понятие как СУБД. И не существует таких понятий как мгновенное сравнение чего то с чем то, за всеми мгновениями стоят алгоритмы поиска(индексации) с разной степенью эффективности и затем сравнения.

p.s. Или попытайтесь объяснить что вы хотите получить в прикладном плане без своих попыток алгоритмизации.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 25, 2017 7:51 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб авг 05, 2017 8:34 pm
Сообщений: 41
Откуда: Россия, Брянск
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
p.s. Или попытайтесь объяснить что вы хотите получить в прикладном плане без своих попыток алгоритмизации.

Как ни странно, эта задача ещё сложнее :)
А понимать понимаю, что должно получиться в конечном результате, а высказать (сформулировать) правильно не могу. Представьте, что Вы собираете человека по кваркам :) Вы знаете как должен функционировать мозг, сердце, печень и т.п.. И Вы запнулись где-то на уровне клетки... ох трудно же Вам будет объяснить что у Вас должно получиться в конечном итоге :)

А вот переформулировать задачку попытаюсь...
Представьте себе город, где номера домов даются по количеству квартир. Ну например, дом №10 состоит из 10-квартир, №100 из 100-а. Так вот номер дома это А.
Номер квартиры в доме - В.
С,D,E - Характеристики конкретного человека живущего в квартире В дома А (Возраст, рост, вес)
Причём в одной квартире, может проживать целый цыганский табор :D И у каждого свой возраст, рост, вес.
Производим перепись населения по всему городу....
Получаем файлик примерно такого вида:
а1,b1,c1,d1,e1
а2,b2,c2,d2,e2
а3,b3,c3,d3,e3
************
Только размером примерно в 1000000 строк.
В каждой из которых по сути написано: В Доме №А(в котором a квартир), в квартире b живет человек с возрастом c, Ростом d и весом e :)
............................................................................................................
А теперь к нам приходит запрос из какого-то ведомства: Живет ли в такой-то, квартире такого-то дома человек с такими-то характеристиками????
Вот смысл задачи!

Цитата:
На ваши вопросы очень сложно отвечать.

Было бы просто - не задавал бы, а справился бы сам :)
Цитата:
Работа с большими (всё в мире относительно) объёмами информации в оперативной памяти доступна не так давно

Знаю сам начинал с Электроника БК 0010-01 ещё в 1990г. 640 Кб ОЗУ.
Цитата:
алгоритмы строятся на сканировании внешних носителей

Сразу вопрос по теме: есть ли функции, позволяющие чтение фала не с первой строки, а скажем с 10-той. Не с байта в файле, как
Код:
1
FileSeek

а именно со строки?
И второй вопрос есть такое понятие "символ конца строки" в файле...
Код:
1
WriteStringN


Из хелпа:
Цитата:
Эта функция записывает в файл строку текста, (к концу которой добавляется символ конца строки) в формате определяемом переменной Flags

Что это за символ??? Пробел, например, CHR(32), если не ошибаюсь.. а это???
Цитата:
И не существует таких понятий как мгновенное сравнение чего то с чем то

Верно но кода мы нажимаем CTR+F в браузере и начинаем искать текст на странице - результат кажется нам мгновенным.
Цитата:
за всеми мгновениями стоят алгоритмы поиска(индексации) с разной степенью эффективности и затем сравнения.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 25, 2017 8:25 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6220
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
По сути вам уже сказали, что существуют СУДБ - раздел справки Database
Не стоит изобретать велосипед, проще написать программу, которая ваши текстовые файлы "загонит" в БД, с ней и работать.
Функций, позволяющих чтение файла не с первой строки, а скажем с 10-той не существует.
Прежде всего понятие "символ конца строки" индивидуально для разных систем, в Win это 2 символа - CR и LF соотв. код 13 и 10.
Штатный поиск в строке это FindString - работает довольно быстро(на фоне примера поиска на странице в браузере :D ), на буржуйском форуме есть несколько тестов где сравнивается самописные функции со вставками ассемблера, поиска в памяти и т.п. при желании можете найти.

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 25, 2017 8:50 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб авг 05, 2017 8:34 pm
Сообщений: 41
Откуда: Россия, Брянск
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
По сути вам уже сказали, что существуют СУДБ - раздел справки Database
Не стоит изобретать велосипед, проще написать программу, которая ваши текстовые файлы "загонит" в БД, с ней и работать.

Ни разу не работал с БД, мало того, в глаза их не видел :(


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 25, 2017 9:08 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6220
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Селекин Сергей писал(а):
Ни разу не работал с БД, мало того, в глаза их не видел :(

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

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 25, 2017 9:18 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб авг 05, 2017 8:34 pm
Сообщений: 41
Откуда: Россия, Брянск
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
Работа с большими (всё в мире относительно) объёмами информации в оперативной памяти

Если верить вот этому коду:
Код:
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
Dim m(4)
Dim ssiv$(499500)
If OpenFile(0, "result1.log")
  While Eof(0) = 0
    a$=ReadString(0)
     Num=1
    cost=1
    While Num<6
      b$=Mid(a$,cost)
      V=Val(b$)
      cost+Len(Str(v))+1
      If b$<>"," And b$<>" "
        m(Num-1)=v
        Num+1
      EndIf
    Wend
   
     s=(m(0)-1)*m(0)/2-m(0)+m(1)
     A1$=Chr(m(2)+1)
     A2$=Chr(m(3)+1)
     A3$=Chr(m(4)+1)
     A4$=A1$+A2$+A3$
     ssiv$(s)=ssiv$(s)+A4$
    st+1
    Wend
    CloseFile(0)  
  EndIf
 For a=0 To 499500
  If Len (ssiv$(a))
    C+Len (ssiv$(a))
   EndIf
Next a
Debug c


Массив с полностью загруженными и уже распределёнными данными из файла в которых осуществить поиск проще пареной репы занял 2679999 байт, если я не ошибаюсь, но:
1. так ли это???
2. А жаба подло душит... всё таки оперативки ушло до фига... и это только 1 файл из 3-х. :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 25, 2017 10:33 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 284
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
Может вы и начинали с БК, но у вас пробел(дыра) в базовых понятиях. То что для вас сложно это из разряда курса школьной информатики.
Т.е. это элементарно и поэтому СЛОЖНО учить дышать или ноги переставлять..., а не то что вы подумали, что сложно понять что вы хотите.
А если пример с квартирами и жильцами близок к тому что вам нужно, то прямой путь в https://ru.wikipedia.org/wiki/SQL , но сначала всё равно за парту.

Или ещё раз, вместо вот этого
Представьте себе город, где номера домов даются по количеству квартир. Ну например, дом №10 состоит из 10-квартир, №100 из 100-а. Так вот номер дома это А.
Номер квартиры в доме - В.
С,D,E - Характеристики конкретного человека живущего в квартире В дома А (Возраст, рост, вес)
Причём в одной квартире, может проживать целый цыганский табор :D И у каждого свой возраст, рост, вес.
Производим перепись населения по всему городу....
Получаем файлик примерно такого вида:
а1,b1,c1,d1,e1
а2,b2,c2,d2,e2
а3,b3,c3,d3,e3
************
Только размером примерно в 1000000 строк.
В каждой из которых по сути написано: В Доме №А(в котором a квартир), в квартире b живет человек с возрастом c, Ростом d и весом e :)
............................................................................................................
А теперь к нам приходит запрос из какого-то ведомства: Живет ли в такой-то, квартире такого-то дома человек с такими-то характеристиками????
Вот смысл задачи!


Напишите что конкретно вам нужно сделать без допустим и например.

p.s.
Селекин Сергей писал(а):
Знаю сам начинал с Электроника БК 0010-01 ещё в 1990г. 640 Кб ОЗУ.

640Кб на БК это из параллельной вселенной ))))))


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB