LINUX.ORG.RU

22
Всего сообщений: 203

Алгоритмы шифрования. Почему не смешать несколько?

В каждом мессенджере используется какой-то свой алгоритм, но почему-бы не сделать несколько, чтоб безопасность возросла? По принципу луковицы, в несколько слоев разными алгоритмами, збс же будет?

 , , , ,

floksy ()

Time-frequency analysis techniques

Спрошу и на лоре, почему бы и нет? Так вот, вопрос простой, нет ли у кого инфы по поводу алгоритмов выполнения Wigner-Ville distibution и Hilbert-Huang transform? Интересует как само существование готовых решений, так и инфа о скорости их выполнения. Рад буду подробным ответам, но пойдет и простое задание направления «куда копать».

 ,

ivlu ()

Какую книжку по алгоритмам стоит купить?

Сейчас начал читать переводное издание книги Скиены «Алгоритмы. Руководство по разработке». Написано доступно и есть каталог алгоритмов. Хочется иметь её в бумаге, но не могу найти где купить.

Какую книгу по алгоритмам, из продающихся в бумаге, стоит купить?

На амазоне даже со скидкой эта книга дороговато выходит ~3700р без доставки. Мне бы в пределах 2000р.

 , ,

the_real_kinik ()

Книжка по алгоритмам с задачами для школьников

Была такая pdf'ка по алгоритмам для школьников из какой-то школы с математическим уклоном, там задачи в основном, очень известная, никак не могу её нагуглить. Может кто-то понимает, о чём идёт речь?

 ,

grimwaken ()

Визуальное отображение прямоугольных сущностей на плоскости (поле «в клеточку»)

Привет специалистам LOR-а!

Имеется задача - поле «в клеточку» заполнено цифрами, при этом количество клеток много больше уникального количества цифр. По факту эти цифры - идентификаторы сущностей, которые «располагаются» на плоскости. Сущности только прямоугольные и, например, какая-то занимает 4 клетки:

.  .  .  .  .  .
.  1  1  .  .  .
.  1  1  .  .  .
.  .  .  .  .  .
.  .  .  .  .  .

Какая-то одну или две:

.  .  .  .  .  .
.  1  1  .  .  .
.  1  1  .  2  2
.  .  .  .  2  2
.  3  .  .  .  .

Теперь хочется как-то отрисовать это визуально, но возникают случаи вида:

.  .    .    .    .    .
.  .    .    .    .    .
.  223  223  224  224  .
.  223  223  .    .    .
.  .    .    .    .    .

Т.е. рядом дву сущности - 224 и 223, и их ID «похожи». Визуально трудно различить.

В результате возникает проблема: каким образом создать алгоритм перехода от целочисленного ID к строковому так, чтобы строчки максимально отличались друг от друга визуально? P.S. Готового критерия степени «визуального» отличия у меня, разумеется, нет, помимо очевидно факта, что 221 больше отличается от 223, чем, например, от «А0».

 

omegatype ()

Быстрый настраиваемый парсер обратных польских нотаций с биниднгами для питона?

Внезапно не смог найти готовых быстрых реализаций. Неужели оно настолько непопулярное?

 , ,

genryRar ()

GSM: Линия занята

Почему не сделали выход из dead-lock, когда абонент A звонит абоненту B, и наоборот: A>B && B>A?

 , ,

Mirage1_ ()

Мультиуровневый bsearch, нужно ли?

Мои исходные данные – массив структур с географической информацией:

struct Geo {
  std::string airport;  // level: 1
  std::string city;     // level: 2
  std::string province; // level: 3
  std::string nation;   // level: 4
  std::uint8_t subarea; // level: 5 | values: 11, 12, 13, 14, 21, 22, 23, 31, 32, 33, 34
  std::uint8_t area;    // level: 6 | values: 1, 2, 3
};

Надо много (и желательно быстро) отвечать на запрос «принадлежит ли Needle к Haystack». Где Needle всегда более специфично нежели Haystack, например:

belongsTo(Needle=City{Munich}, Haystack=Subarea{21}) -> true

