그럼
트리 노드구조를
포인터 4개 인트 3개있는거 할건데
둘다 배열로 4개 3개 하면 되잖아?
근데 인트형에 뭐 들어가잇는지 없는지 일단 판단해야되서
NULL값으로 넣을건데
NULL이 0으로 define되어있는것같아서
그럼 NULL로 해놓아도 0으로 처리되는거임?
근데 인트형 즉 키값에 0이 들어오는경우가잇거든 중간에? 그때 비교해야되는데 없는지 있는지 비교라던가
걍 대수비교도 문제가생길것같아서
NULL이 0으로된다면 어떻게 처리해야될까... 0도 하나의 들어올수있는 값인데
얌마 내가 c는 손논지 아주 오래 됐지만, 포인터가 널이거랑 그 포인터가 가리키는 값이 0인거랑은 다른거지
지금 포인터는 중요하지않음 내가 질문한거 다시읽어라 포인터가아니라 인트형 일때를 묻는거임
포인터면 걍 nullptr 써버리면 장땡인데 그게 안되니까 이러지
괜히 포인터 얘기꺼냇나 하여튼 질문의 내용은 포인터와 아예 전혀 무관계니까 신경쓰지말고 포인터는 인트형일때 처음 생성하면 쓰레기값들어가잖아? 그걸 클래스 생성자로 어떤 수를 집어넣어야 일단 제대로 돌아갈거아냐? 안집어넣으면 뭐가 들어갈지 모르니까 비교,존재 등등 하기 빡세지니까 그래서 하나의 어떠한 무존재를 의미하는 걸 넣고싶어 그게 NULL인데 NULL이 0으로 디파인되어있어 근데 0도 다른 값중의 하나로 들어올수가있어
포인터 쓰면되지 왜안됨 뭐 포인터 쓰지말라고 조건내걸었음?
정 포인터도 못쓰고 int변수로 있는지 없는지 값을 비교할수 없으면 bool변수 만들어서 쓰던지
병신새끼야. B+ 트리 인트 구조가 NULL인지 0인지 뭔 상관이냐? 포인터/값/포인터/값/포인터 이런식으로 포인터는 항상 처음부터 시작하고 끝에서 끝나며 홀수개인데. 값 부분에 0이 들어가든 말든 뭔 상관?
그냥 트리라는게 뭔지 모르는새끼내
노드가 반 이상 차는지 안차는지나 유심히 살펴보고 delete할 때 어느 방향이나 회전을 선택할지나 신중히 생각해라.
int형 포인터를쓰라고? KEY값을? 근데 int도 포인터로 써도되나.. 그걸로 nullptr해버려도되나.. ㅋㅋㅋㅋ/// 그리고 너 포인터/값/포인터/값을 NODE클래스로 만들면 어차피 영역구별은 의미없으니까 포인터[3] 값[2]로 만들잖아 값부분에 숫자가 들어온다고 교수가 준거
값이 NULL인 노드가 왜 필요하냐? 포인터와 무관한게 아니라 그게 니 고민을 해결할 키다
근데 그 수에 0도있어 시발
트리를 왜몰라 asd ㅅ끼야 ㅋㅋㅋㅋ avl트리까지 1년전에 다 짯다 혼자서
노드가 반이상 차고안차고는 일단 NODE 구조부터 짜고 생각할게 지금 삽입만 하면 되서 삽입이 리프삽입 부모삽입 리프에서 꽉찻을경우 split해서 나눈다음 부모노드 하나 더잡는게 지금 니가말한거잖아 ㅋㅋㅋㅋ야
노드자체가 ㅋㅋㅋㅋ가 말한대로 포인터/값/포인터/값/포인터/값/포인터 이렇게 되어있는데
값이 전부 초기값으로 NULL이 들어가야 그 뒤에 값이 들어올때 판단하지 값이 있냐 없냐로 있으면 대소비교해서 왼쪽이던 오른쪽이던 넣어야하는데 아무렇게 박아넣는게 아니라고 키값도 이동이필요하고 처음에 5들어오면 그걸 박음녀 그만인데 그 뒤에 -5들어오면 값이 존재하는지 비교하고 존재할경우(이경우 5) 그 수와 비교해서 -5을 5앞에 박아야함 그 뒤에 0이들어온경우 비교하면서 하겟지 근데 -가 2번들어왓다치자 그럼 -5-4 NULL NULL 이 값인데
0이 들어와바 이타이밍에 그럼 NULL이 0으로 읽히면 0은 이미 존재하니까 삽입안함(정확한가 이게..) 이 되어버리잖아 실제로 존재안하는데 0이...
KEY값의 중복이 허용되더라도 그럼 이게 데이터가 0으로 꽉찬거로 읽힐테니까 split을 할필요가없는데 split질 하게될테고 그럼 꼬이게되지
사용하는 개수를 따로 저장하던가
병신 새끼야. 포인터 값이 0이면 거기 접근할 때 OS가 잘못된 접근이라고 interrupt 걸어버린다고.
노드에 링크가 여러개인 트리 구조 다시 공부해라.
아니 포인터를 다시 공부해라.
지금 니가 B+ 트리로 빅데이터 관리 프로그램 만드는거라면 각 page 앞마다 B+ 페이지 유지할 때 header load가 따로 100byte정도 있을거란것도 고려해서 생각해보고.
int를 포인터로만드는게아니라고 시발
int는 인트라고 몇번을말해 개새끼야
애초에 값이 있는지없는지 비교하는데 왜 포인터에접근을하냐 포인터/키/포인터/키 중에 키에 접근하는거지 시발 키는 그냥 순수 int형으로 구현한다고
왜 자꾸 포인터타령이야 니들은 포인터로짯겟지 나는 시발 인트로짠다고 개새야; 포인터/값/포인터/값에서 포인터만 따로 포인터로 하고 어차피 이 포인터는 루트부터 중간 노드까지는 밑에 하위노드가리키는 역할이 끝이고 리프노드에선 레코드가리키는 포인터인데 이걸로 뭔 비교를해시발 값과 비교해서 양옆 포인터로 이동하는거지 시발
좆도 대답클라스가 질문의 이해를못하고있네
걍 단순하게 int형으로 쓸때 그 값이 존재하지않다 를 정의하는 특별한방법이 있냐없냐를 묻고잇는건데 좆나 시발 뭔 포인터타령이야 포인터하고 값은 연산에서 같이 쓰이진않는건데
지금 내 '노드' 클래스에 int key[3] Node *ptr[4] 이렇게 자료형이 잇다.
애초에 이 자료형 구조 가 잘못된거면 지적을 해보던가; 저렇게 배열 2개 가 1개의 노드에 있는게 맞지않음?
포인터4개 값3개 로 가정한다
씨발 새끼야. 말단 노드가 아닌데 int 값으로 비교를 해서 포인터로 접근을 하는데, int 형에 0인지 아닌지가 무 슨상 관이냐? 병신아. B+ 트리 구조 안배웠냐? 이 새끼 진짜 답없네. 관련 지식이 없는 것 같으니. 병신아. 포인터/값/포인터 인데 맨 뒤에 포인터가 없으면 그 이전의 int 값도 없는거지. 이 새끼 진짜 대가리를 어디에 쓰고 있는거냐.
B+ 트리에 대한 지식이 있긴 한거냐??? 맨 뒤에 포인터로 끝난다고. 맨 뒤에 포인터가 NULL을 가리키면 그 이전의 int 값이 없는거라고. B+트리좀 공부하고 와서 질문다운 질문을 해라.
질문자 새끼 리얼 병신 ㅋㅋ
아 비교를 포인터로 하라는거냐 B+트리에서 존재유무를?? 근데 그건 그렇게할게 근데 지금궁금한건 B+트리와 별개적으로 int로 만약 비교할때의 해결법이 갑자기 궁금해서그래
야 근데 노드가 1개밖에없을때는 포인터가 레코드를 가리키긴하는데 교수가 레코드가리키는거하고 블록잡는거 무시하랫어
그럼 nullptr말고 다른거 아무거나 가르키게 해야되냐?
지금 구현이 record 하고 block 다무시하고 걍 b+ 딱 삽입 구조만 구현하는거라서 포인터는 자식노드가없는한 아무데도 안가르키게됌 근데 니가 저기서 말단노드가 아닌데 int값으로 비교를해서 포인터로 접근한다고햇는데 그 int값으로 비교 자체가 좆된다니까 비교할때
존재유무야 포인터로 할수잇겟고 말단에서는 원래 record 가르켜야하는데 지금 가르킬거 구현을 하지 말라고햇으니까 뭐... 걍 뭐.. 말단노드일때는 존재유무 어케판단하지.. 포인터 뭘가르키게해야되지 nullptr말고 걍 숫자아무거나 넣어야되나 ㅋ
애초에 존재유무만알면 거기까지 비교하면 되긴하는데 궁금한거 int값자체 비교할때 만약 0을 NULL로할경우 어케되냐는게 궁금한것의 결론임
걍 주저리주저리햇는데 궁금점은 좀 해결되었고 걍 궁금하다 다른거 과제랑상관없이
어휴 병신아. 자료구조를 아무리 좋은걸 주면 뭘하냐... 니가 생각하고 있는 알고리즘이 지랄 같으면 아무리 좋은 자료구조도 똥으로 변하는데. 병신아. 비교를 왜해? 마지막 노드의 포인터가 0 이면 직전의 int값은 invalidate되는거지. int로 비교하려면 내가 말한 header를 넣어서 구현해보던가. 교수고 나발이고. 니 교수도 알고리즘 교수아래서 ph.d 받은거 아니면 내가 아는 정도만 알텐데. 참고로 header에 니가 만드는 depth같은 정보가 들어간다. dbms 관련 레코드로 b+트리 만들 때 page 계산할 때 header size 빼주고 계산하는 이유가 그거다. 생각을해라. 머리 못쓰면 학원 출신놈들이랑 다를게 뭐냐?
다시질문하는데 노드에 key[3], point[4] 이런식으로 배열짜는거 맞지? 근데 배우기론 key[0]과 point[1] 처럼 key[n],point[n+1]이 한쌍이라고 배웠는데 key[n]이 있는지없는지 존재유무확인하려면 point[n]으로 존재유무 따져야함? nullptr 인지아닌지 확인해서
아니 지금 그런 세부적인거 배우지도 않았고 단순하게 그 B+트리의 노드? 그것만 삽입기능만 제대로되는지 알수있게 데이터베이스는 다 제외하고 짜는거 page record block 다 고려 X
지금 큰 B+트리가아니라 들어와봣자 한 8번 숫자가 들어올거거든? 아무것도 없는 빈공간에
0 31 2 2 8 3 4 4 7 5 1 6 5 7 9
0 3 / 1 2 / 2 8 / 3 4 / 4 7 / 5 1 / 6 5 / 7 9 앞숫자가 포인터로 캐스팅해서 쓰라그랬고 뒤에숫자가 들어오는 KEY값임
3을넣으면 노드가 생성되고 거기에 0/3 들어가고 나머지까지 쓰자면 0/3/nullptr/NULL/nullptr/NULL/nullptr 이 되겟지
내가 DBMS 만들 때는 그냥 간단하게 int node[4*(2*nodeSize+1)] 로 때려박았다. 유무 따지기 싫으면 node 구조체 안에 header 정보 넣어서 element 갯수넣어야지. 그런데 sequential로 비교하게 될텐데 굳이 element 갯수 넣지 않아고 마지막 null pointer 체크해도 complexity는 같다.
이상태로 키가 3개까진 그냥 다 들어갈수있으니까 2 8까진 들어가서 0/3/1/2/2/8/nullptr 이 되잖아
nodeSize = 키 갯수
포인터는 type casting으로 사용하고.
자료구조 만드는건 니 맘이다. 누가 옳은게 아니라. 알고리즘에서 등신같은 삽질을 지금 하고 있으니 문제가 되는거.
근데 병신아. 0/3/1/2/2/8/nullptr 왜 포인터가 들어가야하는 cell에 null 이 들어가있냐???
null/3/pointer/2/pointer/8/null 병신아. 뭐하고 있냐???
여기서 이제 3/4 가 들어가면 넘치니까 split하게되고 0/3/1/2/nullptr/NULL/next -> 3/4/nullptr/NULL/nullptr/NULL/nullptr 이렇게되고 이 2개 노드를 자식노드로 잡는 부모 노드의 형태는 ?(왼쪽거)/4/?(오른쪽거)/NULL/nullptr/NULL/nullptr 이 되는거아님?
저 위에 0은 null이 아님
nullptr이 null포인터
근데 헷갈리는게 부모노드형태가 저렇게되는데 ?왼쪽거 ? 오른쪽거 여기 포인터는 자식의 어디를 가르켜야하냐 이건 안배운것같은데 ㅠㅠ
어후 배틀봐 불붙을뻔
아니 어휴... 이 씨발놈 지금 4시라 자야하는데 내가 이러고 있네. root 노드는 아무 숫자나 가질 수 있다. split 할 때 root node를 제외한 다른 노드들은 n/2보다 많은 key들을 가져야한다. n이 최대 가질 수 있는 키 값일
때. 니가 만든건 3개네. 2개 이상. 그러니까 split 할 때 신경 쓸게 뭐 있냐? 그냥 이것만 고려해서 그냥 split만 해주면 되는데.
아 참고로 과제에서 원하는건 키값 4개인데 내가 걍 줄여서 설명한거임 ㅋㅋ 예시로 설명하게 편하게 머 거기서 거기게지만 아 루트의 키값은 나눠질때 따로 중간값만 저장하면되는구나 한번 더 올려서.... 근데 다시 지룸ㄴ
그 나누고 루트에서 자식 2개 연결하잖아?
흠.. 이거 연결구현을 잠깐 너무헷갈린다... 트리를 너무 옛날에 구현해봐서... 1년도 더 전이라서.. 보통 전에만든 트리 만들때에는 만들때 new 써서 바로 붙여버렷는데 이건 일단 2개의 자식을 먼저 만들고 다시 그 부모를만들어서 부모의 1번째포인터오 2번째포인터로 자식을 가르켜야하니까..
root_node = new Node() 로 루트노드포인터를 새로운거로 체인지시키고 그 체인지상태로 일단냅두고 split 도중에 새로 2개 만들때 NODE를 붙이면될것같긴하네 돚우에
0 이 값으로 들어올 수 있는경우를 대비하는 플래그를 만들어 놓고 아니면 그거 참조해서 하던지
야 이건 내가 포인터공부가 부족한것같긴한데 int형으로 0 1 2 3 4 5 이런걸 포인터로 캐스팅해서 쓰라는게 문법적으로 어케 쓰라는거야? (*) 걍 이거붙이면 되는건 아닐거같고.. int (int*)인가...
어휴 두 병신이 병림픽 한번 거하게 했네
에휴 돌대가리도 아니고 책에나오는걸 왜 여기다 묻냐
머래 병신이 책이없으니까 묻지 ; 강의만들었음 책없이 듣는다.