-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80




Форум на Исходниках.RU


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://forum.sources.ru.
Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Не поздно ли начать изучать С++?

Четверг, 22 Апреля 2021 г. 14:49 + в цитатник

Метки:  

Что делать с жунами

Четверг, 22 Апреля 2021 г. 05:05 + в цитатник
korvin: applegame, не понимаю, почему у тебя front и back возвращают payload, а не next и prev соответственно.

И как пройти по такому списку вперёд-назад и наоборот? Типа

    void forward(const DList!Int l) {
    writeln("-- forward");
    if (l.empty()) {
    return;
    }
    writeln(l.front);
    forward(l.popFront());
    }
    void backward(const DList!Int l) {
    writeln("-- backward");
    if (l.empty()) {
    return;
    }
    writeln(l.back);
    backward(l.popBack());
    }
    void forwardBackward(const DList!Int l) {
    writeln("-- forwardBackward");
    if (l.empty()) {
    return;
    }
    writeln(l.front);
    const next = l.popFront();
    if (next.empty()) {
    backward(l);
    } else {
    forwardBackward(next);
    }
    }
    void backwardForward(const DList!Int l) {
    writeln("-- backwardForward");
    if (l.empty()) {
    return;
    }
    writeln(l.back);
    const prev = l.popBack();
    if (prev.empty()) {
    forward(l);
    } else {
    backwardForward(prev);
    }
    }


вызов forwardBackward должен напечатать (условно)
    1
    2
    3
    4
    3
    2
    1

через pop*-методы так не работает.

И вот ещё важный момент: в односвязном ленивом списке суть не в ленивости элементов, а в ленивости построения самого списка (т.е. хвоста), поэтому возможно задать бесконечный список и работать с ним, используя как генератор/inputstream.

Каноничный бесконечный ленивый список чисел фибоначчи на Хаскелле задаётся так:
    fibs = 0 : 1 : zipWith (+) fibs (tail fibs)


Напечатать первые 10 чисел:
    print $ take 10 fibs

https://ideone.com/bB92Nu

На Scheme моя реализация работает также, без модификаций: https://ideone.com/ysmTzd

На Java чуть сложнее из-за более статических пространств имён, поэтому приходится использовать небольшой костыль Cell, но никаких модификаций самой реализации списка не требуется, и все дополнительные функции (zip, take) реализуются также, как в Haskell и Scheme и всё работает: https://ideone.com/K4Z9QW

Хотя, можно обойтись и без Cell, используя просто саму функцию: https://ideone.com/DDjz1i

Соответственно ленивым у тебя должен быть не столько payload, сколько next и prev.

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846640


Метки:  

Что делать с жунами

Четверг, 22 Апреля 2021 г. 03:31 + в цитатник
korvin:
Цитата sergioK @
ArrayList умножает память на 3/2 и перегрузить это нельзя в отличии от вектора,

Только вектор
1) растёт на константное значение, что при большом количестве операций добавления требует больше реаллокаций и мене эффективно, чем ArrayList
2) synchronized, а значит ещё и имеет оверхед на lock/unlock на каждую операцию, даже если это не нужно, т.е. в большинстве юз-кейсов.

Цитата sergioK @
ArrayList умножает память на 3/2

Ах да, ты ещё забыл, что у объекта Node в LinkedList'е помимо 3-х ссылок (elem, prev, next) есть ещё и object header, который в Java довольно жирный.

Например, для 64bit JVM без сжатия указателей получим на каждый элемент:

    objectHeader.classRef = 8
    + objectHeader.mark = 8
    + object.element = 8
    + object.previous = 8
    + object.next = 8
    = 40 bytes per node
    / object.element = 8
    = 5x

В пять раз больше памяти на ссылки по сравнению с ArrayList, Карл!
– LinkedList на 1млн элементов будет иметь оверхед 32 мегабайта.
– ArrayList на 1млн элементов, с capacity, увеличенной в полтора раза, будет иметь оверхед в 4 мегабайта.

Для 64bit JVM с включённым сжатием указателей получим на каждый элемент:

    objectHeader.classRef = 4
    + objectHeader.mark = 8 // это поле всё равно будет 8 байт на 64bit JVM
    + object.element = 4
    + object.previous = 4
    + object.next = 4
    = 24 bytes per node
    / object.element = 4
    = 6x

