2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 
Сообщение08.12.2006, 01:18 


08/10/05
49
maxal писал(а):
незваный гость писал(а):
:evil:
"""Меня терзают смутные сомнения.""" Предполагая, что подпрограмма перестановки сделана, где гарантия, что пузырек остановится? (Может быть, мой вопрос сводится к тому, как сделать маркер начала. А это, в свою очередь, к вопросу, как сделать 00.)

Сделать 00 не проблема. Сначала пишем прогу для случая, когда два 00 есть, а потом еще ее модификацию для случая, когда есть только один 0: у самого первого слова заменяем первую единицу на 0 (получая таким образом два нуля) и помним этот факт, когда дело доходит до сравнения/обмена первого слова со вторым по счету. Аналогичным образом можно получить два нуля для обозначения конца сортированного участка.

Бесконечная в два конца лента тоже проблем не доставляет, в этом случае ведем поиск новых слов по одной позиции вправо и влево: вправо пробегаем отсортированный участок (до двух нулей), и смотрим есть ли сразу за ним новое слово, если есть обрабатываем, если нет ставим 1; бежим влево до двух нулей и смотрим есть ли там новое слово, есть - обрабатываем, нет - ставим единичку; затем снова бежим вправо по отсортированному участку до двух нулей, затем ищем нашу единичку, стираем ее, смотрим есть ли слово в следующей позиции, если есть - обрабатываем, нет - ставим единичку в эту позицию; затем бежим вправо до 1 после отсортированного участка и сдвигаем ее правее, если слово не найдено и т.д.
С искусственным созданием двух нулей (при необходимости) ситуация та же, что в однонаправленной бесконечной лентой.


Спасибо большое за идею решения! Только возникают небольшие вопросы:
1. Обрабатывая параллельно два отсортированных участка, мы также должны сравнивать их между собой. Возникает идея решать эту проблему следующим способом: обработав слово на правом участке, его надо прогнать по левому участку либо до тех пор, пока не натолкнёмся на слово большей или равной длины (тогда прогоним его обратно в правый участок и поставим на место либо остановимся соответственно), либо натолкнёмся на 00, ограничивающие левый участок и также прогоним это слово в правый участок и поставим его на место. Аналогично со словами из левого участка. Не возникнет ли здесь какая-нибудь спорная ситуация?
2. Я придумал метод, который меняет местами два массива из единиц, но думаю, что есть метод попроще. Не могли бы Вы более подробно описать, как это делать?

P.S. Уточнения к условию: лента бесконечная в обе стороны, а код, на неё нанесённый, есть не что иное, как последовательности из единичек, разделённые ровно одним нулём. Возможно, что такой код бесконечен в обе стороны, если в одну сторону он конечен, то далее следует бесконечная последовательность из одних нулей. Задачка представляет сложность только в том случае, если код в обе стороны бесконечный.

 Профиль  
                  
 
 
Сообщение08.12.2006, 01:27 
Модератор
Аватара пользователя


11/01/06
5710
passenger писал(а):
1. Обрабатывая параллельно два отсортированных участка, мы также должны сравнивать их между собой.

У нас один отсортированный участок. Слова в него будут "всплывать" как слева, так и справа.
passenger писал(а):
2. Я придумал метод, который меняет местами два массива из единиц, но думаю, что есть метод попроще. Не могли бы Вы более подробно описать, как это делать?

Залезать в технические детали нет времени, извините.

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

Модераторы: Модераторы Математики, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group