@ru_python

Страница 370 из 9768
Viktor
02.03.2016
18:00:00
есть именно такие массивы

которые эффективны в этом плане?

Pavel
02.03.2016
18:00:52
например, односвязный список :)

Google
Ivan
02.03.2016
18:02:23
ну получается да
А чем простой массив не подходит? :) slice его и вперед

(Да, экономия в алгоритмах не мой конек)

Viktor
02.03.2016
18:02:46
да не, я именно с точки зрения теории смотр/

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

но это не лучшая идея

как минимум из-за необходимости переносить значения

почему бы их сразу не перенести

второй вариант — сделать не массив указателей

Pavel
02.03.2016
18:06:01
односвязный список + индексы для быстрого доступа.

Viktor
02.03.2016
18:06:03
но это неэффективно по памяти, и не позволяет просто сместить елементы

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

Pavel
02.03.2016
18:08:20
тогда без индексов. нужен пятый элемент - считай раз-два-три-четыре-пять.

Google
Pavel
02.03.2016
18:09:01
а что сдвиг? переписывай указатели да и всё.

Viktor
02.03.2016
18:10:05
как такой вариант: у каждого массива есть некий заголовок, который указывает его длинну и ссылку на продолжение при наличии

вот например массив 1 2 3 4 5

тогда: len: 5 next: NULL start: УКАЗАТЕЛЬ_НА_1

ой, и еще ссылка на первый элемент

Pavel
02.03.2016
18:13:01
Это и называется односвязный список. ☺️

Viktor
02.03.2016
18:14:23
и если мы захотели вставить между двойкой и тройкой еще и 5 6 7 8, то просто создаем новый такого же типа почти_массив

и получится у нас: 0x00 -> HEAD0 0x01 1 0x02 2 0x03 3 0x04 4 0x05 5 0x06 -> HEAD1 0x07 5 0x08 6 0x09 7 0x0A 8 0x0B -> HEAD2 HEAD0: len: 2 start: 0x01 next: 0x06 HEAD1: len: 4 start: 0x07 next: 0x0B HEAD2: len: 3 start: 0x03 next: NULL

Pavel
02.03.2016
18:19:29
Что это?

Viktor
02.03.2016
18:19:31
Это и называется односвязный список. ☺️
вот черт, опять я велосипед построил

Whore Amazing
02.03.2016
18:19:49
простите что прерываю ваш оккультный диалог своей приземленной джангой, но ватафак? __init__() got an unexpected keyword argument 'instance'

Viktor
02.03.2016
18:20:28
что-то лишнее передал классу при создании

Pavel
02.03.2016
18:20:33
Пихаешь инстанции туда, где он не ждётся.

Whore Amazing
02.03.2016
18:20:53
__init__ я не перегружал мамой клянусь

Viktor
02.03.2016
18:20:58
причем как я понял instance=XXX передаешь

Whore Amazing
02.03.2016
18:21:05
нет, ничуть

Aragaer
02.03.2016
18:21:15
просто куда-то передается лишний аргумент

Viktor
02.03.2016
18:21:24
так что поищи instance= в коде и посмотри везде ли надо

Aragaer
02.03.2016
18:21:25
в какой-то конструктор

Google
Aragaer
02.03.2016
18:21:35
дык стектрейс же есть

Whore Amazing
02.03.2016
18:21:41
откуда он туда может передаваться?

Aragaer
02.03.2016
18:22:24
что значит *item?

наверно struct

и видимо это сиплюсплюс

Viktor
02.03.2016
18:22:57
Aragaer
02.03.2016
18:23:06
нет, плюсы

в С надо писать struct item *next

Pavel
02.03.2016
18:23:20
и видимо это сиплюсплюс
/я тут в автобусе синтаксис с вспоминал, но не угадал и удалил.

Viktor
02.03.2016
18:23:30
нет, плюсы
ну я тут код не вижу

Aragaer
02.03.2016
18:23:35
уже удален

Viktor
02.03.2016
18:23:37
увидел и он исчез

ага

так что не могу сказать

так вот, вернемся к моему велосипедостроению

Pavel
02.03.2016
18:24:10
так что не могу сказать
Кто с знает, тот пусть эти указатели пишет.

Viktor
02.03.2016
18:24:30
Whore Amazing
02.03.2016
18:25:04
где смотреть стектрейс я не нашел таких слов в трейсбэке

Pavel
02.03.2016
18:25:12
какие указатели-то?
Односвязный список. В структуре указатель на следующий элемент и на нагрузку.

Google
Viktor
02.03.2016
18:25:49
Что это?
первая часть — дамп памяти, где слева адрес, а справа значение (либо -> HEADx) вторая часть — эти самые `HEADx`ы

да, это действительно оно

но вот у меня вопрос возник

чтобы вставить один элемент нам потребуется аж два заголовка!

Pavel
02.03.2016
18:27:08
где смотреть стектрейс я не нашел таких слов в трейсбэке
Сразу возле ошибки должна быть номер строки, откуда ты вызываешь с лишними параметрами.

Viktor
02.03.2016
18:27:11
а если вставлять раз за разом

Whore Amazing
02.03.2016
18:27:35
Viktor
02.03.2016
18:27:41
то оно вообще разростется в кучу указателей на указатели

Admin
ERROR: S client not available

Viktor
02.03.2016
18:27:46
тогда посмоти на какой строке джанги

Pavel
02.03.2016
18:28:01
в том и соль, что падает не в моем кода а внутри джанги
смотри последнюю строку своего кода.

Viktor
02.03.2016
18:28:15
стоп

Whore Amazing
02.03.2016
18:28:21
смотри последнюю строку своего кода.
в трейсбэке вообще ни строки моего еода

Viktor
02.03.2016
18:28:34
Whore Amazing
02.03.2016
18:29:42
дай весь трейсбэк)
http://pastebin.com/zGmMEJW5

Pavel
02.03.2016
18:29:43
то оно вообще разростется в кучу указателей на указатели
нет же. У тебя в каждом элементе два указателя: на следующий элемент и на полезную нагрузку. Для инсерта в середину ты правишь один указатель (предыдущего элемента на только что созданный), а во вновь созданном элементе next направляешь туда, где был next у предыдущего. Односвязный список - самая простая структура, после линейного масива.

Google
Viktor
02.03.2016
18:31:10
погоди, так список может хранить только один элемент?

то есть

Pavel
02.03.2016
18:31:14
потом еще один
http://prog-cpp.ru/wp-content/uploads/2014/04/ols-add.png

Viktor
02.03.2016
18:31:25
нагрузка это один элемент только?

Pavel
02.03.2016
18:31:40
указатель на что хочешь. Мы же про С говорим?

Viktor
02.03.2016
18:31:47
ну смотри

вот данные корня — 1, 2, 3, 4

между 2 и 3 мы вставляем еще

тогда же нужно создать узел с добавляемыми данными

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

и станет

Pavel
02.03.2016
18:35:24
я с трудом понимаю, что ты там себе придумал, я тебе рассказываю вот про такую простую штуку: typedef struct Node { void *payload; struct Node *next; } Node;

Viktor
02.03.2016
18:35:40
так значит

у нас будет в каждой ноде один элемент только, и никак не несколько?

Pavel
02.03.2016
18:36:24
ну конечно.

Viktor
02.03.2016
18:36:42
а в том что я себе напридумывал был не один

в этом и суть

то есть

typedef struct Block { void *payload_arr; size_t length; struct Block next; } Block;

это скорее блоки, чем ноды

Страница 370 из 9768