Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 00:29

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 28, 2008 08:46 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
А идея тут простая: если вам часто приходится оперировать со строками, то операция вычисления байта-описателя будет камнем преткновения.
А если не так часто приходится со строками работать предлагаю сделать так:
Старший бит - признак того, что следующий байт снова описатель длины.
Т.Е. старший бит=1, интерпретируем следующий байт как описатель длины строки,
если старший бит=0, то это последний байт в описателе длины строки, а следующий за ним байт уже непосредственно сама строка.
Конечно, если ипользовать различные длины символов, то в первом байте описателе строки можно бит стоящий перед старшим использовать под описание длины символа.

Все зависит от того чего вы хотите.
А как же вы собираетесь обращаться к каждому символу???


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 28, 2008 13:14 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Alexander писал(а):
А идея тут простая: если вам часто приходится оперировать со строками, то операция вычисления байта-описателя будет камнем преткновения.
Ну, автору виднее. Лично я особых проблем не вижу, ни чем не хуже чем работа со счетными строками.
Alexander писал(а):
Старший бит - признак того, что следующий байт снова описатель длины. Т.Е. старший бит=1, интерпретируем следующий байт как описатель длины строки, если старший бит=0, то это последний байт в описателе длины строки, а следующий за ним байт уже непосредственно сама строка.
А теперь почитайте внимательно первый пост. :twisted:
Alexander писал(а):
Конечно, если ипользовать различные длины символов, то в первом байте описателе строки можно бит стоящий перед старшим использовать под описание длины символа.
Задачей не предусмотрено, и автором уточнено что такая функциональность выходит за рамки задачи.
Alexander писал(а):
А как же вы собираетесь обращаться к каждому символу???
Тут речь идет о формате хранения строки. Как аргумент любая строка представляется двумя ячейками стека: ( c-addr u ). Поэтому, чтение n-ного символа при стеке ( c-addr u n ) будет выглядеть:
NIP CHARS + C@
:lol:

_________________
Am I evil? I'm man - yes I am! © James Hatefield


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 28, 2008 14:07 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Forthware писал(а):
Тут речь идет о формате хранения строки. Как аргумент любая строка представляется двумя ячейками стека: ( c-addr u ). Поэтому, чтение n-ного символа при стеке ( c-addr u n ) будет выглядеть:
NIP CHARS + C@

Не совсем то, кто мешает передать только адрес строки, а проводить интерпретацию хранимых данных определенной процедурой.
Ну а что про другое
Forthware писал(а):
А теперь почитайте внимательно первый пост.

Предлагаю отказаться от двоичной системы счисления, взять например основание системы счисления 36, и в старшем бите первого и единственного байта хранить признак системы счисления.
думаю что 36 в степени 7 степени всех удовлетворит, а это позволит хранить если я правильно посчитал 78364164095 байт.
Конечно 36 грубая оценка, можно и поменьше взять чтобы не так много памяти расходовать в пустую, найти так сказать золотую середину


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 28, 2008 18:00 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Alexander писал(а):
Не совсем то, кто мешает передать только адрес строки, а проводить интерпретацию хранимых данных определенной процедурой.
Никто не мешает, только не надо после этого спрашивать:
Alexander писал(а):
А как же вы собираетесь обращаться к каждому символу???
;)
Alexander писал(а):
Предлагаю отказаться от двоичной системы счисления, взять например основание системы счисления 36, и в старшем бите первого и единственного байта хранить признак системы счисления.
Вот это уже интереснее. :) Конечно, при 36-ричной системе, средняя потеря составит около 18 байт (дополнительно к 1 байту самого счетчика) в то время как 4 байтный счетчик имеет потерю 3 байта, что в 6 раз меньше. Поэтому, все строки с длиной более 127 символов в предложенном вами варианте проиграют по компактности всем другим предложенным в этой ветке решениям, причем значительно. 8)
Но идея оригинальна, такой еще не было. Да и реализовать не сложно. :)

_________________
Am I evil? I'm man - yes I am! © James Hatefield


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 28, 2008 19:26 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Alexander писал(а):
А идея тут простая: если вам часто приходится оперировать со строками, то операция вычисления байта-описателя будет камнем преткновения.

в любом случае быстрее чем с ASCIIZ строками ;)
Alexander писал(а):
А если не так часто приходится со строками работать предлагаю сделать так:
Старший бит - признак того, что следующий байт снова описатель длины.
Т.Е. старший бит=1, интерпретируем следующий байт как описатель длины строки,

8) вы написали то же, что есть в ТЗ к данной задачке.

Alexander писал(а):
Все зависит от того чего вы хотите. А как же вы собираетесь обращаться к каждому символу???

это другая проблема.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 31, 2008 18:49 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Forthware писал(а):
Конечно, при 36-ричной системе, средняя потеря составит около 18 байт (дополнительно к 1 байту самого счетчика) в то время как 4 байтный счетчик имеет потерю 3 байта, что в 6 раз меньше. Поэтому, все строки с длиной более 127 символов в предложенном вами варианте проиграют по компактности всем другим предложенным в этой ветке решениям, причем значительно.

