- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Ни у кого случайно не завалялся кусок кода, на любом языке, воплощающий алгоритм пермутации? Для тех, кто не в курсе, что такое пермутатор, объясняю: есть ключевой набор слов для поисковика. необходимо сделать список всех вариаций(пермутаций) слов. Например, есть ключевое словосочетание: Слава КПСС Ура. Список пермутаций(размер: 3!) будет выглядеть так:
Слава КПСС Ура
Слава Ура КПСС
Ура Слава КПСС
Ура КПСС Слава
КПСС Слава Ура
КПСС Ура Слава
Когда ключевое словосочетание нуждающееся в пермутации одно, то можно сделать и ручками, но когда таких две сотни, то нужна программа.
Если ни у кого нет проги, может алгоритм кто подскажет?
если словосочетания небольшие (3-5 слов), то можно в лоб: вложенные циклы. число комбинаций - факториал числа слов.
если больше, то уже сложнее. для N слов придется поднапрячься, чтобы написать.
Алгоритм очень известен и описывается во многих книгах по програмированию
Он положен скажем в основу решения задачи комивояжеров
Названия бывают разные
Кажется здесь четкой терминологии не выработано
Я слышал название Бэктрекинг.
Но были еще какие то.
Если тебе нужно получить не все возможные, а лишь некоторые, но быстро, то алгоритм таков:
1. разбиваем словосочетание на отдельные слова, помещая каждое слово в массив.
2. ротируем массив (сдвигаем циклически все его элементы влево и право, т.е. элемент 0 в элемент 1, элемент 1 в 2 .... элемент END в елемент 0).
3. Выбираем слова из массива и формируем словосочетание.
Достоинства:
Работает быстро.
Реализуется просто.
Дальнейшее ускорение работы:
Ротация не элементов массива, а указателей на элементы.
если слов немного (N<10) и машинного времени не жаль (а чего его жалеть:)), то представь начальное словосочетание наименьшим числом в N-ичной системе, у которого все цифры различны (0 1 ... N-1), и, добавляя по единичке вплоть до (N-1 N-2... 0) включительно, отбрасывай те числа, где не все цифры различны
А если машинного времени жаль, но не жаль дискового пространства (а чего его жалеть :)) и N невелико, можно только один раз составить и запомнить список всех перестановок по каждому реально необходимому N, а в дальнейшем перебирать слова уже согласно этому списку
если слов немного (N<10) и машинного времени не жаль
Надо определить в постановке задачи, для каких N ее надо решать.
Допустимый диапазон не слишком велик.
Для N<10 действительно годится предложенный алгоритм (потери в числе операций по сравнению с рекурсивным алгоритмом ~e^N раз согласно формуле Стирлинга). Для N в интервале 10-16 использовать надо рекурсию.
Правда, решение в ту или другую сторону на границе N=9-11 зависит от эффективности реализации алгоритмов.
Для N>16, боюсь, уже никакой алгоритм не поможет. Число операций в случае, скажем, N=20 >10^18, что, конечно, выше возможностей не слишком большого кластера из обычных компьютеров.
http://algolist.manual.ru/maths/combinat/sequential.php#perebor