— уже в шесть раз больше. Вот так сжали… )
Понятно, что в абсолютных значения оверхед будет меньше:
– LinkedList на 1млн элементов будет иметь оверхед 20 мегабайт.
– ArrayList на 1млн элементов, с capacity, увеличенной в полтора раза, будет иметь оверхед 2 мегабайта.

А ты собрался много данных в LinkedList загружать.
1млрд элементов:
LL — +20 гигабайт с сжатием, а фактически, думаю, хип перевалит за 32 гига (ведь у нас ещё есть сами элементы и данные в них), и JVM отключит сжатие указателей и мы получим 32 гига на одни только ноды LinkedList'а, не считая ещё самих элементов и данных в них.
AL — +2 гига с сжатием. Даже под реаллокации ещё достаточно места до 32-хгигабайтного порога отключения сжатия.
Удачи тебе с LinkedList'ом в этом деле.

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846638


Метки:  

Что делать с жунами

Четверг, 22 Апреля 2021 г. 02:22 + в цитатник

Метки:  

Что делать с жунами

Четверг, 22 Апреля 2021 г. 01:21 + в цитатник
korvin:
Цитата sergioK @
Я таких ArrayList не один десяток написал , разных имплементаций ,

Зачем? Руки чесались? )

Цитата sergioK @
ArrayList умножает память на 3/2 и перегрузить это нельзя в отличии от вектора,

А LinkedList умножает память на 3.


Цитата sergioK @
и это одна имлементация интерфэйса java.util.List другая это Linked List,
пользуешь когда не знаешь сколько элементов будет.

Вот тебе бенчмарк на добавление «не знаешь сколько элементов»:

Скрытый текст

    import org.openjdk.jmh.annotations.*;
    import org.openjdk.jmh.infra.Blackhole;
    import ru.sources.collections.Collections;
    import java.util.Collection;
    import java.util.concurrent.TimeUnit;
    import java.util.function.IntFunction;
    @BenchmarkMode(Mode.AverageTime)
    @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    @Fork(
    value = 3,
    jvm = "/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home/bin/java",
    jvmArgsAppend = {
    "-server",
    "-disablesystemassertions",
    //"-XX:+UseSerialGC",
    //"-XX:+UseParallelGC",
    //"-XX:+UseZGC",
    "-XX:+UseShenandoahGC",
    "-Xms8g",
    "-Xmx8g"
    })
    @State(Scope.Thread)
    public class CollectionsBenchmark {
    private static final String LINKED_LIST = "LinkedList";
    private static final String ARRAY_LIST = "ArrayList";
    //@Param({"10", "100"})
    //@Param({"100", "10000", "1000000"})
    @Param({"1000", "100000", "10000000"})
    private int itemsToAdd;
    @Param({LINKED_LIST, ARRAY_LIST})
    private String type;
    private IntFunction> subject;
    @Setup
    public void setup() {
    switch (type) {
    case LINKED_LIST -> subject = Collections::linkedList;
    case ARRAY_LIST -> subject = Collections::arrayList;
    }
    }
    @Benchmark
    public void addMany(Blackhole blackhole) {
    blackhole.consume(subject.apply(itemsToAdd));
    }
    }



subjects

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.LinkedList;
    public final class Collections {
    public static Collection arrayList(int items) {
    final var c = new ArrayList<>();
    for (int i = 0; i < items; i++) {
    c.add(i);
    }
    return c;
    }
    }



Вот результаты с разными GC (меньше — лучше):

Serial:
    Benchmark (itemsToAdd) (type) Mode Cnt Score Error Units
    CollectionsBenchmark.addMany 1000 LinkedList avgt 15 5.210 ± 0.053 us/op
    CollectionsBenchmark.addMany 1000 ArrayList avgt 15 3.530 ± 0.028 us/op
    CollectionsBenchmark.addMany 100000 LinkedList avgt 15 487.786 ± 7.153 us/op
    CollectionsBenchmark.addMany 100000 ArrayList avgt 15 361.776 ± 3.407 us/op
    CollectionsBenchmark.addMany 10000000 LinkedList avgt 15 114308.717 ± 24496.008 us/op
    CollectionsBenchmark.addMany 10000000 ArrayList avgt 15 74059.694 ± 1124.293 us/op