Немного уточнения, 1 или 2 старших бита указывают на ту или иную систему счисления, а остальные биты указывает вес, например, для двух бит
00 - двоичная, 01 - третичная, 10 - пятиричная, 11 - семяричная, основание системы - простое число, тогда оставшиеся 6 бит можно использовать под кодирование длины строки, и тут может быть не помешает идея скрытой 1 для увеличения разрядности, как это в сопроцессоре сделано ( пока только озвучил).
Опять же если системы счисления будут близки, то возникает неоднозначность представления данных. А это важно или нет???
И опять появился подводный камень интервал изменения длины строки - очень нелинейный, т.е. с каким шагом будет меняться длина строки.
Но в два байта уложится всегда можно:
1) для строк длиной до 127 символов включительно описатель 1 байт, а для всех остальных два байта, но уже не в двоичной системе.
2) или первый байт система счисления, а второй как весовая функция. В этом случае накладные расходы прямопропорциональны системе счисления. И как же узнать точную длину строки, т.е. число использованных символов в такой строке, ведь не все же используются.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 31, 2008 22:37 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Alexander писал(а):
1) для строк длиной до 127 символов включительно описатель 1 байт, а для всех остальных два байта, но уже не в двоичной системе.

Можно вопрос?
Кто будет всю мировую электронику переделывать под "байты не в двоичной системе"?

p.s. я - пас. Меня устраивают "байты в двоичной системе"

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 02, 2008 09:09 
Цитата:
Предлагаю отказаться от двоичной системы счисления, взять например основание системы счисления 36, и в старшем бите первого и единственного байта хранить признак системы счисления.
думаю что 36 в степени 7 степени всех удовлетворит, а это позволит хранить если я правильно посчитал 78364164095 байт.

так, имеем байт, - 8 бит,
- если первый бит 0 то семь битов за ним двоичные,
- если первый бит 1 то семь битов за ним трицатишестиричные ? :)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 02, 2008 12:46 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
mrack_ писал(а):
- если первый бит 1 то семь битов за ним трицатишестиричные
Биты не могут быть 36-ричными, поскольку BIT это есть BInary digiT по определению. ;)

_________________
Am I evil? I'm man - yes I am! © James Hatefield


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 02, 2008 13:06 
Сорри, что анонимно - задолбался свой пароль тут восстанавливать. :)

Люди - что вы все такое курите, а?! Или это нюхать надо?!! Ну какой ПРАКТИЧЕСКИЙ смысл в строке, у которой непонятный счётчик? Вот сколько живу - ни разу не видел строки, длиннее нескольких десятков килобайт - да и то я сделал это тогда, практически, по малолетству. :)

Пример - Delphi - сделали, помнится, int - и не парятся. Потому как 1) и так до кучи; 2) извлечь целое по адресу куда проще и быстрее, чем проводить кучу вычислений, только для того, чтобы узнать длину строки!!!


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 02, 2008 22:16 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Уууууу.... писал(а):
Люди - что вы все такое курите, а?! Или это нюхать надо?!! Ну какой ПРАКТИЧЕСКИЙ смысл в строке, у которой непонятный счётчик? Вот сколько живу - ни разу не видел строки, длиннее нескольких десятков килобайт - да и то я сделал это тогда, практически, по малолетству.

Дык это же конкурс - задачи тут зачастую не более чем игра для интелекта, наличие практического смысла не обязательно, главное чтоб интересно было решать :)

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 02, 2008 23:55 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Уууууу.... писал(а):
Сорри, что анонимно - задолбался свой пароль тут восстанавливать.


Да уж, с таким ником K`[f и пароль не долго позабыть...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 03, 2008 06:02 
Не в сети

Зарегистрирован: Чт окт 25, 2007 08:01
Сообщения: 154
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
VoidVolker писал(а):
Дык это же конкурс - задачи тут зачастую не более чем игра для интелекта, наличие практического смысла не обязательно, главное чтоб интересно было решать Smile


Какой конкурс, если обсуждаете ЧТО надо сделать? Я понимаю если бы задача формулировать как "сделать то-то, как можно более элегантнее". :)

Помню, давно уже, в ZX-ревю была интересная ПРАКТИЧЕСКАЯ задача - максимально короткая функция рассчёта адреса следующей скан-строки для заданного знакоместа. Я нашёл почти оптимальное решение. :) Рекорд был, помнится, 15 байт.

WingLion писал(а):
Да уж, с таким ником K`[f и пароль не долго позабыть...


Зависть - плохое чувство. :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 03, 2008 21:02 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Уууууу.... писал(а):
Сорри, что анонимно - задолбался свой пароль тут восстанавливать. :)

Люди - что вы все такое курите, а?! Или это нюхать надо?!! Ну какой ПРАКТИЧЕСКИЙ смысл в строке, у которой непонятный счётчик? Вот сколько живу - ни разу не видел строки, длиннее нескольких десятков килобайт - да и то я сделал это тогда, практически, по малолетству. :)

Пример - Delphi - сделали, помнится, int - и не парятся. Потому как 1) и так до кучи; 2) извлечь целое по адресу куда проще и быстрее, чем проводить кучу вычислений, только для того, чтобы узнать длину строки!!!

во-первых, не обязательно в строках хранить текст, можно и бинарные данные, можно и картинки, иконки например.
во-вторых, всеравно быстрее, чем подсчет длины asciiz строки.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB