[转] 5行代码足矣,不用递归实现无限分类数据的树形格式化
我们知道很多开源软件的无限分类都是采用递归的算法,但是我们知道递归即浪费时间,又浪费空间(内存), 上次我也分享了个我自己原创的无限分类生成树的方法,一热心php高手网友给我提出了宝贵的建议,我测试了一下,这段代码的时间非常之短,参考: http:/
我们知道很多开源软件的无限分类都是采用递归的算法,但是我们知道递归即浪费时间,又浪费空间(内存),
上次我也分享了个我自己原创的无限分类生成树的方法,一热心php高手网友给我提出了宝贵的建议,我测试了一下,这段代码的时间非常之短,参考: http://www.oschina.net/code/snippet_98719_11296,我再次整理了一下,发现数据库查询出数据之后,我们就已经定好了键值,因而实践中,我们一般会在model中查询出格式化成主键值对应数据的形式,因而我们可以直接用这样的数据,就少了一层循环。代码也非常简洁。
/** * 此方法由@Tonton 提供 * http://my.oschina.net/u/918697 * @date 2012-12-12 */ function genTree5($items) { foreach ($items as $item) $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']]; return isset($items[0]['son']) ? $items[0]['son'] : array(); }
/** * 将数据格式化成树形结构 * @author Xuefen.Tong * @param array $items * @return array */ function genTree9($items) { $tree = array(); //格式化好的树 foreach ($items as $item) if (isset($items[$item['pid']])) $items[$item['pid']]['son'][] = &$items[$item['id']]; else $tree[] = &$items[$item['id']]; return $tree; } $items = array( 1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'), 2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'), 3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'), 4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'), 5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'), 6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'), 7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'), 8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'), 9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'), 10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'), 11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'), 12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'), 13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'), 14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'), 15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'), 16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'), 17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'), 18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'), 19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'), ); print_r(genTree5($items)); print_r(genTree9($items)); //后者输出格式,前者类似,只是数组键值不一样,不过不影响数据结构 /* Array ( [0] => Array ( [id] => 1 [pid] => 0 [name] => 江西省 [son] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [name] => 南昌市 ) [1] => Array ( [id] => 13 [pid] => 1 [name] => 赣州市 [son] => Array ( [0] => Array ( [id] => 14 [pid] => 13 [name] => 赣县 [son] => Array ( [0] => Array ( [id] => 16 [pid] => 14 [name] => 茅店镇 [son] => Array ( [0] => Array ( [id] => 18 [pid] => 16 [name] => 义源村 ) [1] => Array ( [id] => 19 [pid] => 16 [name] => 上坝村 ) ) ) [1] => Array ( [id] => 17 [pid] => 14 [name] => 大田乡 ) ) ) [1] => Array ( [id] => 15 [pid] => 13 [name] => 于都县 ) ) ) ) ) [1] => Array ( [id] => 2 [pid] => 0 [name] => 黑龙江省 [son] => Array ( [0] => Array ( [id] => 4 [pid] => 2 [name] => 哈尔滨市 [son] => Array ( [0] => Array ( [id] => 6 [pid] => 4 [name] => 香坊区 [son] => Array ( [0] => Array ( [id] => 8 [pid] => 6 [name] => 和兴路 [son] => Array ( [0] => Array ( [id] => 10 [pid] => 8 [name] => 东北林业大学 ) [1] => Array ( [id] => 12 [pid] => 8 [name] => 哈尔滨师范大学 ) ) ) ) ) [1] => Array ( [id] => 7 [pid] => 4 [name] => 南岗区 [son] => Array ( [0] => Array ( [id] => 9 [pid] => 7 [name] => 西大直街 [son] => Array ( [0] => Array ( [id] => 11 [pid] => 9 [name] => 哈尔滨工业大学 ) ) ) ) ) ) ) [1] => Array ( [id] => 5 [pid] => 2 [name] => 鸡西市 ) ) ) )*/
原文地址:[转] 5行代码足矣,不用递归实现无限分类数据的树形格式化, 感谢原作者分享。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C++ 함수의 재귀 깊이에는 제한이 있습니다. 이 제한을 초과하면 스택 오버플로 오류가 발생합니다. 제한 값은 시스템과 컴파일러에 따라 다르지만 일반적으로 1,000에서 10,000 사이입니다. 솔루션에는 다음이 포함됩니다. 1. 테일 재귀 최적화, 2. 테일 호출, 3. 반복 구현.

예, C++ Lambda 표현식은 std::function을 사용하여 재귀를 지원할 수 있습니다. std::function을 사용하여 Lambda 표현식에 대한 참조를 캡처합니다. 캡처된 참조를 사용하면 Lambda 표현식이 자신을 재귀적으로 호출할 수 있습니다.

세상은 미친 듯이 큰 모델을 만들고 있습니다. 인터넷의 데이터만으로는 충분하지 않습니다. 훈련 모델은 '헝거게임'처럼 생겼고, 전 세계 AI 연구자들은 이러한 데이터를 탐식하는 사람들에게 어떻게 먹이를 줄지 고민하고 있습니다. 이 문제는 다중 모드 작업에서 특히 두드러집니다. 아무것도 할 수 없던 시기에, 중국 인민대학교 학과의 스타트업 팀은 자체 새로운 모델을 사용하여 중국 최초로 '모델 생성 데이터 피드 자체'를 현실화했습니다. 또한 이해 측면과 생성 측면의 두 가지 접근 방식으로 양측 모두 고품질의 다중 모드 새로운 데이터를 생성하고 모델 자체에 데이터 피드백을 제공할 수 있습니다. 모델이란 무엇입니까? Awaker 1.0은 중관촌 포럼에 최근 등장한 대형 멀티모달 모델입니다. 팀은 누구입니까? 소폰 엔진. 런민대학교 힐하우스 인공지능대학원 박사과정 학생인 Gao Yizhao가 설립했습니다.

지연이 발생하고 iPhone의 모바일 데이터 연결 속도가 느립니까? 일반적으로 휴대폰의 셀룰러 인터넷 강도는 지역, 셀룰러 네트워크 유형, 로밍 유형 등과 같은 여러 요소에 따라 달라집니다. 더 빠르고 안정적인 셀룰러 인터넷 연결을 얻기 위해 할 수 있는 일이 몇 가지 있습니다. 수정 1 – iPhone 강제 다시 시작 때로는 장치를 강제로 다시 시작하면 셀룰러 연결을 포함한 많은 항목이 재설정됩니다. 1단계 – 볼륨 높이기 키를 한 번 눌렀다가 놓습니다. 그런 다음 볼륨 작게 키를 눌렀다가 다시 놓습니다. 2단계 - 프로세스의 다음 부분은 오른쪽에 있는 버튼을 누르는 것입니다. iPhone이 다시 시작되도록 하세요. 셀룰러 데이터를 활성화하고 네트워크 속도를 확인하세요. 다시 확인하세요 수정 2 – 데이터 모드 변경 5G는 더 나은 네트워크 속도를 제공하지만 신호가 약할 때 더 잘 작동합니다

최근 군계는 미군 전투기가 이제 AI를 활용해 완전 자동 공중전을 완수할 수 있다는 소식에 충격을 받았다. 네, 얼마 전 미군의 AI 전투기가 최초로 공개되면서 그 미스터리가 드러났습니다. 이 전투기의 정식 명칭은 VISTA(Variable Stability Flight Simulator Test Aircraft)로 미 공군 장관이 직접 조종해 일대일 공중전을 모의 실험한 것이다. 5월 2일, 미 공군 장관 프랭크 켄달(Frank Kendall)이 X-62AVISTA를 타고 에드워드 공군 기지에서 이륙했습니다. 1시간의 비행 동안 모든 비행 작업은 AI에 의해 자동으로 완료되었습니다. Kendall은 "지난 수십 년 동안 우리는 자율 공대공 전투의 무한한 잠재력에 대해 생각해 왔지만 항상 도달할 수 없는 것처럼 보였습니다."라고 말했습니다. 그러나 지금은,

테슬라의 로봇 옵티머스(Optimus)의 최신 영상이 공개됐는데, 이미 공장에서 작동이 가능한 상태다. 정상 속도에서는 배터리(테슬라의 4680 배터리)를 다음과 같이 분류합니다. 공식은 또한 20배 속도로 보이는 모습을 공개했습니다. 작은 "워크스테이션"에서 따고 따고 따고 : 이번에 출시됩니다. 영상에는 옵티머스가 공장에서 이 작업을 전 과정에 걸쳐 사람의 개입 없이 완전히 자율적으로 완료하는 모습이 담겨 있습니다. 그리고 Optimus의 관점에서 보면 자동 오류 수정에 중점을 두고 구부러진 배터리를 집어 넣을 수도 있습니다. NVIDIA 과학자 Jim Fan은 Optimus의 손에 대해 높은 평가를 했습니다. Optimus의 손은 세계의 다섯 손가락 로봇 중 하나입니다. 가장 능숙합니다. 손은 촉각적일 뿐만 아니라

2024QS 주제별 세계 대학 순위가 공개되었습니다! 전체적으로 2023년과 별 변화가 없습니다. 공식 홈페이지 정보에 따르면 2024QS 과목별 세계 대학 순위는 55개 세부 분야, 5개 주요 학문 분야를 다루고 있다. 순위에는 총 1,559개 대학이 참여했으며, 그 중 64개가 올해 새로운 얼굴이다(즉, 2023년 순위에는 나타나지 않는다). 이들 64개 대학 중 14개 대학이 실제로 처음으로 등장했습니다. 그 중에는 중국 과학 아카데미 대학이 있습니다. 세련된 과목에 따르면 음악은 올해 새롭게 도입된 과목이다. 또한, 데이터과학과 인공지능 순위도 확대돼 51개 대학이 새롭게 순위에 추가됐다. 전체 목록의 상위 5개 대학은 MIT, 캠브리지 대학, 옥스퍼드 대학, 하버드 대학입니다.

재귀 알고리즘은 함수 자체 호출을 통해 구조화된 문제를 해결하지만 간단하고 이해하기 쉽다는 장점이 있지만 효율성이 떨어지고 스택 오버플로가 발생할 수 있다는 단점이 있습니다. 스택 데이터 구조의 장점은 더 효율적이고 스택 오버플로를 방지한다는 것입니다. 단점은 코드가 더 복잡할 수 있다는 것입니다. 재귀적 또는 비재귀적 선택은 문제와 구현의 특정 제약 조건에 따라 달라집니다.