Parallel:
    Benchmark (itemsToAdd) (type) Mode Cnt Score Error Units
    CollectionsBenchmark.addMany 1000 LinkedList avgt 15 5.191 ± 0.038 us/op
    CollectionsBenchmark.addMany 1000 ArrayList avgt 15 3.524 ± 0.042 us/op
    CollectionsBenchmark.addMany 100000 LinkedList avgt 15 490.742 ± 7.725 us/op
    CollectionsBenchmark.addMany 100000 ArrayList avgt 15 364.297 ± 7.221 us/op
    CollectionsBenchmark.addMany 10000000 LinkedList avgt 15 145307.026 ± 35319.645 us/op
    CollectionsBenchmark.addMany 10000000 ArrayList avgt 15 71625.532 ± 3860.046 us/op


ZGC:
    Benchmark (itemsToAdd) (type) Mode Cnt Score Error Units
    CollectionsBenchmark.addMany 1000 LinkedList avgt 15 5.714 ± 0.548 us/op
    CollectionsBenchmark.addMany 1000 ArrayList avgt 15 5.573 ± 0.298 us/op
    CollectionsBenchmark.addMany 100000 LinkedList avgt 15 553.497 ± 38.279 us/op
    CollectionsBenchmark.addMany 100000 ArrayList avgt 15 583.829 ± 33.537 us/op
    CollectionsBenchmark.addMany 10000000 LinkedList avgt 15 136561.101 ± 62714.469 us/op
    CollectionsBenchmark.addMany 10000000 ArrayList avgt 15 147221.840 ± 65372.420 us/op


Senandoah:
    Benchmark (itemsToAdd) (type) Mode Cnt Score Error Units
    CollectionsBenchmark.addMany 1000 LinkedList avgt 15 4.516 ± 0.100 us/op
    CollectionsBenchmark.addMany 1000 ArrayList avgt 15 3.904 ± 0.123 us/op
    CollectionsBenchmark.addMany 100000 LinkedList avgt 15 453.895 ± 6.612 us/op
    CollectionsBenchmark.addMany 100000 ArrayList avgt 15 359.160 ± 7.098 us/op
    CollectionsBenchmark.addMany 10000000 LinkedList avgt 15 59037.699 ± 9332.316 us/op
    CollectionsBenchmark.addMany 10000000 ArrayList avgt 15 56993.428 ± 3011.366 us/op


Ну и где тут преимущества LinkedList на добавление неизвестного заранее количества элементов?
С первыми двумя GC LinkedList заметно сливает, со вторыми ± одинаково получается.

Добавлено
Цитата applegame @
Кортеж это пример иммутабельной структуры требующей полного копирования для изменения. Кейсы тут вообще не в тему, ты же ни о каких кейсах не упоминал, когда заявил:

А по-твоему, списки они сферические в вакууме?

Цитата applegame @
Память у тебя как у рыбки:

Наоборот же, у тебя, не говоря уж, о твоих проблемах с чтением:
Цитата
Насчёт двусвязных списков не скажу, но как минимум их, например, нельзя просто сделать иммутабельными и/или ленивыми, в отличие от односвязных.

на второй странице.

Цитата applegame @
Ты таки согласен, что иммутабельный двусвязный список может быть реализован, с полным копированием при добавлении/изменении? Ответь прямо без юления.

С полным копированием можно что угодно сделать иммутабельным, только это не «просто». Тебе же не нужно показывать, как делается иммутабельный односвязный список?

Цитата applegame @
Вот сам придумываешь какие-то странные термины, что такое "ленивая функция"? Чем она отличается от "неленивой"?

Э-э… :facepalm: у тебя раздвоение личности? Я тебя спросил, какая операция там ленивая, ты ответил «print». print — это функция, т.е. ты же и назвал её ленивой

Цитата applegame @
Ну давай вернемся. Я с самого начала пытаюсь выяснить почему LinkedList, по словам жаба-селебрити, "совсем другое дело". Но пока от тебя так и не услышал ответа. Ты говооришь о чем угодно, кроме сути. Может таки ответишь вместо переливания в из пустого в порожнее?

Я тебе уже давно ответил, даже три пункта перечислил, с которыми ты же согласился, написав, что «Возможно, что LinkedList - просто корявая реализация двусвязного списка, тут спорить не буду ибо не знаю. Мои двусвязные списки (не на жабе, конечно) используют пулы, и добавляют по два указателя к каждой ноде.» (3-я страница). :facepalm: проверь память, я серьёзно.