Я думаю посортировать данные иерархически:

std::vector<Geo> geos = allGeos();
std::sort(geos.begin(), geos.end(), 
  [](const Geo& lhs, const Geo& rhs) {
    int areaCmp = lhs.area - rhs.area;
    if (areaCmp != 0)
      return areaCmp < 0;

    int subareaCmp = lhs.subarea - rhs.subarea;
    if (subareaCmp != 0)
      return subareaCmp < 0;

    int countryCmp = lhs.nation.compare(rhs.nation);
    if (countryCmp != 0)
      return countryCmp < 0;

    int provinceCmp = lhs.province.compare(rhs.province);
    if (provinceCmp != 0)
      return provinceCmp < 0;

    int cityCmp = lhs.city.compare(rhs.city);
    if (cityCmp != 0)
      return cityCmp < 0;

    return lhs.airport.compare(rhs.airport) < 0;
  }
);

И потом использовать bsearch() по партициям типа Needle на пути от Haystack. Т.е (псевдокод):

int level = levelOf(Haystack);
std::vector stack{ Range{geos.begin(), geos.end()} };

while (!stack.empty()) {
  Range partition = stack.back();
  if (partition.empty()) {
    stack.pop_back();
    ++level;
  }

  // depth-first
  if (level > levelOf(Needle)) {
    iterator begin = partition.begin();
    iterator end = lower_bound(begin, partition.end(), valueOf(*begin, level));
    stack.push(Range{begin, end})
    level -= 1;
    continue;
  }

  // level == levelOf(Needle)
  if (bsearch(partition, Needle))
    return true;

  // trim parent's begin()
  stack.pop_back();
  stack.back().begin() = partition.end();
  ++level;
}

Где level обозначает поле из Geo, соответсвенно комментарию.

Вопрос такой: может есть алгоритм (или структура данных) лучше подходящая под цель?

 ,

KennyMinigun ()

Программка для радио

Есть радио программа-плеер которая вещает на сервак, суть в том что нужна программа которая возьмет из определенной директории(их там много) и за рандомит песни и есть вставки из другой директории с болтавней все это в mp3, но есть условия

9:00-10:00 - music
10:00-(dependent from file) болтовня обычная
(dependent from file)-11:30 - music
11:30-(dependent from file) болтовня
(dependent from file)-12:00 - music
сам файл в формате m3u8
#EXTM3U
#EXTINF:12,джингл1
C:\Users\User\Desktop\РАДИО\джингл1.mp3
#EXTINF:438,Relaxea - Sunshine Delight
Z:\Автоматизация\музыка для радио\Chillout after work\After Work Chillout\001_Relaxea_-_Sunshine_Delight.mp3
#EXTINF:222,Minka - Little Cat
Z:\Автоматизация\музыка для радио\Chillout after work\After Work Chillout\002_Minka_-_Little_Cat.mp3
#EXTINF:962,Богданова
Z:\Радио\Рубрика Наперекор судьбе\Богданова.mp3//болтавня
........
нужно по длительности определить и подобрать и желательно чтобы разная была при каждом запуске также есть джингл 12 секундный который можно вставлять по несколько раз есть не хватает например минуты, P.S. вот желательно бы знать на каком языке это сделать и функции рекурсивно обходящие все поддиректории с добавлением всех файлов и определении их длин
Алгоритм такой:
1.Добавляем в вектора всю музыку и во второй болтавню(рекурсивно обходя директории и их поддиректории)
2.Открываем файл fopen(playlist.m3u8,"w");
Вставляем строку fwrite("#EXTM3U@);
Какой-то функцией определяем длину которая тоже в векторе еще одном будет, либо вектор состоящий из 
struct
{
std::string filename;
float length;
}
3 Подбираем длины чтобы был час по длительности с рандомом по выборке
4. Пишем 
frite("#EXTINF:"+vector[i].length.toString()+","+vector[i].filename);
frite(vector[i].filename);
5. Вставляем из вектора с болтавней одну композицию
frite("#EXTINF:"+vectortalk[i].length.toString()+","+vectortalk[i].filename);
frite(vectortalk[i].filename);
6.Повторяем предыдущие шаги с подборкой длин по расписанию
Well done!

 ,

Gremlin_ ()

Подскажите название метода объединения и разделения на группы?

Подскажите название метода, я его придумал, но на самом деле наверняка такой уже есть, просто все читать не перечитать.

Есть множество значений N, которые нужно поделить на группы. Значения между собой связаны, каждое значение привязано к другим M значениям. Чем больше у значения связей к другим - тем это значение более весомо, и больше вероятности что оно будет центром. Кроме наличия связей, сами значения ничем другим не различаются, и связи все не типизированны - просто связь.

Значениям назначаются статусы - либо является центром, либо притяными к центру.

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

 

victor79 ()

Отзыв о книге «Алгоритмы на C++» Роберта Сэджвика

Ну, господа, получил-таки я книгу. Если честно, думал, что она будет поменьше, пхах. Касательно печати - вроде бы, ничего, пальцами тёр, не размазывалось, в отличие от дешёвых книжечек а-ля PocketBook. Корешок какой-то.. хлипенький, имхо, будто не здоровый талмуд сшивали, когда открываю-закрываю - поскрипывает. Хотя, наверное, слишком многого я хочу от современных издательств. Про содержание ничего сказать пока не могу, через месяца 4, может, через 5, отпишусь. Задавайте вопросы, если что недосказал.

https://postimg.cc/gallery/236vzeldm/

 , , ,

john_snake ()

Книга Алгоритмы на C++

Вышло новое издание (март 2019ого) книги Седжвика «Алгоритмы на C++», немного побуду слоупоком, но сам только с неделю назад увидел. Можно заказать на OZONe за 2800р, что я, собственно и сделал. На Лабиринте стоит сумасшедших 5100р. Так что если кто хочет и интересуется - советую взять, через недели две отпишусь о качестве перевода (надеюсь, что будет время нормально ознакомиться).

 , , , ,

john_snake ()

Подскажите название алгоритма

Есть N массивов, нужно создать все возможные варианты пар из значений массивов.

Пример для двух массивов по 2 числа:

const numbers1 = [1, 2];
const numbers2 = [4, 5];
// makeMagick(numbers1, numbers2) -> [[1,4],[1,5],[2,4],[2,5]]

UPD: Я вообще зачем создал тему - вроде видел красивое решение, но ни как не могу нагуглить. Думаю, что если у этого алгоритма есть название, то поиски будут проще.

 

Deleted ()

Поиска шаблона

Коллеги, попросили сделать поиск количества multiline шаблона типа такого

   @@ @@ 
     asd
   @@ @@
в большом текстовом файле .Вообще Регекспы в гошке быстры и имеют линейную зависимость, просто хотят не этим решением в лоб это сделать . Подскажите какие еще способы есть ?

P.S Не подошедшее решение

package main

import (
	"flag"
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"regexp"
	"strings"
)

func main() {
	// Тут предствлено решения на стандартных регулярках , в принципе не должна быть большая разница
	// в большинстве случаев с интеловским hyperscan
	PatternFile := flag.String("pattern", "shablon.txt", "файл шаблона поиска")
	Filetosearch := flag.String("file", "bolshoy_file.txt", "сам файл в котором будет поиск")

	flag.Parse()

	//считаем что файл для скорости у нас вмещается в память
	//иначе придется читать кусками
	filep, err := os.Open(*PatternFile)
	if err != nil {
		log.Fatal(err)
	}
	defer filep.Close()

	b, err := ioutil.ReadAll(filep)
	pattern_cnt := string(b)

	file_landscape, err := os.Open(*Filetosearch)
	if err != nil {
		log.Fatal(err)
	}
	defer file_landscape.Close()

	b_2, err := ioutil.ReadAll(file_landscape)
	landscape_cnt := string(b_2)

	// делаем escape метасимволов
	pattern_cnt = regexp.QuoteMeta(pattern_cnt)

	//Меняем и убираем перевод новых строк и также для универсальность пробелы перед ними на s+
	pattern_cnt = strings.TrimSpace(pattern_cnt)
	pattern_cnt = strings.Replace(pattern_cnt, " ", "\\s+", -1)
	pattern_cnt = strings.Replace(pattern_cnt, "\n", "\\s+", -1)

	//добавим опцию нежадности(ленивости) для ускорения
	pattern_cnt = "(?U)" + pattern_cnt
	re_bug := regexp.MustCompile(pattern_cnt)

	//Тут в принципе может и индекс и сам найдейнный шаблон посмотреть
	//for i, match := range re_bug.FindAllString(landscape_cnt, -1) {
	//	fmt.Println(match, "index : ", i)
	//}

	fmt.Println(len(re_bug.FindAllString(landscape_cnt, -1)))
}

 

pinachet ()

Нужен ли ЛОРу модератор, который не знает алгоритмы сортировки

Куда сегодня лучше идти в Айти? (комментарий)

Это же дно! Считают ли остальные господа модераторы достойным держать такого человека в своих рядах? И допускать его к модерированию технического ресурса, на котором затрагиваются сложные вопросы из теории алгоритмов, языков программирования и компиляторов? Или некоторые другие модераторы тоже не слышали про сортировку пузырьком? Признавайтесь!

Перемещено Shaman007 из linux-org-ru

 , ,

Harald ()

Алгоритм для поиска похожих элементов на основе пользовательской активности

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

По идее, задача простая. Берем ID всех купленных товаров пользоателем, и в некую табличку пишем:

ID1 ID2 +1

ID1 ID3 +1

ID2 ID3 +1

Но во-первых, надо добавить в таблицу все комбинации купленных товаров. А лучше всех товаров, купленных за последний месяц. База начинает пухнуть. Если же у меня 1000000 товаров, то связей будет 1000000000000, что несколько много для счетчиков.

Как это делают нормальные люди?

 

zeforocaw ()

Что почитать по алгоритмам?

Сабж.

 

SuoiCat ()

Не могу закодировать данные в виде бинарного вектора для ГА

Хочу попробовать заюзать ГА для генерации бинарных выражений, на выходе которые будут давать true/false.

Есть сами функции с параметрами (параметры НЕ бинарные) которые будут использоваться в выражениях:

getFunctions = () => [
    { func: Function1, value: 14, min: 1, max: 30 },
    { func: Function1, value: 14, min: 1, max: 30 },
    { func: Function2, value: 10, min: 1, max: 5  }
    ....
]

И есть, собственно, бинарное выражение, которое должно генерится в постфиксной форме, типа вот так:

getCondition = () => [
    FUNC_IDX_0
    FUNC_IDX_1
    AND
    FUNC_IDX_2
    OR
]

Я не очень понимаю, как свести это к бинарному вектору, который будет представлять собой геном особи? И кол-во функций, и их параметры, и, собственно, длина выражения (пример в getCondition) по задумке должны меняться.

Возможно, стоит вообще отказаться от использования бинарного вектора в качестве генома, если не получается закодировать все это дело в сабж?

 , ,

Deleted ()

Поиск мануалов по потоковому видео.

Господа!

Где можно раздобыть годное чтиво по алгоритмам потокового видео?

Спасибо.

 , , ,

Deleted ()

B+-Tree: удаление элемента.

Допустим, удалили ключ K1 из листового блока. Ключ K1 в листовом блоке был первым. Значит в родительском блоке K1 выступал как pivot и показывал на этот блок. Теперь в листовом блоке первым стал некий K2.

(*) Теперь по идее нужно пойти в родительский блок и поменять там pivot K1 на K2.

Но я чё-то пока не понял, что страшного случится, если на это забить и оставить в родительском блоке старый pivot K1. Ну и что, что K1 нет, главное что все ключи большие K1 и меньшие следующего pivot лежат в этом блоке, куда pivot K1 показывает.

Ясно, что если бы гарантия (*) поддерживалась, можно было бы оптимизировать операцию «существует ли K1», выполнив её не доходя до листового блока. Но так себе причина.

 

onetimepad ()