Причём, вот ещё, например, кейс, вроде бы подходящий для двусвязного списка: LRU-кэш, но там нужно иметь ссылки на ноды, чтобы эффективно переставлять их в начало списка, но LinkedList не предоставляет возможности иметь ссылку на ноду, т.е. для этого кейса не подходит.

Цитата applegame @
Ты явно путаешь принципиальную возможность создать такой список и возможность создать его средствами самого иммутабельного ФП-языка.

Я нигде не писал про «принципиальную невозможность».

Цитата applegame @
Какое принципиальное отличие от односвязных списков в Scheme

двусвязность и закрытость для тебя не достаточно принципиальные отличия? Не знаю тогда. Может для тебя вообще все динамические структуры «на одно лицо»?

Цитата applegame @
сферических в вакууме списков в C?

Такая же сферическая в вакууме. Мне как-то не интересно гадать.

Цитата applegame @
Односвязный список и в Африке односвязный, какая разница это C или Scheme?

Во-первых, односвязный список можно реализовать по-разному:
– интрузивный или не интрузивный
– закрытый (объект-контейнер с внутренним приватным списком нод и предоставляющий доступ к элементов только описанными методами, инкапсулирующий манипуляции над нодами) или открытый (просто создаются сразу сами объекты нод)

Цитата applegame @
"не поймите неправильно, мне нравятся связные списки, они могут быть полезны, но вот LinkedList сделан через жопу, поэтому не используйте его"

Он именно так и написал, но ты предпочёл поСПГСить.

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

Вопрос: если ты не манипулируешь нодами, переставляя их, то нафига тебе связный список? Используй массив. А если манипулируешь, то вся эта изначальная локальность пойдёт лесом на хоть сколько-нибудь большом списке.

Цитата applegame @
А в чем проблема? Не нравится мой термин, предложи свой. Тем более если ты понял, то зачем цепляться? Лишь бы что-нибудь возразить?

Зачем я буду придумывать какой-то свой, если такие языки называют императивными?

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846634


Метки:  

Что делать с жунами

Четверг, 22 Апреля 2021 г. 00:41 + в цитатник
applegame:
Цитата korvin @
Нет. Что мешает, написал выше. Ты, конечно, можешь просто взять мой пример ленивого односвязного списка для Java и сделать двусвязный. Ну или с нуля на твоём любимом языке.
Сделал на D. И синтаксический сахар есть.
1. Вместо head - front, вместо tail - popFront. Также есть back и popBack - аналоги для другого конца списка.
Список иммутабелен. Добавление элементов (append) создает копию списка, popFront и popBack не создают копию.
Для демонстрации иммутабельности, добавляю не сразу все элементы к списку, а за два раза. Обратите внимание, что все переменные в main константные, кастов в программе нет, так что они реально иммутабельные.
Элементы вычисляются лениво. Для подтверждения этого создал структуру Int, иммитирующую обычное целое, с перегруженным оператором сложения, который печатает в консоль текст подтверждающий, что сложение реально произошло.

В данной программе вычисляется только второй элемент списка, так как именно он выводится на экран.
Тестировал мало, возможны ошибки.

Играться тут: https://glot.io/snippets/fxwh6ktfxg

Код:
Скрытый текст
    import std.stdio;
    struct Int {
    int value;
    Int opBinary(string op: "+")(Int other) const {
    writefln("%s + %s = %s", value, other.value, value + other.value);
    return Int(value + other.value);
    }
    }
    void main() {
    const l0 = DList!Int();
    const l1 = l0.append(
    Int(1) + Int(1),
    );
    const l2 = l1.append(
    Int(2) + Int(2),
    Int(3) + Int(3),
    Int(4) + Int(4)
    );
    writeln(l2.popFront().front);
    }
    struct DList(T) {
    struct Node {
    T delegate() payload;
    Node* prev, next;
    }
    private Node* m_first, m_last;
    bool empty() const { return m_first == null; }
    T front() const { assert(!empty); return m_first.payload(); }
    T back() const { assert(!empty); return m_last.payload(); }
    const(DList) popFront() const {
    assert(!empty);
    return m_first == m_last ? const DList() : const DList(m_first.next, m_last);
    }
    const(DList) popBack() const {
    assert(!empty);
    return m_first == m_last ? const DList() : const DList(m_first, m_last.prev);
    }
    const(DList) append(ARGS...)(lazy ARGS args) const {
    auto list = dup();
    static foreach(arg; args) {
    if(empty) {
    list.m_first = list.m_last = new Node(&arg);
    } else {
    list.m_last.next = new Node(&arg, list.m_last);
    list.m_last = list.m_last.next;
    }
    }
    return list;
    }
    private DList dup() const {
    auto list = DList();
    if(!empty) {
    auto prev = new Node(m_first.payload);
    list.m_first = prev;
    const(Node)* cur = m_first.next;
    while(cur != m_last.next) {
    auto node = new Node(cur.payload, prev);
    prev.next = node;
    prev = node;
    cur = cur.next;
    }
    list.m_last = prev;
    }
    return list;
    }
    }



Полагаю, на этом вопрос возможности создания иммутабельных ленивых двусвязных списков будет закрыт.

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846633


Метки:  

Fortran и исходники GCC

Четверг, 22 Апреля 2021 г. 00:19 + в цитатник
grgdvo: Не, это только для
Цитата
2) The exponent syntax for hexadecimal floating-point constant

link

Может в пропозалах кто-то что-то и написал, но вряд ли это имеет смысл.
Шестнадцатиричная запись компактнее и проще воспринимается, чем двоичная.

https://forum.sources.ru/index.php?showtopic=421323&view=findpost&p=3846632


Метки:  

Что делать с жунами

Четверг, 22 Апреля 2021 г. 00:13 + в цитатник
applegame:
Цитата korvin @
Состоятелен, потому что юз-кейсы у списка и кортежа принципиально разные.
Кортеж это пример иммутабельной структуры требующей полного копирования для изменения. Кейсы тут вообще не в тему, ты же ни о каких кейсах не упоминал, когда заявил:
Цитата korvin @
В том, что любая операция добавления/изменения приводит к созданию полной копии списка.

Цитата korvin @
Без копирования? Ну-ну.
Память у тебя как у рыбки:
Цитата applegame @
Если двусвязный список сделать встроенным в язык типом, то он вполне может быть персистентным, а при добавлении новых элементов просто копировать его целиком. Бесполезно, но возможно.
Ты таки согласен, что иммутабельный двусвязный список может быть реализован, с полным копированием при добавлении/изменении? Ответь прямо без юления.

Цитата korvin @
Очевидно, 1) print здесь элемент списка, а не «операция» над элементом списка, 2) в примерах на Scheme и Java print не является ленивой функцией.
Ну если уж доёбываться, то элемент списка не сам print а результат каррирования print. Можно переделать твой пример, чтобы была операция над элементами: https://ideone.com/hPXX7o
Суть не меняется, ленивый не список, а вычисления.
Цитата korvin @
2) в примерах на Scheme и Java print не является ленивой функцией.
Вот сам придумываешь какие-то странные термины, что такое "ленивая функция"? Чем она отличается от "неленивой"?

Цитата korvin @
Вообще-то съезжать в сторону начал ты с самого начала.
Ну давай вернемся. Я с самого начала пытаюсь выяснить почему LinkedList, по словам жаба-селебрити, "совсем другое дело". Но пока от тебя так и не услышал ответа. Ты говооришь о чем угодно, кроме сути. Может таки ответишь вместо переливания в из пустого в порожнее?

Цитата korvin @
Нельзя, из-за обратной ссылки на предыдущий элемент. Ты не сможешь даже сконструировать такой список.
Ты явно путаешь принципиальную возможность создать такой список и возможность создать его средствами самого иммутабельного ФП-языка. Повторю еще раз: двусвязный список при желании можно встроить в любой иммутабельный ФП язык. В Erlang это можно сделать например при помощи NIF: создаем сначала мутабельный список, заполняем ноды данными, после чего делаем иммутабельным. В общем-то аналогично кортежам, которые в том же эрланге являются, по сути, иммутабельными массивами.
Ленивость же, как я говорил, вообще ортогональна всему этому. В том же D, я могу сделать тебе ленивый рендж, хоть односвязный (ForwardRange), хоть двусвязный (BidirectionalRange), хоть вообще массив (RandomAccessRange). Хошь мутабельный, хошь иммутабельный.
Цитата korvin @
Речь о том, что класс LinkedList оказался на практике почти бесполезен.
Интересует почему. Какое принципиальное отличие от односвязных списков в Scheme или сферических в вакууме списков в C?
Цитата korvin @
Вопрос другой: как из этой фразы можно было сделать вывод, что автор имел в виду совершенно одинаковые структуры данных в двух сильно разных языках?
Односвязный список и в Африке односвязный, какая разница это C или Scheme? Можно еще говорить о разных степенях оптимизации, но автор явно абстрагировался от этого, так как упомянул C, в котором вообще не существует какой-либо стандартной реализации списка. Если бы он скажем заявил, что-то вроде "не поймите неправильно, мне нравятся связные списки, они могут быть полезны, но вот LinkedList сделан через жопу, поэтому не используйте его", то это было бы логично. Возможно автор именно это и имел в виду, но сказал нечто совершенно иное.
Цитата korvin @
Вот, например, в org.apache.commons есть двусвязный список с этим твои кэшированием нод
Молодец, просвещайся дальше. Даю подсказку: ноды еще можно не по одной аллоцировать, а сразу непрерывными блоками по несколько штук, причем можно сразу и место для данных аллоцировать внутри ноды (интрузивные списки, о которых я писал ранее, а после и ты). Особо упоротые оптимизаторы, длину этих блоков еще и с размером строки кэша процессора норовят выровнять.
Цитата korvin @
Я-то понял, только зачем ты терминологию выдумываешь?
А в чем проблема? Не нравится мой термин, предложи свой. Тем более если ты понял, то зачем цепляться? Лишь бы что-нибудь возразить?

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846631


Метки:  

Не поздно ли начать изучать С++?

Среда, 21 Апреля 2021 г. 23:27 + в цитатник
Alexandrietz:
Цитата scrambrella @
Алгоритмы учим по Кнуту, пропуская математику, которой там много. Кормен - отстой.

Проекты ваши никто смотреть не будет. Спросят базовые алгоритмы. Проверят знание языка программирования.

Трехтомник Кнута я точно не осилю. А сколько хватит для программирования?

Добавлено
Цитата Alexandrietz @
Цитата scrambrella @
Алгоритмы учим по Кнуту, пропуская математику, которой там много. Кормен - отстой.

Проекты ваши никто смотреть не будет. Спросят базовые алгоритмы. Проверят знание языка программирования.

Трехтомник Кнута я точно не осилю. А сколько хватит для программирования?

Думаю, что людей, кроме Кнута, осиливших трехтомник, нет.

https://forum.sources.ru/index.php?showtopic=421325&view=findpost&p=3846630


Метки:  

Не поздно ли начать изучать С++?

Среда, 21 Апреля 2021 г. 23:13 + в цитатник
scrambrella: Алгоритмы учим по Кнуту, пропуская математику, которой там много. Кормен - отстой.

Проекты ваши никто смотреть не будет. Спросят базовые алгоритмы. Проверят знание языка программирования. Проекты - коммерческая тайна. Так и скажите.

https://forum.sources.ru/index.php?showtopic=421325&view=findpost&p=3846629


Метки:  

Интересные задачки

Среда, 21 Апреля 2021 г. 23:07 + в цитатник
ya2500: OpenGL, спасибо! Я иногда порешиваю задачки codeforces, но теперь присмотрюсь и к этому Тимусу.

https://forum.sources.ru/index.php?showtopic=316466&view=findpost&p=3846628


Метки:  

Интересные задачки

Среда, 21 Апреля 2021 г. 23:03 + в цитатник
ya2500: OpenGL ну я записал себе в очередь задач.

Скрытый текст
Цитата Славян @
задача довольно быстро становится сложнее шахмат,


Допустим, есть N ящиков. Перемещения без сдвигания ящиков особо не важны и в каждой ситуации важно только, какие ящики и в какую сторону возможно сдвинуть, это - ключевые моменты. А если подумать, то наверняка можно ещё уменьшить кол-во ключевых моментов для перебора; что приходит в голову сразу: запретить двигать ящик обратно и вообще, запретить повторение ситуации. Тогда перебор точно до шахмат не дотянется и близко.

Цитата Славян @
для реальных лабиринтов (10...100 ящиков) совершенно неактуально


Ну я не знаю - выше был "реальный" лабиринт с тремя ящиками. Лабиринтов на 100 ящиков я ещё не видел(если не считать старой игрухи, где много сокобанов были как бы объединены, но и там, ЕМНИП, нельзя было выкатывать ящики за экран)


Добавлено
Оу, там же указаны возможные пределы:

Цитата
На входе задана схема склада — прямоугольная сетка размером n x m (3 <= n, m <= 8).


- n не меньше трёх, вместо не больше! То есть, получается, предел возможного перебора определяется длиной строки:

Цитата
Длина строки не должна превышать 10000 символов.


- но каждый раз следующий символ выбирается не более чем из 4 вариантов.

https://forum.sources.ru/index.php?showtopic=316466&view=findpost&p=3846627


Метки:  

Что делать с жунами

Среда, 21 Апреля 2021 г. 22:57 + в цитатник
sergioK:
Цитата korvin @
Цитата sergioK @
Ты на втором курсе data structure изучал ?

А ты data structures только на уровне базового курса университета знаешь?

Нет, не только

Добавлено
Цитата korvin @
Ты вообще, в курсе, что такое ArrayList?

Я таких ArrayList не один десяток написал , разных имплементаций ,
ArrayList умножает память на 3/2 и перегрузить это нельзя в отличии от вектора,
и это одна имлементация интерфэйса java.util.List другая это Linked List,
пользуешь когда не знаешь сколько элементов будет.

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846624


Метки:  

Не поздно ли начать изучать С++?

Среда, 21 Апреля 2021 г. 22:35 + в цитатник
Alexandrietz:
Цитата scrambrella @
Читаем 3 книги!

Саммерфилд QT4 Программирование GUI на С++
Бьерн Страуструп Язык программирования С++
М.Грабер SQL

Книги по С++ взаимозаменяемы.

Web-языки (Прохоренок Н.А. HTML, JavaScript, PHP и MySQ) - по желанию.


Ассемблер - нахер. Стандартную библиотеку - нахер (QT её заменяет).

Кормен Т. Алгоритмы: построение и анализ - нахер. Написано ужасно, непонятно ничего. Быстрее сам придумаешь алгоритм, чем поймёшь что имел в виду Кормен.

Хорошо. Давайте допустим, что я прочитал эти книги. Выучил все структуры данных, алгоритмы по Кормену, исключения выучил, констркуторы, STL. А как написать проект, который убедит того, кто будет принимать меня работу, что я не овощ в С++?

https://forum.sources.ru/index.php?showtopic=421325&view=findpost&p=3846623


Метки:  

Интересные задачки

Среда, 21 Апреля 2021 г. 18:51 + в цитатник
Славян: Там сложность растёт катастрофическими темпами!
В SokoMind есть установка одного ящика. Где-то или видел или читал про возможность сделать установку двух ящиков.
На современном железе (1 ПК) наверное можно сделать 3...4 ящика.
На каком-то суперкомпьютере можно попробовать выйти на 5...7 штук.
Но задача довольно быстро становится сложнее шахмат, так что для реальных лабиринтов (10...100 ящиков) совершенно неактуально, увы. :yes-sad:

https://forum.sources.ru/index.php?showtopic=316466&view=findpost&p=3846615


Метки:  

Не поздно ли начать изучать С++?

Среда, 21 Апреля 2021 г. 17:40 + в цитатник
Qraizer:
Цитата scrambrella @
Как предложите писать графические проги на С++ кроме как с помощью QT ?
Какое это имеет отношение к совету не использовать стандартную библиотеку? QT вяжет по рукам и ногам своей инфраструктурой. Это отдельный фреймворк, использующий кастрированный C++ в качестве бак-энда. Давай ещё посоветуй кому-нить использовать Delphi в режиме Object Pascal.

Добавлено
Цитата DrUnkard @
Такое ощущение, шо Циана Куль воскрес.
Тьфу-тьфу-тьфу, но разница невелика.

https://forum.sources.ru/index.php?showtopic=421325&view=findpost&p=3846614


Метки:  

Как загрузить в регистр CPU значения указателя

Среда, 21 Апреля 2021 г. 16:29 + в цитатник
hd44780: Спасибо всем. Как и ожидалось после прочтения https://github.com/opencv/opencv/issues/15690 снос и переустановка VC 2019 решила все эти проблемы.

Вот и ставь после этого все эти апдейты :D .

Тему пока замораживаю, т.к. эта работа ещё идёт.

https://forum.sources.ru/index.php?showtopic=421354&view=findpost&p=3846613


Метки:  

Не поздно ли начать изучать С++?

Среда, 21 Апреля 2021 г. 16:02 + в цитатник
DrUnkard:
Цитата shm @
Такое ощущение, что боты между собой общаются.

Такое ощущение, шо Циана Куль воскрес. :D

Ряд вопросов по терминологии C++

https://forum.sources.ru/index.php?showtopic=421325&view=findpost&p=3846612


Метки:  

Не поздно ли начать изучать С++?

Среда, 21 Апреля 2021 г. 14:34 + в цитатник
scrambrella:
Цитата Qraizer @
QT – не C++.

Как предложите писать графические проги на С++ кроме как с помощью QT ?

https://forum.sources.ru/index.php?showtopic=421325&view=findpost&p=3846611


Метки:  

Что делать с жунами

Среда, 21 Апреля 2021 г. 14:21 + в цитатник
korvin:
Цитата applegame @
При том, что твой аргумент, что двусвязный список нельзя сделать иммутабельным, потому что надо его целиком копировать при, например, добавлении элемента несостоятелен.

Состоятелен, потому что юз-кейсы у списка и кортежа принципиально разные.

Цитата applegame @
Двусвязный список можно сделать иммутабельным. Для того же эрланга можно как нефиг делать написать NIF реализующий иммутабельный двусвязный список.

Без копирования? Ну-ну.

Цитата applegame @
Очевидно print.

Очевидно, 1) print здесь элемент списка, а не «операция» над элементом списка, 2) в примерах на Scheme и Java print не является ленивой функцией.

Цитата applegame @
Суть в том, что двусвязный список тоже можно сделать с поддержкой ленивых вычислений (или просто ленивым, если тебе так хочется), не вижу никаких препятствий.

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

Цитата applegame @
Просто ты в каждом ответе норовишь съехать куда-то в сторону.

Вообще-то съезжать в сторону начал ты с самого начала.

Цитата applegame @
Я думаю, ты просто некомпетентен в этой области. Почитай про мемори пулы и вообще про низкоуровневую оптимизацию работы с памятью, инфа на эту тему есть.

Я думаю, что ты некомпетентен, но думаешь, будто компетентен. Вот и скинь ссылку на «правильную» с твоей точки зрения инфу.
А лучше сразу свой связный список с мемори пулом и примером юз-кейса для тестирования/замера.

Цитата applegame @
Ну а о чем там тогда речь?

Речь о том, что класс LinkedList оказался на практике почти бесполезен.

Цитата applegame @
Ну в общем-то из-за Scheme я так и понял.

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

Цитата applegame @
Ну и как из фразы "They're as useful in C as they are in Scheme" можно вообще сделать вывод, что в C автор имел ввиду не те же списки, что и в Scheme?

Вопрос другой: как из этой фразы можно было сделать вывод, что автор имел в виду совершенно одинаковые структуры данных в двух сильно разных языках?

Цитата applegame @
Ну и если эти linked list так полезны в C, а LinkedList это "another matter entirely", то вероятно в Java должен существовать правильный linked list, аналогичный таковому в C и Scheme. Он существует?

В JDK — нет. В сторонних библиотеках коллекций — возможно.

Вот, например, в org.apache.commons есть двусвязный список с этим твои кэшированием нод

Цитата applegame @
А ты типа не понял о чем речь?

Я-то понял, только зачем ты терминологию выдумываешь?

Цитата applegame @
По твоему мнению их можно сделать таковыми или нет? Если нет, то что именно мешает?

Нет. Что мешает, написал выше. Ты, конечно, можешь просто взять мой пример ленивого односвязного списка для Java и сделать двусвязный. Ну или с нуля на твоём любимом языке.

Цитата applegame @
Ну это вообще из серии "сам придумал - сам опровергнул".

Кто ж разберёт твои фантазии.

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846609


Метки:  

Поиск сообщений в rss_forum_sources_ru
Страницы: 2628 ... 2533 2532 [2531] 2530 2529 ..
.. 1 Календарь